Merge pull request #27 from Ed4ward/z-ai-provider

Kujtim Hoxha created

Add Z.AI as a provider for GLM-4.5 Serials. Tested with crush.

Change summary

internal/providers/configs/zai.json | 36 ++++++++++++++++++++++++++++++
internal/providers/providers.go     |  8 ++++++
pkg/catwalk/provider.go             |  2 +
3 files changed, 46 insertions(+)

Detailed changes

internal/providers/configs/zai.json 🔗

@@ -0,0 +1,36 @@
+{
+  "name": "Z.AI",
+  "id": "zai",
+  "api_key": "$ZAI_API_KEY",
+  "api_endpoint": "https://api.z.ai/api/paas/v4",
+  "type": "openai",
+  "default_large_model_id": "glm-4.5",
+  "default_small_model_id": "glm-4.5-air",
+  "models": [
+    {
+      "id": "glm-4.5",
+      "name": "GLM-4.5",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.2,
+      "cost_per_1m_in_cached": 0.11,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 98304,
+      "can_reason": true,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "glm-4.5-air",
+      "name": "GLM-4.5-Air",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 1.1,
+      "cost_per_1m_in_cached": 0.03,
+      "context_window": 131072,
+      "default_max_tokens": 98304,
+      "can_reason": true,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    }
+  ]
+}

internal/providers/providers.go 🔗

@@ -30,6 +30,9 @@ var vertexAIConfig []byte
 //go:embed configs/xai.json
 var xAIConfig []byte
 
+//go:embed configs/zai.json
+var zAIConfig []byte
+
 //go:embed configs/bedrock.json
 var bedrockConfig []byte
 
@@ -53,6 +56,7 @@ var providerRegistry = []ProviderFunc{
 	bedrockProvider,
 	vertexAIProvider,
 	xAIProvider,
+	zAIProvider,
 	groqProvider,
 	openRouterProvider,
 	lambdaProvider,
@@ -105,6 +109,10 @@ func xAIProvider() catwalk.Provider {
 	return loadProviderFromConfig(xAIConfig)
 }
 
+func zAIProvider() catwalk.Provider {
+	return loadProviderFromConfig(zAIConfig)
+}
+
 func openRouterProvider() catwalk.Provider {
 	return loadProviderFromConfig(openRouterConfig)
 }

pkg/catwalk/provider.go 🔗

@@ -25,6 +25,7 @@ const (
 	InferenceProviderBedrock    InferenceProvider = "bedrock"
 	InferenceProviderVertexAI   InferenceProvider = "vertexai"
 	InferenceProviderXAI        InferenceProvider = "xai"
+	InferenceProviderZAI        InferenceProvider = "zai"
 	InferenceProviderGROQ       InferenceProvider = "groq"
 	InferenceProviderOpenRouter InferenceProvider = "openrouter"
 	InferenceProviderLambda     InferenceProvider = "lambda"
@@ -70,6 +71,7 @@ func KnownProviders() []InferenceProvider {
 		InferenceProviderBedrock,
 		InferenceProviderVertexAI,
 		InferenceProviderXAI,
+		InferenceProviderZAI,
 		InferenceProviderGROQ,
 		InferenceProviderOpenRouter,
 		InferenceProviderLambda,