@oh-my-pi/pi-catalog 18.10.4 → 18.11.0
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 +16 -0
- package/dist/types/compat/auth-ids.d.ts +2 -2
- package/dist/types/compat/provider-ids.d.ts +1 -1
- package/dist/types/provider-models/openai-compat.d.ts +18 -0
- package/package.json +4 -4
- package/src/compat/auth-ids.ts +2 -0
- package/src/compat/provider-ids.ts +1 -0
- package/src/compat/rules/auth/_order.kdl +1 -1
- package/src/compat/rules/auth/sambanova.kdl +9 -0
- package/src/compat/rules/classes/minimax.kdl +1 -1
- package/src/compat/rules/providers/local.kdl +8 -1
- package/src/compat/rules/providers/opencode-go.kdl +31 -0
- package/src/compat/rules/providers/sambanova.kdl +60 -0
- package/src/compat/rules/runtime/behavior.kdl +4 -0
- package/src/compat/rules/taxonomy/gemma.kdl +1 -0
- package/src/compat/rules/taxonomy/meta.kdl +4 -0
- package/src/compat/rules.json +1 -1
- package/src/models.json +1 -1
- package/src/provider-models/cache-provider-id.ts +1 -1
- package/src/provider-models/descriptors.ts +2 -0
- package/src/provider-models/openai-compat.ts +103 -5
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.11.0] - 2026-10-14
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added `local/nemotron-streaming-en-0.6b` for local streaming English dictation ([#15759](https://github.com/can1357/oh-my-pi/pull/15759) by [@daaximus](https://github.com/daaximus)).
|
|
10
|
+
- Added SambaNova Cloud (`sambanova`) as a provider: `/login sambanova` with an API key, and the live `/v1/models` roster with its prices, reasoning models, and Gemma 4 image input ([#14986](https://github.com/can1357/oh-my-pi/pull/14986) by [@rjuez00](https://github.com/rjuez00))
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- OpenCode Go requests now go to the current `https://opencode.ai/inference/go/v1` endpoint instead of the legacy `/zen/go` one ([#15722](https://github.com/can1357/oh-my-pi/issues/15722))
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Fixed OpenCode Go's `deepseek-flash` alias showing $0, unknown limits, and no reasoning instead of the V4.1 Flash rate card and capabilities ([#15357](https://github.com/can1357/oh-my-pi/issues/15357))
|
|
19
|
+
- Fixed OpenCode Go's Gemini 4 Argon Contributor failing with an unsupported protocol and thinking level; it now uses the native Gemini endpoint ([#15722](https://github.com/can1357/oh-my-pi/issues/15722))
|
|
20
|
+
|
|
5
21
|
## [18.10.4] - 2026-10-13
|
|
6
22
|
|
|
7
23
|
### Added
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** Every provider with an `auth/<id>.kdl` policy. */
|
|
2
|
-
export type AuthProviderId = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "apple" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "commandcode" | "coralbricks" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "factory-droid" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "helmcode" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "snowflake" | "stencil" | "stepfun" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
2
|
+
export type AuthProviderId = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "apple" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "commandcode" | "coralbricks" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "factory-droid" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "helmcode" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "sambanova" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "snowflake" | "stencil" | "stepfun" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
3
3
|
/** Providers whose policy declares a `login` flow (the `/login` roster). */
|
|
4
|
-
export type LoginProviderId = "abliteration" | "aiand" | "alibaba-coding-plan" | "alibaba-token-plan" | "anthropic" | "baseten" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "commandcode" | "coralbricks" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "factory-droid" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google-antigravity" | "google-gemini-cli" | "helmcode" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "meta" | "minimax-code" | "minimax-code-cn" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "snowflake" | "stencil" | "stepfun" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
4
|
+
export type LoginProviderId = "abliteration" | "aiand" | "alibaba-coding-plan" | "alibaba-token-plan" | "anthropic" | "baseten" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "commandcode" | "coralbricks" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "factory-droid" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google-antigravity" | "google-gemini-cli" | "helmcode" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "meta" | "minimax-code" | "minimax-code-cn" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "sambanova" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "snowflake" | "stencil" | "stepfun" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Every chat-model provider with a catalog entry (`default-model` in its provider rules). */
|
|
2
|
-
export type KnownProvider = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "apple" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "commandcode" | "coralbricks" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "factory-droid" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "helmcode" | "huggingface" | "kilo" | "kimi-code" | "litellm" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "opencode-go" | "opencode-zen" | "openrouter" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "snowflake" | "stepfun" | "synthetic" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zenmux" | "zhipu-coding-plan";
|
|
2
|
+
export type KnownProvider = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "apple" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "commandcode" | "coralbricks" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "factory-droid" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "helmcode" | "huggingface" | "kilo" | "kimi-code" | "litellm" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "opencode-go" | "opencode-zen" | "openrouter" | "qianfan" | "qwen-portal" | "sakana" | "sambanova" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "snowflake" | "stepfun" | "synthetic" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zenmux" | "zhipu-coding-plan";
|
|
@@ -100,6 +100,19 @@ export interface CerebrasModelManagerConfig {
|
|
|
100
100
|
fetch?: FetchImpl;
|
|
101
101
|
}
|
|
102
102
|
export declare function cerebrasModelManagerOptions(config?: CerebrasModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
103
|
+
/** SambaNova discovery inputs: `apiKey` enables the live roster; `baseUrl` defaults to SambaNova Cloud. */
|
|
104
|
+
export interface SambaNovaModelManagerConfig {
|
|
105
|
+
apiKey?: string;
|
|
106
|
+
baseUrl?: string;
|
|
107
|
+
fetch?: FetchImpl;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* SambaNova Cloud's model manager. `/v1/models` requires a key, so a keyless
|
|
111
|
+
* manager serves only the bundled seed; with a key the live roster replaces
|
|
112
|
+
* it. Rows carry pricing and limits but no capability metadata: reasoning,
|
|
113
|
+
* thinking wire format, and image input come from `providers/sambanova.kdl`.
|
|
114
|
+
*/
|
|
115
|
+
export declare function sambanovaModelManagerOptions(config?: SambaNovaModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
103
116
|
export interface HuggingfaceModelManagerConfig {
|
|
104
117
|
apiKey?: string;
|
|
105
118
|
baseUrl?: string;
|
|
@@ -655,6 +668,11 @@ export interface ModelsDevProviderDescriptor {
|
|
|
655
668
|
}
|
|
656
669
|
/** Generic mapper that converts models.dev data using provider descriptors. */
|
|
657
670
|
export declare function mapModelsDevToModels(data: Record<string, unknown>, descriptors: readonly ModelsDevProviderDescriptor[]): ModelSpec<Api>[];
|
|
671
|
+
/**
|
|
672
|
+
* OpenCode Go endpoint for one request API. The model generator re-bases
|
|
673
|
+
* previous-snapshot rows with it so retained rows follow endpoint moves.
|
|
674
|
+
*/
|
|
675
|
+
export declare function openCodeGoBaseUrlForApi(api: Api): string;
|
|
658
676
|
/** Resolves the transport and endpoint for one Z.AI model catalog entry. */
|
|
659
677
|
export declare function resolveZaiApi(modelId: string): {
|
|
660
678
|
api: "anthropic-messages" | "openai-completions";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-my-pi/pi-catalog",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.11.0",
|
|
4
4
|
"description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -93,12 +93,12 @@
|
|
|
93
93
|
"gen:proto": "bun scripts/generate-protocols.ts"
|
|
94
94
|
},
|
|
95
95
|
"dependencies": {
|
|
96
|
-
"@oh-my-pi/omptype": "18.
|
|
97
|
-
"@oh-my-pi/pi-utils": "18.
|
|
96
|
+
"@oh-my-pi/omptype": "18.11.0",
|
|
97
|
+
"@oh-my-pi/pi-utils": "18.11.0"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
100
|
"@bgotink/kdl": "0.4.0",
|
|
101
|
-
"@oh-my-pi/pi-ai": "18.
|
|
101
|
+
"@oh-my-pi/pi-ai": "18.11.0",
|
|
102
102
|
"@types/bun": "^1.3.14"
|
|
103
103
|
},
|
|
104
104
|
"engines": {
|
package/src/compat/auth-ids.ts
CHANGED
|
@@ -70,6 +70,7 @@ export type AuthProviderId =
|
|
|
70
70
|
| "qianfan"
|
|
71
71
|
| "qwen-portal"
|
|
72
72
|
| "sakana"
|
|
73
|
+
| "sambanova"
|
|
73
74
|
| "siliconflow"
|
|
74
75
|
| "siliconflow-cn"
|
|
75
76
|
| "singularityapi-dev"
|
|
@@ -157,6 +158,7 @@ export type LoginProviderId =
|
|
|
157
158
|
| "qianfan"
|
|
158
159
|
| "qwen-portal"
|
|
159
160
|
| "sakana"
|
|
161
|
+
| "sambanova"
|
|
160
162
|
| "siliconflow"
|
|
161
163
|
| "siliconflow-cn"
|
|
162
164
|
| "singularityapi-dev"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
login-order "openai-codex" "anthropic" "zai" "zai-coding-plan" "kimi-code" "openrouter" "github-copilot" \
|
|
5
5
|
"cursor" "devin" "google-antigravity" "google-gemini-cli" "openai-codex-device" "xai" "xai-oauth" \
|
|
6
6
|
"gitlab-duo" "gitlab-duo-agent" "alibaba-coding-plan" "alibaba-token-plan" "aiand" "abliteration" "zhipu-coding-plan" \
|
|
7
|
-
"umans" "qwen-portal" "sakana" "minimax-code" "minimax-code-cn" "xiaomi" "xiaomi-token-plan-sgp" \
|
|
7
|
+
"umans" "qwen-portal" "sakana" "sambanova" "minimax-code" "minimax-code-cn" "xiaomi" "xiaomi-token-plan-sgp" \
|
|
8
8
|
"xiaomi-token-plan-ams" "xiaomi-token-plan-cn" "firepass" "cline-pass" "factory-droid" "commandcode" "charm-hyper" "deepseek" "stepfun" "muse-code" "meta" "moonshot" \
|
|
9
9
|
"cerebras" "baseten" "helmcode" "fireworks" "together" "nvidia" "novita" "deepinfra" "huggingface" "perplexity" \
|
|
10
10
|
"qianfan" "venice" "siliconflow" "siliconflow-cn" "synthetic" "nanogpt" "wafer-serverless" "coreweave" \
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
auth "sambanova" {
|
|
2
|
+
name "SambaNova"
|
|
3
|
+
login "api-key" {
|
|
4
|
+
auth-url "https://cloud.sambanova.ai/apis"
|
|
5
|
+
instructions "Copy your API key from the SambaNova Cloud dashboard"
|
|
6
|
+
prompt "Paste your SambaNova API key" placeholder="..."
|
|
7
|
+
validate "models-endpoint" label="SambaNova" url="https://api.sambanova.ai/v1/models"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -30,7 +30,7 @@ class "minimax" {
|
|
|
30
30
|
// upstream metadata, not the model ceiling (documented: 1M in / 128K out).
|
|
31
31
|
// Exact selectors are case-sensitive, so both served spellings are listed:
|
|
32
32
|
// MiniMax hosts publish `MiniMax-M3`, Charm Hyper publishes `minimax-m3`.
|
|
33
|
-
on "charm-hyper" "minimax" "minimax-cn" "minimax-code" "minimax-code-cn" {
|
|
33
|
+
on "charm-hyper" "minimax" "minimax-cn" "minimax-code" "minimax-code-cn" "sambanova" {
|
|
34
34
|
models "MiniMax-M3" "minimax-m3" {
|
|
35
35
|
limits-patch {
|
|
36
36
|
context-window 1000000
|
|
@@ -19,6 +19,13 @@ provider "local" {
|
|
|
19
19
|
limits
|
|
20
20
|
supports-tools #false
|
|
21
21
|
}
|
|
22
|
+
model "nemotron-streaming-en-0.6b" name="Nemotron Speech 0.6B (Streaming English)" {
|
|
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
|
+
}
|
|
22
29
|
model "whisper-base" name="Whisper Base" {
|
|
23
30
|
reasoning #false
|
|
24
31
|
input "text"
|
|
@@ -101,7 +108,7 @@ provider "local" {
|
|
|
101
108
|
models "kokoro" {
|
|
102
109
|
kind "tts"
|
|
103
110
|
}
|
|
104
|
-
models "parakeet-tdt-0.6b-v3" "whisper-*" {
|
|
111
|
+
models "parakeet-tdt-0.6b-v3" "nemotron-streaming-en-0.6b" "whisper-*" {
|
|
105
112
|
kind "stt"
|
|
106
113
|
}
|
|
107
114
|
models "lfm*" "falcon-*" "qwen*" "llama3.2:3b" "gemma-3-1b" {
|
|
@@ -15,6 +15,37 @@ provider "opencode-go" {
|
|
|
15
15
|
input-modalities "text" "image"
|
|
16
16
|
strip-image-input #false
|
|
17
17
|
}
|
|
18
|
+
// residue: the ids-only Go roster lists this bare V4.1 Flash alias with no
|
|
19
|
+
// price, limits or reasoning flag, and neither models.dev nor the bundle has
|
|
20
|
+
// a row to hydrate it from (#15357). Mirror the gateway's own
|
|
21
|
+
// `deepseek-v4.1-flash` row; `cost-fallback` yields to any price discovery
|
|
22
|
+
// reports later.
|
|
23
|
+
models "deepseek-flash" {
|
|
24
|
+
thinking-upgrade-neutral #true
|
|
25
|
+
cost-fallback {
|
|
26
|
+
input 0.15
|
|
27
|
+
output 0.6
|
|
28
|
+
cache-read 0.003
|
|
29
|
+
cache-write 0.0
|
|
30
|
+
}
|
|
31
|
+
limits-patch {
|
|
32
|
+
context-window 1000000
|
|
33
|
+
max-tokens 384000
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Live Go discovery lists Argon without capabilities; its native Gemini
|
|
37
|
+
// endpoint requires a thinking level and accepts LOW, MEDIUM, or HIGH.
|
|
38
|
+
models "gemini-4-argon-contributor" {
|
|
39
|
+
thinking-upgrade-neutral #true
|
|
40
|
+
thinking-mode "google-level"
|
|
41
|
+
thinking-efforts "low" "medium" "high"
|
|
42
|
+
thinking-requires-effort #true
|
|
43
|
+
input-modalities "text" "image"
|
|
44
|
+
limits-patch {
|
|
45
|
+
context-window 1048576
|
|
46
|
+
max-tokens 65536
|
|
47
|
+
}
|
|
48
|
+
}
|
|
18
49
|
// Replaces the OpenCode reasoning-model whenThinking fallback object.
|
|
19
50
|
when-thinking {
|
|
20
51
|
requires-reasoning-content-for-tool-calls #true
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Provider-wire compat for "sambanova". SambaNova Cloud is an OpenAI-compatible
|
|
2
|
+
// gateway whose roster changes often (preview models come and go on short
|
|
3
|
+
// notice), so the live `/v1/models` roster is authoritative. Its rows carry
|
|
4
|
+
// pricing and limits but no capability metadata; the selectors below own
|
|
5
|
+
// reasoning, thinking wire format, and image input.
|
|
6
|
+
|
|
7
|
+
provider "sambanova" {
|
|
8
|
+
default-model "gpt-oss-120b"
|
|
9
|
+
env "SAMBANOVA_API_KEY"
|
|
10
|
+
discovery label="SambaNova"
|
|
11
|
+
|
|
12
|
+
dynamic-models-authoritative #true
|
|
13
|
+
skip-cross-provider-reference-fills #true
|
|
14
|
+
|
|
15
|
+
// `/v1/models` requires a key. This row keeps the provider visible in
|
|
16
|
+
// `/model` before login; the first live roster replaces it. Rate card from
|
|
17
|
+
// https://cloud.sambanova.ai/pricing.
|
|
18
|
+
seed api="openai-completions" base-url="https://api.sambanova.ai/v1" bundle="fallback" {
|
|
19
|
+
model "gpt-oss-120b" name="GPT OSS 120B" {
|
|
20
|
+
reasoning #true
|
|
21
|
+
input "text"
|
|
22
|
+
cost input=0.22 output=0.59 cache-read=0 cache-write=0
|
|
23
|
+
limits context=131072
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// `/chat/completions` documents `reasoning_effort` as low/medium/high
|
|
28
|
+
// (https://docs.sambanova.ai/docs/api-reference/chat-completions/create-chat-based-completion).
|
|
29
|
+
thinking-mode "effort"
|
|
30
|
+
thinking-format "openai"
|
|
31
|
+
class "gpt-oss" {
|
|
32
|
+
thinking-efforts "low" "medium" "high"
|
|
33
|
+
thinking-upgrade-neutral #true
|
|
34
|
+
}
|
|
35
|
+
class "minimax" {
|
|
36
|
+
family "m3" {
|
|
37
|
+
thinking-efforts "low" "medium" "high"
|
|
38
|
+
thinking-upgrade-neutral #true
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// DeepSeek V3.x and Gemma 4 think only when the request sets
|
|
42
|
+
// `chat_template_kwargs.enable_thinking`; it is off by default and no
|
|
43
|
+
// effort reaches the template, so the ladder is one on-rung beside off
|
|
44
|
+
// (https://docs.sambanova.ai/docs/en/features/text-generation).
|
|
45
|
+
class "deepseek" {
|
|
46
|
+
revision ">=3.1 <4" {
|
|
47
|
+
thinking-format "qwen-chat-template"
|
|
48
|
+
thinking-efforts "high"
|
|
49
|
+
thinking-upgrade-neutral #true
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
class "gemma" {
|
|
53
|
+
revision ">=4" {
|
|
54
|
+
thinking-format "qwen-chat-template"
|
|
55
|
+
thinking-efforts "high"
|
|
56
|
+
thinking-upgrade-neutral #true
|
|
57
|
+
input-modalities "text" "image"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -181,6 +181,9 @@ behavior {
|
|
|
181
181
|
exclude-models provider="nanogpt" substring="embedding" substring="image" substring="vision" \
|
|
182
182
|
substring="audio" substring="speech" substring="transcribe" substring="moderation" \
|
|
183
183
|
substring="realtime" substring="whisper" substring="tts"
|
|
184
|
+
// SambaNova's /v1/models may include embedding and audio SKUs.
|
|
185
|
+
exclude-models provider="sambanova" substring="embedding" substring="whisper" substring="audio" \
|
|
186
|
+
substring="e5-mistral" substring="clip"
|
|
184
187
|
// AIML API's roster interleaves media/embedding SKUs; bounded tokens keep
|
|
185
188
|
// chat ids from false-matching on plain substrings.
|
|
186
189
|
exclude-models provider="aimlapi" token="audio" token="embed" token="embedding" token="embeddings" \
|
|
@@ -263,6 +266,7 @@ behavior {
|
|
|
263
266
|
// responses pins are gateway-verified (deepseek-v4-flash 2026-08-08;
|
|
264
267
|
// muse-spark per opencode.ai/docs/go/#endpoints, #8957, #10610).
|
|
265
268
|
api-routes provider="opencode-go" {
|
|
269
|
+
route "google-generative-ai" exact="gemini-4-argon-contributor"
|
|
266
270
|
route "anthropic-messages" exact="union-alpha"
|
|
267
271
|
route "openai-responses" prefix="muse-spark-" exact="deepseek-v4-flash" exact="muse-spark-1.2" \
|
|
268
272
|
exact="muse-spark-1.2-contributor" exact="muse-spark-1.3" exact="muse-spark-1.3-contributor"
|
|
@@ -2,6 +2,10 @@ class "meta" {
|
|
|
2
2
|
bounded "muse-spark"
|
|
3
3
|
bounded "muse-wonder"
|
|
4
4
|
bounded "llama"
|
|
5
|
+
// SambaNova serves the bare `Meta-Llama-*` spelling with no namespace
|
|
6
|
+
// segment, which `bounded "llama"` never sees (prefix-anchored) and
|
|
7
|
+
// `namespace "meta-llama"` cannot match.
|
|
8
|
+
bounded "meta-llama"
|
|
5
9
|
namespace "meta-llama"
|
|
6
10
|
|
|
7
11
|
family "llama" glob="*llama*"
|