@oh-my-pi/pi-catalog 18.2.6 → 18.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +24 -3
  2. package/README.md +18 -18
  3. package/THIRD-PARTY-NOTICES.txt +0 -37
  4. package/dist/types/build.d.ts +7 -1
  5. package/dist/types/compat/auth-ids.d.ts +1 -1
  6. package/dist/types/compat/axes.d.ts +1 -1
  7. package/dist/types/compat/cascade.d.ts +3 -2
  8. package/dist/types/compat/provider-ids.d.ts +1 -1
  9. package/dist/types/compat/resolve.d.ts +2 -0
  10. package/dist/types/compat/taxonomy.d.ts +2 -2
  11. package/dist/types/compat/types.d.ts +18 -7
  12. package/dist/types/discovery/index.d.ts +1 -0
  13. package/dist/types/discovery/openai-compatible.d.ts +2 -0
  14. package/dist/types/discovery/typesafe.d.ts +26 -0
  15. package/dist/types/model-manager.d.ts +1 -1
  16. package/dist/types/provider-models/openai-compat.d.ts +6 -4
  17. package/dist/types/provider-models/special.d.ts +10 -0
  18. package/dist/types/types.d.ts +23 -0
  19. package/package.json +38 -38
  20. package/src/build.ts +27 -5
  21. package/src/compat/auth-ids.ts +2 -0
  22. package/src/compat/axes.ts +9 -1
  23. package/src/compat/cascade.ts +45 -23
  24. package/src/compat/provider-ids.ts +3 -0
  25. package/src/compat/resolve.ts +24 -14
  26. package/src/compat/rules/README.md +38 -35
  27. package/src/compat/rules/auth/local.kdl +4 -0
  28. package/src/compat/rules/auth/typesafe.kdl +3 -6
  29. package/src/compat/rules/auth/web.kdl +4 -0
  30. package/src/compat/rules/classes/qwen.kdl +6 -5
  31. package/src/compat/rules/providers/anthropic.kdl +1 -0
  32. package/src/compat/rules/providers/deepinfra.kdl +28 -0
  33. package/src/compat/rules/providers/google-antigravity.kdl +17 -0
  34. package/src/compat/rules/providers/google.kdl +9 -0
  35. package/src/compat/rules/providers/llama.cpp.kdl +23 -0
  36. package/src/compat/rules/providers/local.kdl +110 -0
  37. package/src/compat/rules/providers/openai-codex.kdl +18 -0
  38. package/src/compat/rules/providers/openai.kdl +61 -0
  39. package/src/compat/rules/providers/openrouter.kdl +132 -0
  40. package/src/compat/rules/providers/typesafe.kdl +21 -0
  41. package/src/compat/rules/providers/web.kdl +153 -0
  42. package/src/compat/rules/providers/xai-oauth.kdl +26 -0
  43. package/src/compat/rules/providers/xai.kdl +22 -0
  44. package/src/compat/rules/runtime/behavior.kdl +2 -1
  45. package/src/compat/rules/taxonomy/qwen.kdl +2 -0
  46. package/src/compat/rules.json +12526 -1
  47. package/src/compat/taxonomy.ts +92 -31
  48. package/src/compat/types.ts +22 -7
  49. package/src/discovery/devin.ts +3 -1
  50. package/src/discovery/index.ts +1 -0
  51. package/src/discovery/openai-compatible.ts +4 -1
  52. package/src/discovery/typesafe.ts +118 -0
  53. package/src/model-manager.ts +44 -15
  54. package/src/models.json +1 -1
  55. package/src/provider-models/descriptors.ts +6 -0
  56. package/src/provider-models/openai-compat.ts +357 -78
  57. package/src/provider-models/special.ts +53 -0
  58. package/src/types.ts +51 -0
