Доступ к Mistral API, OpenAI-совместимо — и его reasoning_effort

Модели Mistral обычно живут за api.mistral.ai со своим ключом. Через DaoXE они идут за тем же OpenAI-совместимым base URL, что GPT, Claude и DeepSeek — один ключ на сотни моделей примерно от 25 провайдеров.

Обновлено 2026-09-15

Семейства Mistral — генеральная линейка Mistral, кодовые Codestral и другие — обычно требуют отдельного ключа api.mistral.ai. Через DaoXE они стоят за тем же ключом, что GPT, Claude и DeepSeek: один ключ на сотни моделей примерно от 25 провайдеров. Вызывайте /v1/chat/completions с ID семейства Mistral из GET /v1/models — какие именно Mistral ID есть у вашего аккаунта, решает живой список, а не этот текст. Маршрутизация по цене: гайд по дешёвым API.

Как вызвать Mistral через DaoXE#

Путь chat: /v1/chat/completions с Authorization: Bearer. Reasoning — параметр запроса, а не отдельная модель: отправьте extra_body={"reasoning_effort": "high"}, и ответ придёт типизированными чанками вместо обычной строки. Нативно max_tokens делит контекстное окно с промптом — закладывайте объём и на мышление, и на ответ.

bash
curl --fail-with-body --show-error --silent \
  https://daoxe.com/v1/chat/completions \
  -H "Authorization: Bearer ${DAOXE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "YOUR_EXACT_MODEL_ID",
    "max_tokens": 64,
    "messages": [{"role": "user", "content": "Say hello in one sentence."}]
  }'
python
# Mistral reasoning is a REQUEST PARAM (reasoning_effort), not a model switch.
# With effort set, message.content becomes a LIST of typed chunks
# ({"type": "thinking"}... then {"type": "text"}) instead of a plain string -
# parse both shapes, and replay the thinking chunks in multi-turn history.
from openai import OpenAI

client = OpenAI(base_url="https://daoxe.com/v1", api_key="YOUR_DAOXE_KEY")
r = client.chat.completions.create(
    model="YOUR_EXACT_MODEL_ID",   # a mistral-family id from GET /v1/models
    messages=[{"role": "user", "content": "2+2? Think briefly, then answer."}],
    max_tokens=2048,               # prompt + max_tokens must fit the context window
    extra_body={"reasoning_effort": "high"},   # non-standard: send via extra_body
)
msg = r.choices[0].message
content = msg.content
if isinstance(content, list):      # thinking chunks + text chunks
    for part in content:
        if getattr(part, "type", None) == "text":
            print(part.text)       # final answer
else:
    print(content)                 # plain string when effort is "none"

Как Mistral отдаёт рассуждения#

Нынешний механизм Mistral — параметр reasoning_effort (none, minimal, low, medium, high, xhigh); старые нативные reasoning-ID Magistral устарели. При high message.content становится списком: сначала чанки {"type": "thinking"}, затем ответ {"type": "text"}; при none это обычная строка. Стриминг следует тому же сплиту — delta.content меняет форму посреди потока. Отсюда два правила: парсить content как обе формы и возвращать чанки мышления в истории многошагового диалога — Mistral предупреждает, что их вырезание ухудшает следующий ответ. Проходит ли параметр через конкретный путь релея и сохраняется ли форма списка — ровно то, что надо проверять: один тестовый вызов, прежде чем привязывать клиент.

Нюансы именно для Mistral#

  • message.content меняет форму. С высоким reasoning_effort content — список типизированных чанков (сначала мышление, затем текст); без него — обычная строка. Клиент, ждущий str, сломается, как только включено мышление, — разбирайте обе формы.
  • Токены мышления внутри max_tokens. Mistral документирует: промпт плюс max_tokens должны влезать в контекстное окно модели — под reasoning-запрос нужен запас на мышление, а не только на ответ, иначе ответ придётся обрезанным.
  • Нестандартные поля — через extra_body. reasoning_effort, safe_prompt (вставляет safety-промпт перед диалогом; по умолчанию false), random_seed (имя Mistral для того, что у OpenAI зовётся seed) и guardrails выходят за спецификацию OpenAI — отправляйте через extra-body вашего SDK и проверяйте, что релей передаёт их, а не молча выбрасывает неизвестные поля.
  • Алиасы двигаются; Magistral устарел. Нативные ID — это -latest-алиасы плюс датированные снапшоты, и Mistral публикует даты deprecation и retirement с указанием моделей-преемников — выделенные reasoning-модели Magistral уже устарели, reasoning переехал в основное семейство через reasoning_effort. Копируйте ID из GET /v1/models, а не из старых постов.

Сколько это стоит#

Один баланс, один курс пополнения

Пополнение идёт по фиксированному курсу 1 ¥ = $1 квоты любым способом оплаты, а каждая модель тарифицируется по своей цене в USD — актуальные цены по моделям смотрите на daoxe.com/pricing. Курс одинаковый для всех способов оплаты: Alipay, WeChat Pay, USDT, банковская карта (Visa · Mastercard), Apple Pay и Google Pay — один баланс на все модели каталога, без выбора тарифа и без месячного минимума. Цены зависят от аккаунта и меняются, поэтому проверьте небольшим пополнением, а не доверяйте цифре из гайда.

Убедитесь, что отдают настоящую модель#

Сначала проверьте эндпоинт, а не клиент — если это не работает, настройки не помогут:

bash
export DAOXE_API_KEY="your_api_key"

# List the exact model IDs your account can call
curl --fail-with-body --show-error --silent \
  https://daoxe.com/v1/models \
  -H "Authorization: Bearer ${DAOXE_API_KEY}"

Проверьте связность, затем сравните фиксированный промпт при temperature 0 с официальным API Mistral, чтобы убедиться в совпадении уровня:

Проверяйте нас, а не верьте на слово

Направьте открытый бенчмарк на DaoXE и на официальный API и сравните при temperature 0. Затем изучите, как поймать подмену модели, чтобы дешёвый эндпоинт не подменил вам модель на меньшую.

Частые вопросы#

Как включить или выключить reasoning у Mistral?

Отправьте reasoning_effort в теле запроса: none — ответ обычной строкой, high — чанк мышления, затем ответ. Поле нестандартное — при необходимости используйте extra-body вашего SDK.

Почему content то строка, то список?

Это reasoning-форма Mistral: типизированные чанки thinking/text при заданном effort, обычная строка без него. Парсите обе формы и возвращайте чанки мышления в истории.

Работает ли FIM-эндпоинт Codestral?

У нативного Mistral есть POST /v1/fim/completions с prompt/suffix для Codestral — специальная поверхность, а не стандартный OpenAI-путь. Проходит ли она через конкретный релей, проверяется одним тестовым вызовом — до того, как вписывать её в IDE-плагин.

Сколько стоит Mistral здесь?

По модели и аккаунту — см. актуальные цены. Пополнение — фиксированные 1 ¥ = $1 квоты любым способом оплаты.

Попробуйте DaoXE — и проверьте его сами

Один ключ для GPT, Claude, Gemini, DeepSeek и других. Направьте открытый бенчмарк на нас и сравните — не верьте на слово.