diff --git a/internal/providers/configs/qiniucloud.json b/internal/providers/configs/qiniucloud.json new file mode 100644 index 0000000000000000000000000000000000000000..d89269c20afc36882c2509ae236896e916fe3d1d --- /dev/null +++ b/internal/providers/configs/qiniucloud.json @@ -0,0 +1,179 @@ +{ + "name": "QiniuCloud", + "id": "qiniucloud", + "type": "openai-compat", + "api_key": "$QINIUCLOUD_API_KEY", + "api_endpoint": "https://api.qnaigc.com/v1", + "default_large_model_id": "minimax/minimax-m2.5", + "default_small_model_id": "glm-4.5", + "models": [ + { + "id": "minimax/minimax-m2.5", + "name": "Minimax/Minimax-M2.5", + "cost_per_1m_in": 0.29, + "cost_per_1m_out": 1.17, + "cost_per_1m_in_cached": 0.29, + "cost_per_1m_out_cached": 1.17, + "context_window": 204800, + "default_max_tokens": 128000, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "z-ai/glm-5", + "name": "Z-Ai/GLM 5", + "cost_per_1m_in": 0.56, + "cost_per_1m_out": 2.5, + "cost_per_1m_in_cached": 0.56, + "cost_per_1m_out_cached": 2.5, + "context_window": 200000, + "default_max_tokens": 128000, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "minimax/minimax-m2.1", + "name": "Minimax/Minimax-M2.1", + "cost_per_1m_in": 0.29, + "cost_per_1m_out": 1.17, + "cost_per_1m_in_cached": 0.29, + "cost_per_1m_out_cached": 1.17, + "context_window": 204800, + "default_max_tokens": 4096, + "can_reason": true, + "supports_attachments": false + }, + { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "cost_per_1m_in": 0.56, + "cost_per_1m_out": 2.22, + "cost_per_1m_in_cached": 0.56, + "cost_per_1m_out_cached": 2.22, + "context_window": 256000, + "default_max_tokens": 100000, + "can_reason": true, + "supports_attachments": false + }, + { + "id": "z-ai/glm-4.7", + "name": "Z-Ai/GLM 4.7", + "cost_per_1m_in": 0.44, + "cost_per_1m_out": 1.74, + "cost_per_1m_in_cached": 0.44, + "cost_per_1m_out_cached": 1.74, + "context_window": 200000, + "default_max_tokens": 4096, + "can_reason": true, + "supports_attachments": false + }, + { + "id": "minimax/minimax-m2", + "name": "Minimax/Minimax-M2", + "cost_per_1m_in": 0.29, + "cost_per_1m_out": 1.17, + "cost_per_1m_in_cached": 0.29, + "cost_per_1m_out_cached": 1.17, + "context_window": 200000, + "default_max_tokens": 4096, + "can_reason": true, + "supports_attachments": false + }, + { + "id": "z-ai/glm-4.6", + "name": "Z-AI/GLM 4.6", + "cost_per_1m_in": 1, + "cost_per_1m_out": 1.75, + "cost_per_1m_in_cached": 1, + "cost_per_1m_out_cached": 1.75, + "context_window": 200000, + "default_max_tokens": 4096, + "can_reason": true, + "supports_attachments": false + }, + { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek/DeepSeek-V3.1-Terminus", + "cost_per_1m_in": 0.56, + "cost_per_1m_out": 1.67, + "cost_per_1m_in_cached": 0.56, + "cost_per_1m_out_cached": 1.67, + "context_window": 128000, + "default_max_tokens": 32000, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "deepseek-v3.1", + "name": "DeepSeek-V3.1", + "cost_per_1m_in": 0.56, + "cost_per_1m_out": 1.67, + "cost_per_1m_in_cached": 0.56, + "cost_per_1m_out_cached": 1.67, + "context_window": 128000, + "default_max_tokens": 32000, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "doubao-seed-2.0-pro", + "name": "Doubao Seed 2.0 Pro", + "cost_per_1m_in": 0.44, + "cost_per_1m_out": 2.22, + "cost_per_1m_in_cached": 0.44, + "cost_per_1m_out_cached": 2.22, + "context_window": 256000, + "default_max_tokens": 128000, + "can_reason": false, + "supports_attachments": true + }, + { + "id": "doubao-seed-2.0-code", + "name": "Doubao Seed 2.0 Code", + "cost_per_1m_in": 0.44, + "cost_per_1m_out": 2.22, + "cost_per_1m_in_cached": 0.44, + "cost_per_1m_out_cached": 2.22, + "context_window": 256000, + "default_max_tokens": 128000, + "can_reason": false, + "supports_attachments": true + }, + { + "id": "qwen3-coder-480b-a35b-instruct", + "name": "Qwen3 Coder 480B A35B Instruct", + "cost_per_1m_in": 0.83, + "cost_per_1m_out": 3.33, + "cost_per_1m_in_cached": 0.83, + "cost_per_1m_out_cached": 3.33, + "context_window": 262000, + "default_max_tokens": 4096, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "glm-4.5", + "name": "GLM 4.5", + "cost_per_1m_in": 0.56, + "cost_per_1m_out": 2.22, + "cost_per_1m_in_cached": 0.56, + "cost_per_1m_out_cached": 2.22, + "context_window": 131072, + "default_max_tokens": 98304, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 0905", + "cost_per_1m_in": 0.56, + "cost_per_1m_out": 2.22, + "cost_per_1m_in_cached": 0.56, + "cost_per_1m_out_cached": 2.22, + "context_window": 256000, + "default_max_tokens": 100000, + "can_reason": true, + "supports_attachments": false + } + ] +} diff --git a/internal/providers/providers.go b/internal/providers/providers.go index 438a3bb4ddee6170318bfb986cc59d963269e5bc..df4b75cc49a42eda78a9d3b4e5cd0d8036aad416 100644 --- a/internal/providers/providers.go +++ b/internal/providers/providers.go @@ -84,6 +84,9 @@ var miniMaxChinaConfig []byte //go:embed configs/ionet.json var ioNetConfig []byte +//go:embed configs/qiniucloud.json +var qiniuCloudConfig []byte + // ProviderFunc is a function that returns a Provider. type ProviderFunc func() catwalk.Provider @@ -113,6 +116,7 @@ var providerRegistry = []ProviderFunc{ miniMaxProvider, miniMaxChinaProvider, ioNetProvider, + qiniuCloudProvider, } // GetAll returns all registered providers. @@ -232,3 +236,7 @@ func miniMaxChinaProvider() catwalk.Provider { func ioNetProvider() catwalk.Provider { return loadProviderFromConfig(ioNetConfig) } + +func qiniuCloudProvider() catwalk.Provider { + return loadProviderFromConfig(qiniuCloudConfig) +} diff --git a/pkg/catwalk/provider.go b/pkg/catwalk/provider.go index ba0b1b4b25c89da698d3f6f374cb360155c5c330..03ce89fca47528ddcebb4680a22d5aa3afdc64bf 100644 --- a/pkg/catwalk/provider.go +++ b/pkg/catwalk/provider.go @@ -45,6 +45,7 @@ const ( InferenceProviderMiniMax InferenceProvider = "minimax" InferenceProviderMiniMaxChina InferenceProvider = "minimax-china" InferenceProviderIoNet InferenceProvider = "ionet" + InferenceProviderQiniuCloud InferenceProvider = "qiniucloud" ) // Provider represents an AI provider configuration. @@ -113,6 +114,7 @@ func KnownProviders() []InferenceProvider { InferenceProviderVercel, InferenceProviderMiniMax, InferenceProviderMiniMaxChina, + InferenceProviderQiniuCloud, } }