--- title: "Mistral" description: "Mistral API conversion guide - parameter mapping, message handling, tool support, transcription, and streaming behavior" icon: "m" --- ## Overview Mistral is an **OpenAI-compatible provider** with custom compatibility handling for specific features. Bifrost converts requests to Mistral's expected format while supporting their unique API endpoints. Key characteristics: - **OpenAI-compatible format** - Chat and streaming endpoints - **Transcription API** - Native audio transcription support - **Tool calling support** - Function definitions with string-based tool choice - **Streaming support** - Server-Sent Events for chat and transcription - **Parameter compatibility** - max_completion_tokens → max_tokens conversion ### Supported Operations | Operation | Non-Streaming | Streaming | Endpoint | |-----------|---------------|-----------|----------| | Chat Completions | ✅ | ✅ | `/v1/chat/completions` | | Responses API | ✅ | ✅ | `/v1/chat/completions` | | Transcriptions (STT) | ✅ | ✅ | `/v1/audio/transcriptions` | | Embeddings | ✅ | - | `/v1/embeddings` | | List Models | ✅ | - | `/v1/models` | | Image Generation | ❌ | ❌ | - | | Text Completions | ❌ | ❌ | - | | Speech (TTS) | ❌ | ❌ | - | | Files | ❌ | ❌ | - | | Batch | ❌ | ❌ | - | **Unsupported Operations** (❌): Text Completions, Speech (TTS), Files, and Batch are not supported by the upstream Mistral API. Image Generation is not currently supported by Bifrost's Mistral integration (Mistral API supports image generation, but Bifrost has not yet implemented this feature). These return `UnsupportedOperationError`. --- # 1. Chat Completions ## Request Parameters Mistral supports most OpenAI chat completion parameters with some conversions. For standard OpenAI parameter reference, see [OpenAI Chat Completions](/providers/supported-providers/openai#1-chat-completions). ### Parameter Mapping & Conversions | Parameter | OpenAI | Mistral | Notes | |-----------|--------|---------|-------| | `max_completion_tokens` | ✅ | `max_tokens` | **Conversion required** | | `temperature` | ✅ | ✅ | Direct pass-through | | `top_p` | ✅ | ✅ | Direct pass-through | | `stop` | ✅ | ✅ | Stop sequences | | `tools` | ✅ | ✅ | Function definitions | | `tool_choice` | String only | String only | **Limitations apply** | | `user` | ✅ | ✅ | Max 64 characters | | `frequency_penalty`, `presence_penalty` | ✅ | ✅ | Direct pass-through | ### Critical Conversions **max_completion_tokens → max_tokens:** ```json // Bifrost request {"max_completion_tokens": 4096} // Mistral API {"max_tokens": 4096} ``` **Tool Choice Simplification:** Mistral only supports simple string tool choice, not structured constraints: ```json // OpenAI supports specific tool forcing {"tool_choice": {"type": "function", "function": {"name": "specific_tool"}}} // Mistral only supports {"tool_choice": "any"} // or "none", "auto" ``` ### Filtered Parameters Removed for Mistral compatibility: - `prompt_cache_key` - Not supported - `cache_control` - Stripped from content blocks - `verbosity` - Anthropic-specific - `store` - Not supported - `service_tier` - Not supported ## Message Conversion Full OpenAI message support: - All roles: user, assistant, system, tool, developer - Content types: text, images, audio, files ## Tool Conversion Tool definitions supported with constraints: | Aspect | Support | Notes | |--------|---------|-------| | Function definitions | ✅ | Full parameter schema support | | Tool choice "auto" | ✅ | Default mode | | Tool choice "any" | ✅ | Requires any tool | | Tool choice "none" | ✅ | No tools | | Specific tool forcing | ❌ | Not supported - simplified to "any" | | Parallel tools | ✅ | Multiple tools in one turn | **Limitation Caveat:** ```go // Bifrost allows specifying a specific tool { "tool_choice": { "type": "function", "function": {"name": "get_weather"} // ❌ Not supported } } // Mistral compatibility - converted to generic "any" { "tool_choice": "any" } ``` ## Response Conversion Standard OpenAI-compatible response: - `choices[].message.content` - Response text - `choices[].message.tool_calls` - Function calls - `usage` - Token counts (prompt_tokens, completion_tokens) - `finish_reason` - stop, tool_calls, length --- # 2. Responses API Converted internally to Chat Completions with format transformation: ``` ResponsesRequest → ChatRequest → ChatCompletion → ResponsesResponse ``` Same parameter support and tool handling as Chat Completions. --- # 3. Transcription Mistral provides native audio transcription with streaming support. ## Request Parameters ### Parameter Mapping | Parameter | Bifrost | Mistral | Notes | |-----------|---------|---------|-------| | `file` | Binary audio | Multipart form | Converted to multipart | | `model` | Model name | model | | | `language` | ISO-639-1 | language | Optional language hint | | `prompt` | Optional | prompt | Context for recognition | | `response_format` | Format type | response_format | json, text, etc. | | `temperature` | float | temperature | Sampling temperature | | `timestamp_granularities` | Array | Array field | Segment/word timestamps | ### Multipart Form Structure Transcription requests are sent as multipart/form-data: ``` --boundary Content-Disposition: form-data; name="file"; filename="audio.mp3" [binary audio data] --boundary Content-Disposition: form-data; name="model" voxtral-mini-latest --boundary Content-Disposition: form-data; name="language" en --boundary-- ``` ## Transcription Response ```json { "text": "transcribed text", "language": "en", "duration": 3.5, "segments": [{ "id": 0, "start": 0.0, "end": 1.5, "text": "transcribed segment", "temperature": 0.0, "avg_logprob": -0.45, "compression_ratio": 1.2, "no_speech_prob": 0.001 }], "words": [{ "word": "transcribed", "start": 0.0, "end": 0.8 }] } ``` ## Transcription Streaming Mistral supports SSE streaming for transcription with custom event types: | Event Type | Content | Notes | |-----------|---------|-------| | `transcription.language` | Language code | Language detected | | `transcription.text.delta` | Text delta | Incremental text | | `transcription.segment` | Full segment | Complete segment data | | `transcription.done` | Final usage | Completion with tokens | --- # 4. Embeddings Mistral supports text embeddings: | Parameter | Notes | |-----------|-------| | `input` | Text or array of texts | | `model` | Embedding model name | | `dimensions` | Custom output dimensions (optional) | | `encoding_format` | "float" or "base64" | Response returns embedding vectors with token usage. --- # 5. List Models Lists available Mistral models with context length and capabilities. --- ## Unsupported Features | Feature | Reason | |---------|--------| | Text Completions | Not offered by Mistral API | | Image Generation | Not yet implemented in Bifrost integration (Mistral API supports this) | | Speech/TTS | Not offered by Mistral API | | File Management | Not offered by Mistral API | | Batch Operations | Not offered by Mistral API | --- ## Caveats **Severity**: Medium **Behavior**: Cache control directives removed from messages **Impact**: Prompt caching features unavailable **Code**: Stripped during JSON marshaling **Severity**: Low **Behavior**: OpenAI-specific parameters filtered **Impact**: prompt_cache_key, verbosity, store removed **Code**: filterOpenAISpecificParameters **Severity**: Low **Behavior**: User field > 64 characters silently dropped **Impact**: Longer user identifiers are lost **Code**: SanitizeUserField enforces 64-char max