Commit 67672dc5b for llama.cpp

commit 67672dc5b76f8bc17785a19d3dc6d1463fc2902c
Author: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>
Date:   Mon Sep 7 21:10:06 2026 +0200

    ci : bump ty to 0.0.78 (#28548)

    * bump ty to 0.0.78

    * type fixes

    * more type fixes

    * add --exit-zero-on-warning

    * remove Callable again

diff --git a/.github/workflows/python-type-check.yml b/.github/workflows/python-type-check.yml
index 14edb1a9d..1a2f40ad4 100644
--- a/.github/workflows/python-type-check.yml
+++ b/.github/workflows/python-type-check.yml
@@ -31,7 +31,7 @@ jobs:
         uses: actions/setup-python@v6
         with:
           python-version: "3.11"
-          pip-install: -r requirements/requirements-all.txt ty==0.0.35
+          pip-install: -r requirements/requirements-all.txt ty==0.0.78
       # - name: Type-check with Pyright
       #   uses: jakebailey/pyright-action@v2
       #   with:
@@ -40,4 +40,4 @@ jobs:
       #     warnings: true
       - name: Type-check with ty
         run: |
-            ty check --output-format=github
+            ty check --exit-zero-on-warning --output-format=github
diff --git a/conversion/minimax.py b/conversion/minimax.py
index 53a9ff60f..aac340c61 100644
--- a/conversion/minimax.py
+++ b/conversion/minimax.py
@@ -25,7 +25,7 @@ class MiniMaxText01Model(TextModel):
         # they get in the way of the token sampling process and must be suppressed

         tokenizer = AutoTokenizer.from_pretrained(self.dir_model, trust_remote_code=True)
-        tokenizer_vocab_size = tokenizer.vocab_size
+        tokenizer_vocab_size = tokenizer.vocab_size  # ty: ignore[unresolved-attribute]

         with open(self.dir_model / "model.safetensors.index.json", "r", encoding="utf-8") as f:
             weight_map = json.load(f)["weight_map"]
diff --git a/conversion/muse_glimmer.py b/conversion/muse_glimmer.py
index b205f70a0..c86b33227 100644
--- a/conversion/muse_glimmer.py
+++ b/conversion/muse_glimmer.py
@@ -37,7 +37,7 @@ class MuseGlimmerModel(TextModel):

         from transformers import AutoTokenizer
         tok = AutoTokenizer.from_pretrained(self.dir_model)
-        eot_id = tok.convert_tokens_to_ids("<|eot|>")
+        eot_id = tok.convert_tokens_to_ids("<|eot|>")  # ty: ignore[unresolved-attribute]
         if isinstance(eot_id, int) and eot_id >= 0:
             self.gguf_writer.add_eot_token_id(eot_id)

diff --git a/examples/pydantic_models_to_grammar.py b/examples/pydantic_models_to_grammar.py
index 0cdd0b570..736b2b7df 100644
--- a/examples/pydantic_models_to_grammar.py
+++ b/examples/pydantic_models_to_grammar.py
@@ -1177,7 +1177,7 @@ def create_dynamic_model_from_function(func: Callable[..., Any]):
         dynamic_fields[param.name] = (
             param.annotation if param.annotation != inspect.Parameter.empty else str, default_value)
     # Creating the dynamic model
-    dynamic_model = create_model(f"{getattr(func, '__name__')}", **dynamic_fields)
+    dynamic_model = create_model(f"{getattr(func, '__name__')}", **dynamic_fields)  # ty: ignore[no-matching-overload]

     for name, param_doc in param_docs:
         dynamic_model.model_fields[name].description = param_doc.description
diff --git a/scripts/jinja/jinja-tester.py b/scripts/jinja/jinja-tester.py
index a83f02541..6d36ecfa5 100755
--- a/scripts/jinja/jinja-tester.py
+++ b/scripts/jinja/jinja-tester.py
@@ -20,7 +20,6 @@ from PySide6.QtCore import Qt, QRect, QSize
 from jinja2 import TemplateSyntaxError
 from jinja2.sandbox import ImmutableSandboxedEnvironment
 from datetime import datetime
-from typing import Callable


 def format_template_content(template_content):
@@ -396,7 +395,7 @@ class JinjaTester(QMainWindow):
                 ensure_ascii=ensure_ascii,
             )
         )
-        env.globals["strftime_now"]: Callable[[str], str] = lambda format: datetime.now().strftime(format)
+        env.globals["strftime_now"] = lambda format: datetime.now().strftime(format)  # ty: ignore[invalid-assignment, invalid-argument-type]
         env.globals["raise_exception"] = raise_exception  # ty: ignore[invalid-assignment]
         try:
             template = env.from_string(template_str)
diff --git a/scripts/snapdragon/ggml-hexagon-profile.py b/scripts/snapdragon/ggml-hexagon-profile.py
index 038d92fb5..48b3fe479 100755
--- a/scripts/snapdragon/ggml-hexagon-profile.py
+++ b/scripts/snapdragon/ggml-hexagon-profile.py
@@ -7,7 +7,7 @@ import argparse
 import statistics
 import logging
 import bisect
-from typing import Any, Dict, List, Optional
+from typing import Any, Dict, List, Optional, Iterable

 from collections import defaultdict

@@ -473,6 +473,8 @@ def print_bubbles_timeline(op):
     all_bubbles = []
     for t in active_threads:
         stats = thread_stats[t]
+        assert isinstance(stats['dma_bubbles'], Iterable)
+        assert isinstance(stats['compute_bubbles'], Iterable)
         for start, end, dur in stats['compute_bubbles']:
             pct = (dur / batch_duration) * 100.0
             all_bubbles.append((dur, f"Thread {t} Compute: bubble of {dur} cycles ({pct:.1f}%) at {start - op_start} to {end - op_start}"))
diff --git a/scripts/tool_bench.py b/scripts/tool_bench.py
index d9f5583d4..fb7df10f3 100755
--- a/scripts/tool_bench.py
+++ b/scripts/tool_bench.py
@@ -52,8 +52,8 @@ import typer

 sys.path.insert(0, Path(__file__).parent.parent.as_posix())
 if True:
-    from tools.server.tests.utils import ServerProcess
-    from tools.server.tests.unit.test_tool_call import do_test_calc_result, do_test_hello_world, do_test_weather
+    from tools.server.tests.utils import ServerProcess  # ty: ignore[unresolved-import]
+    from tools.server.tests.unit.test_tool_call import do_test_calc_result, do_test_hello_world, do_test_weather  # ty: ignore[unresolved-import]


 @contextmanager