6Ollama provider model registry.
10:data:`MODELS` is the curated registry of well-known local models with
11their capabilities. Live models discovered via ``/api/tags`` that are
12not in this registry get :meth:`OllamaProvider.default_caps` instead
13(permissive local defaults).
15:data:`TIER_MAP` maps semantic tiers to model ids used by
16:meth:`OllamaProvider.tier`.
20- :data:`MODELS` — ``dict[str, ModelCaps]`` for frequently-used local
21 models across the llama, qwen, deepseek-r1, gemma, phi, and mistral
23- :data:`TIER_MAP` — semantic-tier lookup.
35- All ``TIER_MAP`` values must be valid keys in ``MODELS``.
36- Context windows reflect the *configured* Ollama defaults; actual
37 context is capped by available VRAM and Ollama's ``num_ctx`` setting.
41- option_c_agent_contracts (ModelCaps)
42- oc_diagnostics (structured debug logging via _dbg)
44from __future__
import annotations
46from oc_diagnostics
import _dbg
48from option_c_agent_contracts
import ModelCaps
50_dbg(
"OC_CHAT.CLIENT",
"module",
"loaded", 4)
52MODELS: dict[str, ModelCaps] = {
54 "llama3.2": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=131_072),
55 "llama3.2:1b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=131_072),
56 "llama3.2:3b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=131_072),
57 "llama3.1": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=131_072),
58 "llama3.1:8b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=131_072),
59 "llama3.1:70b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=131_072),
61 "qwen2.5": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
62 "qwen2.5:7b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
63 "qwen2.5:14b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
64 "qwen2.5:32b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
65 "qwen2.5-coder:7b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
67 "deepseek-r1": ModelCaps(supports_thinking=
False, supports_reasoning=
True, supports_tools=
False, max_context_tokens=65_536),
68 "deepseek-r1:1.5b": ModelCaps(supports_thinking=
False, supports_reasoning=
True, supports_tools=
False, max_context_tokens=65_536),
69 "deepseek-r1:7b": ModelCaps(supports_thinking=
False, supports_reasoning=
True, supports_tools=
False, max_context_tokens=65_536),
70 "deepseek-r1:8b": ModelCaps(supports_thinking=
False, supports_reasoning=
True, supports_tools=
False, max_context_tokens=65_536),
71 "deepseek-r1:14b": ModelCaps(supports_thinking=
False, supports_reasoning=
True, supports_tools=
False, max_context_tokens=65_536),
73 "gemma3": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
False, max_context_tokens=8_192),
74 "gemma3:4b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
False, max_context_tokens=8_192),
75 "gemma3:9b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
False, max_context_tokens=8_192),
76 "gemma3:27b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
False, max_context_tokens=8_192),
78 "phi4": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=16_384),
79 "phi4:14b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=16_384),
81 "mistral": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
82 "mistral:7b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
83 "codestral": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
84 "codestral:22b": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
True, max_context_tokens=32_768),
86 "nomic-embed-text": ModelCaps(supports_thinking=
False, supports_reasoning=
False, supports_tools=
False, max_context_tokens=8_192),
89TIER_MAP: dict[str, str] = {
90 "default":
"llama3.2",
92 "reasoning":
"deepseek-r1:8b",
93 "summary":
"llama3.2",
96__all__ = [
"MODELS",
"TIER_MAP"]