diff --git a/coworker/providers/matrix.py b/coworker/providers/matrix.py index bf6a878c..b04955af 100644 --- a/coworker/providers/matrix.py +++ b/coworker/providers/matrix.py @@ -109,6 +109,26 @@ class ModelEntry: "mistral:mistral-large-latest": ModelEntry( "Mistral Large · Mistral", _AGENTIC, 128_000 ), + # -- SambaNova --------------------------------------------------------------- + # OpenAI-compatible API (verified against api.sambanova.ai/v1/models 2026-07-30). + "sambanova:Meta-Llama-3.3-70B-Instruct": ModelEntry( + "Llama 3.3 70B · SambaNova", _AGENTIC, 131_072 + ), + "sambanova:DeepSeek-V3.1": ModelEntry( + "DeepSeek V3.1 · SambaNova", _AGENTIC, 131_072 + ), + "sambanova:DeepSeek-V3.2": ModelEntry( + "DeepSeek V3.2 · SambaNova", _AGENTIC, 32_768 + ), + "sambanova:MiniMax-M2.7": ModelEntry( + "MiniMax M2.7 · SambaNova", _AGENTIC, 196_608 + ), + "sambanova:gemma-4-31B-it": ModelEntry( + "Gemma 4 31B · SambaNova", _AGENTIC, 131_072 + ), + "sambanova:gpt-oss-120b": ModelEntry( + "GPT-OSS 120B · SambaNova", _AGENTIC, 131_072 + ), # -- resellers (their model namespaces, verbatim) ----------------------------- "together:thinkingmachines/Inkling": ModelEntry("Inkling · via Together"), "together:zai-org/GLM-5.2": ModelEntry("GLM-5.2 · via Together", _AGENTIC, 128_000), @@ -157,6 +177,16 @@ class ModelEntry: "openrouter:meta-llama/llama-4-maverick": ModelEntry( "Llama 4 Maverick · via OpenRouter", _AGENTIC, 1_000_000 ), + # -- SambaNova ------------------------------------------------------ + "sambanova:Meta-Llama/Llama-4-Maverick-17B-128E-Instruct": ModelEntry( + "Llama 4 Maverick · SambaNova", _AGENTIC, 1_000_000 + ), + "sambanova:Qwen/Qwen3-72B-Instruct": ModelEntry( + "Qwen3 72B · SambaNova", _AGENTIC, 128_000 + ), + "sambanova:deepseek-ai/DeepSeek-V3-0324": ModelEntry( + "DeepSeek V3 · SambaNova", _AGENTIC, 128_000 + ), # -- cloud accounts (models running in the user's own AWS/GCP) ---------------- # Bedrock ids carry a family segment (claude/ → native Anthropic path, other/ → # Converse) plus AWS's own `-v:` version suffix. Some regions require the diff --git a/coworker/providers/registry.py b/coworker/providers/registry.py index a07ec316..31679c63 100644 --- a/coworker/providers/registry.py +++ b/coworker/providers/registry.py @@ -519,6 +519,14 @@ def _compat( env_key="META_API_KEY", endpoint_help="Prefilled with the Meta Model API endpoint (public preview, US-only as of 2026-07).", ), + _compat( + "sambanova", + "SambaNova", + base_url="https://api.sambanova.ai/v1", + recommended_model="Meta-Llama-3.3-70B-Instruct", + env_key="SAMBANOVA_API_KEY", + endpoint_help="Prefilled with SambaNova's official OpenAI-compatible endpoint.", + ), # Resellers: many labs' models behind one key, using THEIR model namespaces (the curated # ids + display labels live in providers/matrix.py). TODO: add Groq here (+ its matrix # rows) once the current provider surface is tested — deliberately deferred to bound diff --git a/surfaces/gui/src/providers/ProviderSetup.tsx b/surfaces/gui/src/providers/ProviderSetup.tsx index b2f962d4..65c0ffbd 100644 --- a/surfaces/gui/src/providers/ProviderSetup.tsx +++ b/surfaces/gui/src/providers/ProviderSetup.tsx @@ -32,6 +32,7 @@ export const KEY_HELP: Record = { qwen: { url: "https://modelstudio.console.alibabacloud.com", label: "alibabacloud.com" }, minimax: { url: "https://platform.minimax.io", label: "platform.minimax.io" }, xai: { url: "https://console.x.ai", label: "console.x.ai" }, + sambanova: { url: "https://console.sambanova.cloud", label: "console.sambanova.cloud" }, }; export type Verify = { state: "idle" | "testing" | "ok" | "error"; msg?: string }; diff --git a/surfaces/gui/src/providers/logos.ts b/surfaces/gui/src/providers/logos.ts index 093c4fdd..7c1b0b16 100644 --- a/surfaces/gui/src/providers/logos.ts +++ b/surfaces/gui/src/providers/logos.ts @@ -22,6 +22,7 @@ import qwen from "./logos/qwen.svg"; import minimax from "./logos/minimax.svg"; import xai from "./logos/xai.svg"; import meta from "./logos/meta.svg"; +import sambanova from "./logos/sambanova.svg"; export const PROVIDER_LOGOS: Record = { anthropic, @@ -41,6 +42,7 @@ export const PROVIDER_LOGOS: Record = { qwen, minimax, xai, + sambanova, }; export const PROVIDER_ORDER = [ @@ -61,6 +63,7 @@ export const PROVIDER_ORDER = [ "qwen", "minimax", "xai", + "sambanova", ]; export function providerRank(name: string): number { diff --git a/surfaces/gui/src/providers/logos/sambanova.svg b/surfaces/gui/src/providers/logos/sambanova.svg new file mode 100644 index 00000000..3be0af3f --- /dev/null +++ b/surfaces/gui/src/providers/logos/sambanova.svg @@ -0,0 +1 @@ +SambaNovaSN \ No newline at end of file