Merge pull request #21 from charmbracelet/cerebras

Kujtim Hoxha created

Cerebras

Change summary

internal/providers/configs/cerebras.json | 91 ++++++++++++++++++++++++++
internal/providers/providers.go          |  8 ++
pkg/catwalk/provider.go                  |  2 
3 files changed, 101 insertions(+)

Detailed changes

internal/providers/configs/cerebras.json 🔗

@@ -0,0 +1,91 @@
+{
+    "name": "Cerebras",
+    "id": "cerebras",
+    "type": "openai",
+    "api_key": "$CEREBRAS_API_KEY",
+    "api_endpoint": "https://api.cerebras.ai/v1",
+    "default_large_model_id": "qwen-3-coder-480b",
+    "default_small_model_id": "qwen-3-32b",
+    "models": [
+        {
+            "id": "llama-4-scout-17b-16e-instruct",
+            "name": "Llama 4 Scout",
+            "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",
+            "cost_per_1m_in": 0.1,
+            "cost_per_1m_out": 0.1,
+            "context_window": 32768,
+            "default_max_tokens": 4000,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama-3.3-70b",
+            "name": "Llama 3.3 70B",
+            "cost_per_1m_in": 0.85,
+            "cost_per_1m_out": 1.2,
+            "context_window": 128000,
+            "default_max_tokens": 4000,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-32b",
+            "name": "Qwen 3 32B",
+            "cost_per_1m_in": 0.4,
+            "cost_per_1m_out": 0.8,
+            "context_window": 128000,
+            "default_max_tokens": 32768,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama-4-maverick-17b-128e-instruct",
+            "name": "Llama 4 Maverick",
+            "cost_per_1m_in": 0.2,
+            "cost_per_1m_out": 0.6,
+            "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",
+            "cost_per_1m_in": 0.6,
+            "cost_per_1m_out": 1.2,
+            "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",
+            "cost_per_1m_in": 0.6,
+            "cost_per_1m_out": 1.2,
+            "context_window": 128000,
+            "default_max_tokens": 32768,
+            "can_reason": true,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-coder-480b",
+            "name": "Qwen 3 480B Coder",
+            "cost_per_1m_in": 2.0,
+            "cost_per_1m_out": 2.0,
+            "context_window": 131072,
+            "default_max_tokens": 65536,
+            "can_reason": true,
+            "supports_attachments": false
+        }
+    ]
+}

internal/providers/providers.go 🔗

@@ -39,6 +39,9 @@ var groqConfig []byte
 //go:embed configs/lambda.json
 var lambdaConfig []byte
 
+//go:embed configs/cerebras.json
+var cerebrasConfig []byte
+
 // ProviderFunc is a function that returns a Provider.
 type ProviderFunc func() catwalk.Provider
 
@@ -53,6 +56,7 @@ var providerRegistry = []ProviderFunc{
 	groqProvider,
 	openRouterProvider,
 	lambdaProvider,
+	cerebrasProvider,
 }
 
 // GetAll returns all registered providers.
@@ -112,3 +116,7 @@ func groqProvider() catwalk.Provider {
 func lambdaProvider() catwalk.Provider {
 	return loadProviderFromConfig(lambdaConfig)
 }
+
+func cerebrasProvider() catwalk.Provider {
+	return loadProviderFromConfig(cerebrasConfig)
+}

pkg/catwalk/provider.go 🔗

@@ -28,6 +28,7 @@ const (
 	InferenceProviderGROQ       InferenceProvider = "groq"
 	InferenceProviderOpenRouter InferenceProvider = "openrouter"
 	InferenceProviderLambda     InferenceProvider = "lambda"
+	InferenceProviderCerebras   InferenceProvider = "cerebras"
 )
 
 // Provider represents an AI provider configuration.
@@ -72,5 +73,6 @@ func KnownProviders() []InferenceProvider {
 		InferenceProviderGROQ,
 		InferenceProviderOpenRouter,
 		InferenceProviderLambda,
+		InferenceProviderCerebras,
 	}
 }