@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.
- package/CHANGELOG.md +24 -3
- package/README.md +18 -18
- package/THIRD-PARTY-NOTICES.txt +0 -37
- package/dist/types/build.d.ts +7 -1
- package/dist/types/compat/auth-ids.d.ts +1 -1
- package/dist/types/compat/axes.d.ts +1 -1
- package/dist/types/compat/cascade.d.ts +3 -2
- package/dist/types/compat/provider-ids.d.ts +1 -1
- package/dist/types/compat/resolve.d.ts +2 -0
- package/dist/types/compat/taxonomy.d.ts +2 -2
- package/dist/types/compat/types.d.ts +18 -7
- package/dist/types/discovery/index.d.ts +1 -0
- package/dist/types/discovery/openai-compatible.d.ts +2 -0
- package/dist/types/discovery/typesafe.d.ts +26 -0
- package/dist/types/model-manager.d.ts +1 -1
- package/dist/types/provider-models/openai-compat.d.ts +6 -4
- package/dist/types/provider-models/special.d.ts +10 -0
- package/dist/types/types.d.ts +23 -0
- package/package.json +38 -38
- package/src/build.ts +27 -5
- package/src/compat/auth-ids.ts +2 -0
- package/src/compat/axes.ts +9 -1
- package/src/compat/cascade.ts +45 -23
- package/src/compat/provider-ids.ts +3 -0
- package/src/compat/resolve.ts +24 -14
- package/src/compat/rules/README.md +38 -35
- package/src/compat/rules/auth/local.kdl +4 -0
- package/src/compat/rules/auth/typesafe.kdl +3 -6
- package/src/compat/rules/auth/web.kdl +4 -0
- package/src/compat/rules/classes/qwen.kdl +6 -5
- package/src/compat/rules/providers/anthropic.kdl +1 -0
- package/src/compat/rules/providers/deepinfra.kdl +28 -0
- package/src/compat/rules/providers/google-antigravity.kdl +17 -0
- package/src/compat/rules/providers/google.kdl +9 -0
- package/src/compat/rules/providers/llama.cpp.kdl +23 -0
- package/src/compat/rules/providers/local.kdl +110 -0
- package/src/compat/rules/providers/openai-codex.kdl +18 -0
- package/src/compat/rules/providers/openai.kdl +61 -0
- package/src/compat/rules/providers/openrouter.kdl +132 -0
- package/src/compat/rules/providers/typesafe.kdl +21 -0
- package/src/compat/rules/providers/web.kdl +153 -0
- package/src/compat/rules/providers/xai-oauth.kdl +26 -0
- package/src/compat/rules/providers/xai.kdl +22 -0
- package/src/compat/rules/runtime/behavior.kdl +2 -1
- package/src/compat/rules/taxonomy/qwen.kdl +2 -0
- package/src/compat/rules.json +12526 -1
- package/src/compat/taxonomy.ts +92 -31
- package/src/compat/types.ts +22 -7
- package/src/discovery/devin.ts +3 -1
- package/src/discovery/index.ts +1 -0
- package/src/discovery/openai-compatible.ts +4 -1
- package/src/discovery/typesafe.ts +118 -0
- package/src/model-manager.ts +44 -15
- package/src/models.json +1 -1
- package/src/provider-models/descriptors.ts +6 -0
- package/src/provider-models/openai-compat.ts +357 -78
- package/src/provider-models/special.ts +53 -0
- 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"
|
|
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"
|