{
  "_comment": "Конфиг провайдеров для refusal_bench.py. Ключи ТОЛЬКО из env (api_key_env). Все endpoints — OpenAI-совместимые chat/completions. Модели и параметры сверены вживую воркфлоу-аудитом 2026-07-04 (/models + пробный вызов). Грабли — docs/experiments/00-provider-quirks.md.",
  "providers": [
    {
      "name": "deepseek",
      "base_url": "https://api.deepseek.com/v1",
      "model": "deepseek-v4-flash",
      "api_key_env": "DEEPSEEK_API_KEY",
      "rps_delay": 0.5,
      "max_tokens": 8000,
      "_comment": "deepseek-chat СНЯТ с /models (депрекация). v4-flash — гибридная reasoning-модель: thinking ВКЛючён по умолчанию и ОБЯЗАТЕЛЕН для перевода. При отключении thinking модель ЭХАЕТ китайский исходник (это и был баг deepseek-chat) — поэтому extra_body с thinking НЕ ставим. reasoning уходит в reasoning_content, content чистый; max_tokens 8000 чтобы reasoning+перевод не обрезались. НЕ ставить reasoning_params (это для gpt-5)."
    },
    {
      "name": "qwen-intl",
      "base_url": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
      "model": "qwen-flash",
      "api_key_env": "DASHSCOPE_API_KEY",
      "rps_delay": 1.0,
      "_comment": "Ожидаем hard-фильтр data_inspection_failed (gap-2 §4) — это и проверяем. Ключа пока нет."
    },
    {
      "name": "grok",
      "base_url": "https://api.x.ai/v1",
      "model": "grok-4.20-0309-non-reasoning",
      "api_key_env": "XAI_API_KEY",
      "rps_delay": 0.5,
      "_comment": "grok-4-fast СНЯТ с /v1/models. Взят явно НЕ-reasoning слаг (reasoning/non-reasoning — разные модели, режим в имени): перевод сразу, ~0.7с, thinking отключать нечего. Флагман grok-4.3 доступен, но reasoning-by-default — для простого перевода избыточен. usage отдаёт нестандартные cost_in_usd_ticks/num_sources_used — игнорировать."
    },
    {
      "name": "glm",
      "base_url": "https://api.z.ai/api/paas/v4",
      "model": "glm-4.5-air",
      "api_key_env": "ZAI_API_KEY",
      "rps_delay": 1.0,
      "timeout": 120,
      "temperature": 0.3,
      "max_tokens": 4000,
      "extra_body": { "thinking": { "type": "disabled" } },
      "_comment": "glm-4.5-air — дешёвый/быстрый (~1.5с). thinking у всей GLM-линии ВКЛючён по умолчанию — ОБЯЗАТЕЛЬНО отключать, иначе долго и жжёт бюджет. Фолбэк на glm-4.6 для сложных фрагментов. В /models новее: glm-4.7, glm-5, glm-5.1, glm-5.2 (для перевода не обязательны)."
    },
    {
      "name": "kimi",
      "base_url": "https://api.moonshot.ai/v1",
      "model": "kimi-k2.6",
      "api_key_env": "KIMI_API_KEY",
      "rps_delay": 0.5,
      "temperature": 1,
      "max_tokens": 24000,
      "timeout": 300,
      "_comment": "Kimi K2.6: принимает ТОЛЬКО temperature=1 (иначе HTTP 400 — это была ложная 'отказ'). Многословная думалка (~11k reasoning-токенов/абзац) в reasoning_content → max_tokens ≥16000, иначе content пуст (finish=length). Дорогой; интернациональный endpoint api.moonshot.ai (не .cn)."
    },
    {
      "name": "gemini",
      "base_url": "https://generativelanguage.googleapis.com/v1beta/openai",
      "model": "gemini-3.1-flash-lite",
      "api_key_env": "GEMINI_API_KEY",
      "rps_delay": 1.0,
      "max_tokens": 8000,
      "_comment": "МИГРИРОВАН 2026-07-10 (D21.9): gemini-2.5-flash EOL 16.10.2026 + интермиттентный 404-флейк → gemini-3.1-flash-lite (вендор-замена 2.5-flash-lite; НЕ 3.5-flash — та даёт 503 high-demand, проба research/15 + live-смоук 07-10). Live-смоук 07-10: finish=stop, thinking не съедает бюджет на коротком выходе → thinking_config НЕ нужен (прежний extra_body был ДВОЙНО ВЛОЖЕН extra_body.extra_body.google — на провод не уходил, баг убран). safety_settings через OpenAI-слой НЕ передаются (400 Unknown name); дефолт фильтров 3.x зависит от класса: SAFETY конфигурируем, PROHIBITED_CONTENT — НЕТ (00-provider-quirks). Для явного контроля фильтров судьи 18+ → нативный Gemini API."
    },
    {
      "name": "openai",
      "base_url": "https://api.openai.com/v1",
      "model": "gpt-5-mini",
      "api_key_env": "OPENAI_API_KEY",
      "rps_delay": 0.5,
      "reasoning_params": true,
      "max_tokens": 8000,
      "extra_body": { "reasoning_effort": "minimal" },
      "_comment": "reasoning-модель: max_completion_tokens вместо max_tokens, БЕЗ temperature, reasoning_effort=minimal (иначе выжигает бюджет до пустого). Замер transformation exception (gap-2 §1)."
    },
    {
      "name": "mistral",
      "base_url": "https://api.mistral.ai/v1",
      "model": "mistral-large-2512",
      "api_key_env": "MISTRAL_API_KEY",
      "rps_delay": 0.5,
      "temperature": 0.3,
      "max_tokens": 8000,
      "extra_body": { "safe_prompt": false },
      "_comment": "Канал-B фолбэк-кандидат (D14.2): Mistral Usage Policy eff.2026-06-11 без бланкетного запрета adult-текста (только CSAM/NCII). Слаг сверен вживую /models 2026-07-09 — реальный дейтед-слаг mistral-large-2512 (large-latest→2512). OpenAI-совместимый /v1/chat/completions, Bearer MISTRAL_API_KEY. safe_prompt=false: дефолт уже false + депрекейтед, но ставим явно (пре-пендит safety-промпт при true — вреден каналу B). Large 3 НЕ reasoning-модель → reasoning_effort НЕ ставим (риск 400); reasoning-линия = magistral-medium/small-2509. Эхо-мины НЕТ (проба zh→ru чисто, cjk_share=0). Refusal-срез SFW/L1/L2-violence 11/11 ok (exp02). Цена mistral-large-2512 (Large 3, текущий фронтир) = $0.50/$1.50 за 1M — сверено 2026-07-10 (OpenRouter-зеркало провайдера openrouter.ai/mistralai/mistral-large-2512 + pricepertoken/cloudzero: 75% срез от Large 2). $2/$6 = LEGACY Large 2 (mistral-large-2411, ретайр 31.05.2026); офиц. mistral.ai/pricing FAQ показывает УСТАРЕВШИЙ generic-пример $2/$6 — остаточная нестыковка вендор-доки (D19.5б закрыт). temperature ≤0.7."
    },
    {
      "name": "openrouter-deepseek",
      "base_url": "https://openrouter.ai/api/v1",
      "model": "deepseek/deepseek-chat-v3-0324",
      "api_key_env": "OPENROUTER_API_KEY",
      "rps_delay": 1.0,
      "_comment": "Открытые веса у пермиссивных хостеров — канал B №2; модель уточнить на дату прогона. Ключа пока нет."
    },
    {
      "name": "local-ollama",
      "base_url": "http://localhost:11434/v1",
      "model": "huihui_ai/qwen3-abliterated:8b",
      "api_key_env": "OLLAMA_FAKE_KEY",
      "rps_delay": 0.0,
      "timeout": 600,
      "_comment": "Терминальный fallback. timeout 600 — книжные чанки на 8b идут 60-200с (иначе ложный infra_error); прогрев модели делается харнессом перед прогоном. Сэмплеры Qwen3 через /v1 не пробрасываются — для боевого прогона тег с запечённым Modelfile (qwen3-vojo)."
    }
  ]
}
