feat: add cerebras.ai provider

Agusti F. created

Change summary

internal/providers/configs/cerebras.json | 110 ++++++++++++++++++++++++++
internal/providers/providers.go          |   8 +
2 files changed, 118 insertions(+)

Detailed changes

internal/providers/configs/cerebras.json 🔗

@@ -0,0 +1,110 @@
+{
+    "name": "Cerebras",
+    "id": "cerebras",
+    "type": "openai",
+    "api_key": "$CEREBRAS_API_KEY",
+    "api_endpoint": "https://api.cerebras.ai/v1",
+    "default_large_model_id": "qwen-3-235b-a22b-instruct-2507",
+    "default_small_model_id": "qwen-3-32b",
+    "models": [
+        {
+            "id": "llama-4-scout-17b-16e-instruct",
+            "name": "Llama 4 Scout",
+            "parameters": "109B",
+            "speed_tokens_per_s": 2600,
+            "cost_per_1m_in": 0.65,
+            "cost_per_1m_out": 0.85,
+            "context_window": 32768,
+            "default_max_tokens": 4000,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama3.1-8b",
+            "name": "Llama 3.1 8B",
+            "parameters": "8B",
+            "speed_tokens_per_s": 2200,
+            "cost_per_1m_in": 0.10,
+            "cost_per_1m_out": 0.10,
+            "context_window": 32768,
+            "default_max_tokens": 4000,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama-3.3-70b",
+            "name": "Llama 3.3 70B",
+            "parameters": "70B",
+            "speed_tokens_per_s": 2100,
+            "cost_per_1m_in": 0.85,
+            "cost_per_1m_out": 1.20,
+            "context_window": 128000,
+            "default_max_tokens": 4000,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-32b",
+            "name": "Qwen 3 32B",
+            "parameters": "32B",
+            "speed_tokens_per_s": 2600,
+            "cost_per_1m_in": 0.40,
+            "cost_per_1m_out": 0.80,
+            "context_window": 128000,
+            "default_max_tokens": 32768,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama-4-maverick-17b-128e-instruct",
+            "name": "Llama 4 Maverick",
+            "parameters": "17B",
+            "speed_tokens_per_s": 1500,
+            "cost_per_1m_in": 0.20,
+            "cost_per_1m_out": 0.60,
+            "context_window": 32768,
+            "default_max_tokens": 4000,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-235b-a22b-instruct-2507",
+            "name": "Qwen 3 235B Instruct",
+            "parameters": "235B",
+            "speed_tokens_per_s": 1400,
+            "cost_per_1m_in": 0.60,
+            "cost_per_1m_out": 1.20,
+            "context_window": 131072,
+            "default_max_tokens": 16384,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-235b-a22b-thinking-2507",
+            "name": "Qwen 3 235B Thinking",
+            "parameters": "235B",
+            "speed_tokens_per_s": 1700,
+            "cost_per_1m_in": 0.60,
+            "cost_per_1m_out": 1.20,
+            "context_window": 128000,
+            "default_max_tokens": 32768,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-coder-480b",
+            "name": "Qwen 3 480B Coder",
+            "parameters": "480B",
+            "speed_tokens_per_s": 2000,
+            "cost_per_1m_in": 2.00,
+            "cost_per_1m_out": 2.00,
+            "context_window": 131072,
+            "default_max_tokens": 65536,
+            "can_reason": true,
+            "supports_attachments": false
+        }
+    ],
+    "default_headers": {
+        "User-Agent": "Crush-Client/1.0"
+    }
+}

internal/providers/providers.go 🔗

@@ -36,6 +36,9 @@ var bedrockConfig []byte
 //go:embed configs/groq.json
 var groqConfig []byte
 
+//go:embed configs/cerebras.json
+var cerebrasConfig []byte
+
 // ProviderFunc is a function that returns a Provider.
 type ProviderFunc func() catwalk.Provider
 
@@ -48,6 +51,7 @@ var providerRegistry = []ProviderFunc{
 	vertexAIProvider,
 	xAIProvider,
 	groqProvider,
+	cerebrasProvider,
 	openRouterProvider,
 }
 
@@ -104,3 +108,7 @@ func openRouterProvider() catwalk.Provider {
 func groqProvider() catwalk.Provider {
 	return loadProviderFromConfig(groqConfig)
 }
+
+func cerebrasProvider() catwalk.Provider {
+	return loadProviderFromConfig(cerebrasConfig)
+}