@@ -0,0 +1,110 @@
1
+ // On-device inference workers exposed as catalog models.
2
+
3
+ provider "local" {
4
+ default-model "lfm2.5-230m"
5
+ allow-unauthenticated #true
6
+
7
+ seed api="local-inference" base-url="local://inference" bundle="always" {
8
+ model "kokoro" name="Kokoro-82M" {
9
+ reasoning #false
10
+ input "text"
11
+ cost input=0 output=0 cache-read=0 cache-write=0
12
+ limits
13
+ supports-tools #false
14
+ }
15
+ model "parakeet-tdt-0.6b-v3" name="Parakeet TDT 0.6B v3" {
16
+ reasoning #false
17
+ input "text"
18
+ cost input=0 output=0 cache-read=0 cache-write=0
19
+ limits
20
+ supports-tools #false
21
+ }
22
+ model "whisper-base" name="Whisper Base" {
23
+ reasoning #false
24
+ input "text"
25
+ cost input=0 output=0 cache-read=0 cache-write=0
26
+ limits
27
+ supports-tools #false
28
+ }
29
+ model "whisper-small" name="Whisper Small" {
30
+ reasoning #false
31
+ input "text"
32
+ cost input=0 output=0 cache-read=0 cache-write=0
33
+ limits
34
+ supports-tools #false
35
+ }
36
+ model "whisper-large-v3-turbo" name="Whisper Large v3 Turbo" {
37
+ reasoning #false
38
+ input "text"
39
+ cost input=0 output=0 cache-read=0 cache-write=0
40
+ limits
41
+ supports-tools #false
42
+ }
43
+ model "lfm2.5-230m" name="LFM2.5 230M" {
44
+ reasoning #false
45
+ input "text"
46
+ cost input=0 output=0 cache-read=0 cache-write=0
47
+ limits
48
+ supports-tools #false
49
+ }
50
+ model "lfm2.5-350m" name="LFM2.5 350M" {
51
+ reasoning #false
52
+ input "text"
53
+ cost input=0 output=0 cache-read=0 cache-write=0
54
+ limits
55
+ supports-tools #false
56
+ }
57
+ model "falcon-h1-90m" name="Falcon H1 Tiny 90M" {
58
+ reasoning #false
59
+ input "text"
60
+ cost input=0 output=0 cache-read=0 cache-write=0
61
+ limits
62
+ supports-tools #false
63
+ }
64
+ model "qwen3-1.7b" name="Qwen3 1.7B" {
65
+ reasoning #true
66
+ input "text"
67
+ cost input=0 output=0 cache-read=0 cache-write=0
68
+ limits
69
+ supports-tools #false
70
+ }
71
+ model "llama3.2:3b" name="Llama 3.2 3B" {
72
+ reasoning #false
73
+ input "text"
74
+ cost input=0 output=0 cache-read=0 cache-write=0
75
+ limits
76
+ supports-tools #false
77
+ }
78
+ model "gemma-3-1b" name="Gemma 3 1B" {
79
+ reasoning #false
80
+ input "text"
81
+ cost input=0 output=0 cache-read=0 cache-write=0
82
+ limits
83
+ supports-tools #false
84
+ }
85
+ model "qwen2.5-1.5b" name="Qwen2.5 1.5B" {
86
+ reasoning #false
87
+ input "text"
88
+ cost input=0 output=0 cache-read=0 cache-write=0
89
+ limits
90
+ supports-tools #false
91
+ }
92
+ model "lfm2-1.2b" name="LFM2 1.2B" {
93
+ reasoning #false
94
+ input "text"
95
+ cost input=0 output=0 cache-read=0 cache-write=0
96
+ limits
97
+ supports-tools #false
98
+ }
99
+ }
100
+
101
+ models "kokoro" {
102
+ kind "tts"
103
+ }
104
+ models "parakeet-tdt-0.6b-v3" "whisper-*" {
105
+ kind "stt"
106
+ }
107
+ models "lfm*" "falcon-*" "qwen*" "llama3.2:3b" "gemma-3-1b" {
108
+ kind "tiny"
109
+ }
110
+ }
@@ -3,6 +3,24 @@
3
3
  provider "openai-codex" {
4
4
  default-model "gpt-5.5"
5
5
  env "OPENAI_CODEX_OAUTH_TOKEN"
6
+ kind-apis {
7
+ image "openai-codex-responses"
8
+ }
9
+ web-search "codex"
10
+
11
+ seed api="openai-codex-responses" base-url="https://chatgpt.com/backend-api" bundle="always" {
12
+ model "gpt-image-1" name="GPT Image 1" {
13
+ reasoning #false
14
+ input "text" "image"
15
+ cost input=0 output=0 cache-read=0 cache-write=0
16
+ limits
17
+ supports-tools #false
18
+ }
19
+ }
20
+
21
+ models "gpt-image-1" {
22
+ kind "image"
23
+ }
6
24
 
7
25
  // Replaces the Codex provider's handwritten flex/priority pricing fallback.
8
26
  service-tier-cost {
@@ -3,6 +3,11 @@
3
3
  provider "openai" {
4
4
  default-model "gpt-5.5"
5
5
  env "OPENAI_API_KEY"
6
+ kind-apis {
7
+ embedding "openai-embeddings"
8
+ image "openai-responses"
9
+ stt "openai-transcriptions"
10
+ }
6
11
 
7
12
  // Daybreak models are approval-gated first-party Responses models that are
8
13
  // not yet present in stencil.so. Seed the documented aliases and current
@@ -30,6 +35,62 @@ provider "openai" {
30
35
  cost input=12.5 output=75 cache-read=1.25 cache-write=15.625
31
36
  limits context=400000 max-tokens=128000
32
37
  }
38
+
39
+ // Catalog cost fields are per 1M tokens: GPT transcribers map documented
40
+ // audio-input/output-token rates directly. Whisper's $0.006/min duration
41
+ // tariff has no token-cost representation, so it remains zero and the
42
+ // transcription response's provider-reported usage/cost is authoritative.
43
+ model "whisper-1" name="Whisper 1" api="openai-transcriptions" base-url="https://api.openai.com/v1" {
44
+ reasoning #false
45
+ input "text"
46
+ cost input=0 output=0 cache-read=0 cache-write=0
47
+ limits
48
+ supports-tools #false
49
+ }
50
+ model "gpt-4o-transcribe" name="GPT-4o Transcribe" api="openai-transcriptions" base-url="https://api.openai.com/v1" {
51
+ reasoning #false
52
+ input "text"
53
+ cost input=2.5 output=10 cache-read=0 cache-write=0
54
+ limits context=16000 max-tokens=2000
55
+ supports-tools #false
56
+ }
57
+ model "gpt-4o-mini-transcribe" name="GPT-4o Mini Transcribe" api="openai-transcriptions" base-url="https://api.openai.com/v1" {
58
+ reasoning #false
59
+ input "text"
60
+ cost input=1.25 output=5 cache-read=0 cache-write=0
61
+ limits context=16000 max-tokens=2000
62
+ supports-tools #false
63
+ }
64
+ // OpenAI publishes embedding prices per million input tokens; embedding
65
+ // responses have no output-token charge.
66
+ model "text-embedding-3-small" name="Text Embedding 3 Small" api="openai-embeddings" base-url="https://api.openai.com/v1" {
67
+ reasoning #false
68
+ input "text"
69
+ cost input=0.02 output=0 cache-read=0 cache-write=0
70
+ limits context=8192
71
+ supports-tools #false
72
+ }
73
+ model "text-embedding-3-large" name="Text Embedding 3 Large" api="openai-embeddings" base-url="https://api.openai.com/v1" {
74
+ reasoning #false
75
+ input "text"
76
+ cost input=0.13 output=0 cache-read=0 cache-write=0
77
+ limits context=8192
78
+ supports-tools #false
79
+ }
80
+ model "text-embedding-ada-002" name="Text Embedding Ada 002" api="openai-embeddings" base-url="https://api.openai.com/v1" {
81
+ reasoning #false
82
+ input "text"
83
+ cost input=0.1 output=0 cache-read=0 cache-write=0
84
+ limits context=8192
85
+ supports-tools #false
86
+ }
87
+ }
88
+
89
+ models "whisper-1" "gpt-4o-transcribe" "gpt-4o-mini-transcribe" {
90
+ kind "stt"
91
+ }
92
+ models "text-embedding-3-small" "text-embedding-3-large" "text-embedding-ada-002" {
93
+ kind "embedding"
33
94
  }
34
95
 
35
96
  // Replaces the strict-mode provider whitelist entry.
@@ -4,6 +4,133 @@ provider "openrouter" {
4
4
  default-model "openai/gpt-5.5"
5
5
  env "OPENROUTER_API_KEY"
6
6
  discovery label="OpenRouter" allow-unauthenticated=#true
7
+ kind-apis {
8
+ embedding "openai-embeddings"
9
+ image "openrouter-images"
10
+ rerank "openrouter-rerank"
11
+ video "openrouter-video"
12
+ tts "openai-speech"
13
+ stt "openai-transcriptions"
14
+ }
15
+ web-search "openrouter"
16
+
17
+ // TypeSafe's Jev answers only through the Decisions API (`/api/alpha/decisions`,
18
+ // System One wire shape); the default `/models` roster omits `text->decisions`
19
+ // rows, so the alias is authored here and discovery refreshes the family.
20
+ seed api="openrouter-decisions" base-url="https://openrouter.ai/api/alpha" bundle="always" {
21
+ model "~typesafe/jev-latest" name="TypeSafe: Jev Latest" {
22
+ reasoning #false
23
+ input "text"
24
+ cost input=0.042 output=0 cache-read=0 cache-write=0
25
+ limits context=32000 max-tokens=28800
26
+ }
27
+
28
+ // OpenRouter's STT roster mixes per-token and duration-based prices.
29
+ // Token-priced GPT rows map per-token rates to catalog per-million costs;
30
+ // duration-priced rows remain zero because ModelCost has no seconds axis.
31
+ model "openai/whisper-1" name="OpenAI: Whisper 1" api="openai-transcriptions" base-url="https://openrouter.ai/api/v1" {
32
+ reasoning #false
33
+ input "text"
34
+ cost input=0 output=0 cache-read=0 cache-write=0
35
+ limits
36
+ supports-tools #false
37
+ }
38
+ model "openai/whisper-large-v3" name="OpenAI: Whisper Large V3" api="openai-transcriptions" base-url="https://openrouter.ai/api/v1" {
39
+ reasoning #false
40
+ input "text"
41
+ cost input=0 output=0 cache-read=0 cache-write=0
42
+ limits
43
+ supports-tools #false
44
+ }
45
+ model "openai/gpt-4o-transcribe" name="OpenAI: GPT-4o Transcribe" api="openai-transcriptions" base-url="https://openrouter.ai/api/v1" {
46
+ reasoning #false
47
+ input "text"
48
+ cost input=2.5 output=10 cache-read=0 cache-write=0
49
+ limits context=128000 max-tokens=115200
50
+ supports-tools #false
51
+ }
52
+ model "microsoft/mai-transcribe-1.5" name="Microsoft AI: MAI-Transcribe 1.5" api="openai-transcriptions" base-url="https://openrouter.ai/api/v1" {
53
+ reasoning #false
54
+ input "text"
55
+ cost input=0 output=0 cache-read=0 cache-write=0
56
+ limits
57
+ supports-tools #false
58
+ }
59
+ model "microsoft/mai-transcribe-2" name="Microsoft AI: MAI-Transcribe 2" api="openai-transcriptions" base-url="https://openrouter.ai/api/v1" {
60
+ reasoning #false
61
+ input "text"
62
+ cost input=0 output=0 cache-read=0 cache-write=0
63
+ limits
64
+ supports-tools #false
65
+ }
66
+
67
+ // OpenRouter bills reranking per 1,000 searches, which has no catalog cost
68
+ // axis. Keep token costs at zero; the provider-reported response cost is authoritative.
69
+ model "cohere/rerank-v3.5" name="Cohere: Rerank v3.5" api="openrouter-rerank" base-url="https://openrouter.ai/api/v1" {
70
+ reasoning #false
71
+ input "text"
72
+ cost input=0 output=0 cache-read=0 cache-write=0
73
+ limits context=4096 max-tokens=3686
74
+ supports-tools #false
75
+ }
76
+ // Bundled fallbacks keep the gateway useful offline; live
77
+ // `/embeddings/models` discovery refreshes this roster and its per-token
78
+ // pricing. Catalog token costs are per million input tokens.
79
+ model "openai/text-embedding-3-small" name="OpenAI: Text Embedding 3 Small" api="openai-embeddings" base-url="https://openrouter.ai/api/v1" {
80
+ reasoning #false
81
+ input "text"
82
+ cost input=0.02 output=0 cache-read=0 cache-write=0
83
+ limits context=8192
84
+ supports-tools #false
85
+ }
86
+ model "qwen/qwen3-embedding-8b" name="Qwen: Qwen3 Embedding 8B" api="openai-embeddings" base-url="https://openrouter.ai/api/v1" {
87
+ reasoning #false
88
+ input "text"
89
+ cost input=0.01 output=0 cache-read=0 cache-write=0
90
+ limits context=32768
91
+ supports-tools #false
92
+ }
93
+ // OpenRouter bills generated video by output second and resolution/SKU,
94
+ // which ModelCost cannot represent. Keep token costs at zero; poll-reported
95
+ // cost is authoritative. Live `/videos/models` discovery refreshes the roster.
96
+ model "google/veo-3.1" name="Google: Veo 3.1" api="openrouter-video" base-url="https://openrouter.ai/api/v1" {
97
+ reasoning #false
98
+ input "text" "image"
99
+ cost input=0 output=0 cache-read=0 cache-write=0
100
+ limits
101
+ supports-tools #false
102
+ }
103
+ model "minimax/hailuo-3" name="MiniMax: H3" api="openrouter-video" base-url="https://openrouter.ai/api/v1" {
104
+ reasoning #false
105
+ input "text" "image"
106
+ cost input=0 output=0 cache-read=0 cache-write=0
107
+ limits
108
+ supports-tools #false
109
+ }
110
+ model "alibaba/wan-2.7" name="Alibaba: Wan 2.7" api="openrouter-video" base-url="https://openrouter.ai/api/v1" {
111
+ reasoning #false
112
+ input "text" "image"
113
+ cost input=0 output=0 cache-read=0 cache-write=0
114
+ limits
115
+ supports-tools #false
116
+ }
117
+ }
118
+ models "~typesafe/*" "typesafe/*" {
119
+ kind "judge"
120
+ }
121
+ models "cohere/rerank-v3.5" {
122
+ kind "rerank"
123
+ }
124
+ models "openai/text-embedding-3-small" "qwen/qwen3-embedding-8b" {
125
+ kind "embedding"
126
+ }
127
+ models "google/veo-3.1" "minimax/hailuo-3" "alibaba/wan-2.7" {
128
+ kind "video"
129
+ }
130
+ models "openai/whisper-1" "openai/whisper-large-v3" "openai/gpt-4o-transcribe" \
131
+ "microsoft/mai-transcribe-1.5" "microsoft/mai-transcribe-2" {
132
+ kind "stt"
133
+ }
7
134
 
8
135
  // Replaces the OpenRouter provider wire-model-id dispatch branch.
9
136
  wire-model-id-mode "openrouter"
@@ -59,6 +186,11 @@ provider "openrouter" {
59
186
  thinking-efforts "minimal" "low" "medium" "high"
60
187
  thinking-requires-effort #true
61
188
  }
189
+ // The proxy conservatively classifies this tool-capable text+image output row
190
+ // as chat; OpenRouter's dedicated image roster confirms the image transport.
191
+ models "google/gemini-3-pro-image" {
192
+ kind "image"
193
+ }
62
194
  // residue: taxonomy ranks and exact globs do not isolate these models.
63
195
  models "qwen/qwen3-coder" {
64
196
  thinking-format "openrouter"
@@ -0,0 +1,21 @@
1
+ // TypeSafe System One judgment models.
2
+
3
+ provider "typesafe" {
4
+ default-model "jev-latest"
5
+ env "TYPESAFE_API_KEY"
6
+
7
+ seed api="typesafe" base-url="https://api.typesafe.ai" bundle="always" {
8
+ model "jev-latest" name="TypeSafe jev" {
9
+ reasoning #false
10
+ input "text"
11
+ // Jev bills input only; matches the OpenRouter route seed.
12
+ cost input=0.042 output=0 cache-read=0 cache-write=0
13
+ limits
14
+ supports-tools #false
15
+ }
16
+ }
17
+
18
+ models "*" {
19
+ kind "judge"
20
+ }
21
+ }
@@ -0,0 +1,153 @@
1
+ // Pure search engines exposed through the web-search runner.
2
+
3
+ provider "web" {
4
+ default-model "public"
5
+ allow-unauthenticated #true
6
+
7
+ seed api="web-search" base-url="web://search" bundle="always" {
8
+ model "parallel" name="Parallel" {
9
+ reasoning #false
10
+ input "text"
11
+ cost input=0 output=0 cache-read=0 cache-write=0
12
+ limits
13
+ supports-tools #false
14
+ }
15
+ model "perplexity" name="Perplexity" {
16
+ reasoning #false
17
+ input "text"
18
+ cost input=0 output=0 cache-read=0 cache-write=0
19
+ limits
20
+ supports-tools #false
21
+ }
22
+ model "zai" name="Z.AI" {
23
+ reasoning #false
24
+ input "text"
25
+ cost input=0 output=0 cache-read=0 cache-write=0
26
+ limits
27
+ supports-tools #false
28
+ }
29
+ model "exa" name="Exa" {
30
+ reasoning #false
31
+ input "text"
32
+ cost input=0 output=0 cache-read=0 cache-write=0
33
+ limits
34
+ supports-tools #false
35
+ }
36
+ model "tinyfish" name="TinyFish" {
37
+ reasoning #false
38
+ input "text"
39
+ cost input=0 output=0 cache-read=0 cache-write=0
40
+ limits
41
+ supports-tools #false
42
+ }
43
+ model "jina" name="Jina" {
44
+ reasoning #false
45
+ input "text"
46
+ cost input=0 output=0 cache-read=0 cache-write=0
47
+ limits
48
+ supports-tools #false
49
+ }
50
+ model "kagi" name="Kagi" {
51
+ reasoning #false
52
+ input "text"
53
+ cost input=0 output=0 cache-read=0 cache-write=0
54
+ limits
55
+ supports-tools #false
56
+ }
57
+ model "tavily" name="Tavily" {
58
+ reasoning #false
59
+ input "text"
60
+ cost input=0 output=0 cache-read=0 cache-write=0
61
+ limits
62
+ supports-tools #false
63
+ }
64
+ model "firecrawl" name="Firecrawl" {
65
+ reasoning #false
66
+ input "text"
67
+ cost input=0 output=0 cache-read=0 cache-write=0
68
+ limits
69
+ supports-tools #false
70
+ }
71
+ model "brave" name="Brave" {
72
+ reasoning #false
73
+ input "text"
74
+ cost input=0 output=0 cache-read=0 cache-write=0
75
+ limits
76
+ supports-tools #false
77
+ }
78
+ model "kimi" name="Kimi" {
79
+ reasoning #false
80
+ input "text"
81
+ cost input=0 output=0 cache-read=0 cache-write=0
82
+ limits
83
+ supports-tools #false
84
+ }
85
+ model "synthetic" name="Synthetic" {
86
+ reasoning #false
87
+ input "text"
88
+ cost input=0 output=0 cache-read=0 cache-write=0
89
+ limits
90
+ supports-tools #false
91
+ }
92
+ model "ollama" name="Ollama" {
93
+ reasoning #false
94
+ input "text"
95
+ cost input=0 output=0 cache-read=0 cache-write=0
96
+ limits
97
+ supports-tools #false
98
+ }
99
+ model "searxng" name="SearXNG" {
100
+ reasoning #false
101
+ input "text"
102
+ cost input=0 output=0 cache-read=0 cache-write=0
103
+ limits
104
+ supports-tools #false
105
+ }
106
+ model "startpage" name="Startpage" {
107
+ reasoning #false
108
+ input "text"
109
+ cost input=0 output=0 cache-read=0 cache-write=0
110
+ limits
111
+ supports-tools #false
112
+ }
113
+ model "duckduckgo" name="DuckDuckGo" {
114
+ reasoning #false
115
+ input "text"
116
+ cost input=0 output=0 cache-read=0 cache-write=0
117
+ limits
118
+ supports-tools #false
119
+ }
120
+ model "ecosia" name="Ecosia" {
121
+ reasoning #false
122
+ input "text"
123
+ cost input=0 output=0 cache-read=0 cache-write=0
124
+ limits
125
+ supports-tools #false
126
+ }
127
+ model "google" name="Google" {
128
+ reasoning #false
129
+ input "text"
130
+ cost input=0 output=0 cache-read=0 cache-write=0
131
+ limits
132
+ supports-tools #false
133
+ }
134
+ model "mojeek" name="Mojeek" {
135
+ reasoning #false
136
+ input "text"
137
+ cost input=0 output=0 cache-read=0 cache-write=0
138
+ limits
139
+ supports-tools #false
140
+ }
141
+ model "public" name="Public Web" {
142
+ reasoning #false
143
+ input "text"
144
+ cost input=0 output=0 cache-read=0 cache-write=0
145
+ limits
146
+ supports-tools #false
147
+ }
148
+ }
149
+
150
+ models "*" {
151
+ kind "search"
152
+ }
153
+ }
@@ -4,6 +4,11 @@ provider "xai-oauth" {
4
4
  default-model "grok-4.6"
5
5
  env "XAI_OAUTH_TOKEN" "XAI_API_KEY"
6
6
  discovery label="xAI Grok OAuth (SuperGrok)" oauth-provider="xai-oauth"
7
+ kind-apis {
8
+ image "openai-images"
9
+ tts "xai-tts"
10
+ }
11
+ web-search "xai"
7
12
 
8
13
  // Source of truth for the xai-oauth chat picker. Declaration order is headline order.
9
14
  // Context windows from hermes-agent/agent/model_metadata.py:205-220
@@ -82,6 +87,27 @@ provider "xai-oauth" {
82
87
  cost input=0 output=0 cache-read=0 cache-write=0
83
88
  limits context=200000 max-tokens=200000
84
89
  }
90
+ model "grok-tts" name="Grok TTS" api="xai-tts" {
91
+ reasoning #false
92
+ input "text"
93
+ cost input=0 output=0 cache-read=0 cache-write=0
94
+ limits
95
+ supports-tools #false
96
+ }
97
+ model "grok-imagine-image" name="Grok Imagine Image" api="openai-images" {
98
+ reasoning #false
99
+ input "text" "image"
100
+ cost input=0 output=0 cache-read=0 cache-write=0
101
+ limits
102
+ supports-tools #false
103
+ }
104
+ }
105
+
106
+ models "grok-imagine-image" {
107
+ kind "image"
108
+ }
109
+ models "grok-tts" {
110
+ kind "tts"
85
111
  }
86
112
 
87
113
  // Replaces the provider-keyed prompt-cache session-header baseline.
@@ -3,6 +3,28 @@
3
3
  provider "xai" {
4
4
  default-model "grok-4.6"
5
5
  env "XAI_API_KEY"
6
+ kind-apis {
7
+ image "openai-images"
8
+ tts "xai-tts"
9
+ }
10
+ web-search "xai"
11
+
12
+ seed api="xai-tts" base-url="https://api.x.ai/v1" bundle="always" {
13
+ model "grok-tts" name="Grok TTS" {
14
+ reasoning #false
15
+ input "text"
16
+ cost input=0 output=0 cache-read=0 cache-write=0
17
+ limits
18
+ supports-tools #false
19
+ }
20
+ }
21
+
22
+ models "grok-imagine-image" {
23
+ kind "image"
24
+ }
25
+ models "grok-tts" {
26
+ kind "tts"
27
+ }
6
28
 
7
29
  // Replaces the provider-keyed prompt-cache session-header baseline.
8
30
  prompt-cache-session-header "x-grok-conv-id"
@@ -140,7 +140,8 @@ behavior {
140
140
  exclude-models provider="xiaomi-token-plan-sgp" substring="-tts" substring="-asr"
141
141
  // SuperGrok's roster interleaves media models the chat picker cannot
142
142
  // serve; the dedicated tool surfaces route them instead.
143
- exclude-models provider="xai-oauth" prefix="grok-imagine-" prefix="grok-stt-" prefix="grok-voice-"
143
+ exclude-models provider="xai-oauth" exact="grok-imagine-image-quality" exact="grok-imagine-image-2.0" \
144
+ exact="grok-imagine-video" exact="grok-imagine-video-1.5" prefix="grok-stt-" prefix="grok-voice-"
144
145
  // Meta's /v1/models lists image generation and transcription SKUs beside
145
146
  // the Muse Spark chat models.
146
147
  exclude-models provider="meta" prefix="muse-image-" prefix="muse-voice-"
@@ -13,6 +13,8 @@ class "qwen" {
13
13
  revision prefix="qwen"
14
14
 
15
15
  override id="yolo-auto-yolo-flash-identity" provider="yolo-auto" model="yolo" class="qwen" revision="3.8" rationale="Yolo-Auto's paid yolo route is initially backed by the same Qwen3.8 Flash deployment as qwen3.8-flash; the opaque alias carries no lineage tokens" provenance="yolo-auto.com/models (2026-09)"
16
+ override id="prismml-bonsai-27b-qwen-3-6" glob="*bonsai-27b*" class="qwen" revision="3.6" rationale="Reviewed PrismML Bonsai and Ternary-Bonsai 27B lineage is Qwen3.6-27B; the wire basename may carry a prefix or GGUF quantization suffix" provenance="packages/coding-agent/src/config/model-discovery.ts; original reviewed alias e3aa6594e5"
17
+ override id="prismml-bonsai-2-27b-qwen-3-8" glob="*bonsai-2-27b*" class="qwen" revision="3.8" rationale="Reviewed PrismML Bonsai 2 27B lineage is Qwen3.8-27B; the wire basename may carry a prefix or GGUF quantization suffix" provenance="packages/coding-agent/src/config/model-discovery.ts"
16
18
  override id="kilo-qwq-32b-family" provider="kilo" model="qwq-32b" logical="qwen/qwq-32b" class="qwen" rationale="The reviewed Kilo QwQ deployment belongs to the Qwen family despite its opaque product spelling" provenance="fixtures/llm-oracle/catalog/models.normalized.json"
17
19
  override id="nanogpt-eva-qwen-2-5-family" provider="nanogpt" model="EVA-Qwen2.5-32B-v0.2" logical="EVA-UNIT-01/EVA-Qwen2.5-32B-v0.2" class="qwen" rationale="The reviewed EVA deployment is a Qwen 2.5 derivative despite its opaque product namespace" provenance="fixtures/llm-oracle/catalog/models.normalized.json"
18
20
  override id="nanogpt-eva-qwen-2-5-72b-family" provider="nanogpt" model="EVA-Qwen2.5-72B-v0.2" logical="EVA-UNIT-01/EVA-Qwen2.5-72B-v0.2" class="qwen" rationale="The reviewed EVA 72B deployment is a Qwen 2.5 derivative despite its opaque product namespace" provenance="fixtures/llm-oracle/catalog/models.normalized.json"