You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tooling.apache.org by ak...@apache.org on 2026/09/03 01:00:36 UTC

(tooling-llmao) 03/04: New version of example model_list config

This is an automated email from the ASF dual-hosted git repository.

andrewmusselman pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-llmao.git

commit b6e67d1ff1c3d28204dfc68cb1585125c5421949
Author: Andrew Musselman <ak...@apache.org>
AuthorDate: Wed Sep 2 17:58:31 2026 -0700

    New version of example model_list config
---
 model_list.yaml.example | 64 ++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 50 insertions(+), 14 deletions(-)

diff --git a/model_list.yaml.example b/model_list.yaml.example
index 8de1f44..52e25d7 100644
--- a/model_list.yaml.example
+++ b/model_list.yaml.example
@@ -1,25 +1,51 @@
-# Model inventory — single source of truth for LiteLLM routes + llmao UX.
+# Model catalog — what ASF offers, and the recipe for serving it.
 #
 #   cp model_list.yaml.example model_list.yaml
 #
-# litellm.yaml includes this file. Puppet/eyaml substitutes API keys only;
-# api_base is not secret (cleartext here; do not show raw bases in the UX).
-# Production: do not use STORE_MODEL_IN_DB for inventory — this YAML is SoT.
-# Ops: restart LiteLLM after VCS/config changes (p6 systemd notify later).
-
+# THIS IS NOT THE ROUTING TABLE. Routes live in LiteLLM's database
+# (STORE_MODEL_IN_DB=True) and are created by llmao when a vLLM server goes
+# healthy, one per running instance. This file defines the MODELS; routes are
+# instances of them. litellm.yaml does NOT include this file -- doing so would
+# create routes with no api_base, which sends every call to api.openai.com.
+#
+# Two consumers:
+#   llmao/models.py     public_models() strips litellm_params and surfaces
+#                       model_info as the catalog UX
+#   llmao route build   copies litellm_params, adds the per-instance api_base
+#                       and api_key, and POSTs /model/new
+#
+# So this carries what is true of the MODEL, never what is true of one machine.
+# No api_base, no api_key -- both are per-instance and generated when a host is
+# added. Nothing here is secret; Puppet substitutes nothing.
 model_list:
   - model_name: gemma4-26b
+    # Protocol and served name only. api_base and api_key are added per
+    # instance at registration.
     litellm_params:
       model: openai/gemma4-26b
-      api_base: http://127.0.0.1:8001
-      api_key: CHANGE_ME_SELFHOST_API_KEY
     model_info:
       vllm:
         model: google/gemma-4-26B-A4B-it
-        gpu_memory_utilization: 0.55
-        args: []
+        source:
+          kind: hf                # hf | url | registry | local
+        # Requirements, so a box can reject before pulling ~50GB. Host
+        # capacity is DISCOVERED on the box (nvidia-smi), never declared
+        # here -- a hand-typed VRAM figure is wrong the first time a
+        # provider supplies a different card than was ordered.
+        vram_gb: 49
+        disk_gb: 55
+        # Explicit, not inherited. A --max-model-len above the measured KV
+        # cache produces hangs rather than errors, so this is a decision.
+        max_model_len: 131072
+        args:
+          - --dtype
+          - bfloat16
+          - --reasoning-parser
+          - gemma4
       display_name: "Gemma 4 26B-A4B (self-hosted, multimodal)"
       provider: self-host
+      # The CONTRACT with callers. Every instance serving this model_name must
+      # honour it; where a pool is uneven, advertise the minimum across it.
       context_window: 131072
       license: Apache-2.0
       openness: open-weight
@@ -29,25 +55,32 @@ model_list:
       self_hosted: true
       modality: text+vision
       supports_thinking: true
+      # Measured through the proxy, not assumed: with no kwarg sent, Gemma
+      # emits 0 chars of reasoning and Qwen emits ~890. Callers must send
+      # enable_thinking:true to get reasoning from this model.
       thinks_by_default: false
       notes: >-
         MoE, ~4B active. General/multimodal/agentic default. Served off-host
         at BF16 on an 80GB card.
-
   - model_name: qwen3-8b
     litellm_params:
       model: openai/qwen3-8b
-      api_base: http://127.0.0.1:8003
-      api_key: CHANGE_ME_SELFHOST_API_KEY
     model_info:
       vllm:
         model: Qwen/Qwen3-8B-FP8
-        gpu_memory_utilization: 0.40
+        source:
+          kind: hf
+        vram_gb: 8
+        disk_gb: 18
+        max_model_len: 40960
         args:
           - --reasoning-parser
           - qwen3
       display_name: "Qwen3 8B (self-hosted, fast)"
       provider: self-host
+      # 40,960 is this model's max_position_embeddings -- an architectural
+      # ceiling, not a tuning choice. vLLM refuses higher at startup, and
+      # VLLM_ALLOW_LONG_MAX_MODEL_LEN produces NaN on this RoPE model.
       context_window: 40960
       license: Apache-2.0
       openness: open-weight
@@ -57,6 +90,9 @@ model_list:
       self_hosted: true
       modality: text
       supports_thinking: true
+      # Opposite of Gemma: Qwen reasons UNLESS told not to. A fast tier must
+      # actively send enable_thinking:false, and a low max_tokens returns
+      # content:null with the whole budget spent in reasoning_content.
       thinks_by_default: true
       notes: >-
         Fast lightweight tier for routine/cheap calls. Reasoning model


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tooling.apache.org
For additional commands, e-mail: commits-help@tooling.apache.org