From 00f9a0b8f986b62b8e5258c59b941a259cbac11f Mon Sep 17 00:00:00 2001 From: EwenQuim Date: Thu, 11 Jun 2026 14:10:00 +0200 Subject: [PATCH] chore: add direct Mistral provider Adds mistral.json with 11 models covering Mistral Medium 3.5, Magistral (reasoning), Devstral 2, Codestral, Mistral Large/Small, and Ministral 3B/8B/14B hitting api.mistral.ai directly. --- internal/providers/configs/mistral.json | 144 ++++++++++++++++++++++++ internal/providers/providers.go | 8 ++ 2 files changed, 152 insertions(+) create mode 100644 internal/providers/configs/mistral.json diff --git a/internal/providers/configs/mistral.json b/internal/providers/configs/mistral.json new file mode 100644 index 00000000..e4fb9277 --- /dev/null +++ b/internal/providers/configs/mistral.json @@ -0,0 +1,144 @@ +{ + "name": "Mistral", + "id": "mistral", + "type": "openai-compat", + "api_key": "$MISTRAL_API_KEY", + "api_endpoint": "https://api.mistral.ai/v1", + "default_large_model_id": "mistral-medium-3.5", + "default_small_model_id": "mistral-small-2603", + "models": [ + { + "id": "magistral-medium-2509", + "name": "Magistral Medium 1.2", + "cost_per_1m_in": 2, + "cost_per_1m_out": 5, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium" + }, + { + "id": "mistral-medium-3.5", + "name": "Mistral Medium 3.5", + "cost_per_1m_in": 1.5, + "cost_per_1m_out": 7.5, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 256000, + "default_max_tokens": 25600, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true + }, + { + "id": "mistral-large-2512", + "name": "Mistral Large 3", + "cost_per_1m_in": 0.5, + "cost_per_1m_out": 1.5, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384 + }, + { + "id": "magistral-small-2509", + "name": "Magistral Small", + "cost_per_1m_in": 0.5, + "cost_per_1m_out": 1.5, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium" + }, + { + "id": "devstral-2512", + "name": "Devstral 2", + "cost_per_1m_in": 0.4, + "cost_per_1m_out": 2, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 256000, + "default_max_tokens": 25600 + }, + { + "id": "codestral-2508", + "name": "Codestral", + "cost_per_1m_in": 0.3, + "cost_per_1m_out": 0.9, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 32000, + "default_max_tokens": 16384 + }, + { + "id": "mistral-small-2603", + "name": "Mistral Small 4", + "cost_per_1m_in": 0.1, + "cost_per_1m_out": 0.3, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384, + "supports_attachments": true + }, + { + "id": "devstral-small-2505", + "name": "Devstral Small 2", + "cost_per_1m_in": 0.1, + "cost_per_1m_out": 0.3, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384 + }, + { + "id": "ministral-14b-2512", + "name": "Ministral 14B", + "cost_per_1m_in": 0.2, + "cost_per_1m_out": 0.2, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384 + }, + { + "id": "ministral-8b-2512", + "name": "Ministral 8B", + "cost_per_1m_in": 0.15, + "cost_per_1m_out": 0.15, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384 + }, + { + "id": "ministral-3b-2512", + "name": "Ministral 3B", + "cost_per_1m_in": 0.04, + "cost_per_1m_out": 0.04, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 128000, + "default_max_tokens": 16384 + } + ] +} diff --git a/internal/providers/providers.go b/internal/providers/providers.go index c2cd88df..cbb09fa5 100644 --- a/internal/providers/providers.go +++ b/internal/providers/providers.go @@ -66,6 +66,9 @@ var miniMaxConfig []byte //go:embed configs/minimax-china.json var miniMaxChinaConfig []byte +//go:embed configs/mistral.json +var mistralConfig []byte + //go:embed configs/nebius.json var nebiusConfig []byte @@ -127,6 +130,7 @@ var providerRegistry = []ProviderFunc{ kimiCodingProvider, miniMaxProvider, miniMaxChinaProvider, + mistralProvider, syntheticProvider, // The remaining will be in alphabetical order. @@ -252,6 +256,10 @@ func miniMaxChinaProvider() catwalk.Provider { return loadProviderFromConfig(miniMaxChinaConfig) } +func mistralProvider() catwalk.Provider { + return loadProviderFromConfig(mistralConfig) +} + func nebiusProvider() catwalk.Provider { return loadProviderFromConfig(nebiusConfig) }