{ "_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)." } ] }