{ "_comment": "Конфиг провайдеров для refusal_bench.py. Ключи ТОЛЬКО из env (api_key_env). Все endpoints — OpenAI-совместимые chat/completions. Имена моделей проверить на дату прогона (депрекация deepseek-chat → 24.07.2026, см. research/09).", "providers": [ { "name": "deepseek", "base_url": "https://api.deepseek.com/v1", "model": "deepseek-chat", "api_key_env": "DEEPSEEK_API_KEY", "rps_delay": 0.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_refusal через data_inspection_failed (gap-2 §4) — это и проверяем" }, { "name": "grok", "base_url": "https://api.x.ai/v1", "model": "grok-4-fast", "api_key_env": "XAI_API_KEY", "rps_delay": 0.5 }, { "name": "glm", "base_url": "https://api.z.ai/api/paas/v4", "model": "glm-4.6", "api_key_env": "ZAI_API_KEY", "rps_delay": 1.0, "timeout": 300, "extra_body": { "thinking": { "type": "disabled" } }, "_comment": "thinking у GLM-4.6 включён по умолчанию и не влезал в 180с — для перевода отключаем" }, { "name": "gemini", "base_url": "https://generativelanguage.googleapis.com/v1beta/openai", "model": "gemini-2.5-flash", "api_key_env": "GEMINI_API_KEY", "rps_delay": 1.0, "max_tokens": 8000, "extra_body": { "extra_body": { "google": { "thinking_config": { "thinking_budget": 0 } } } }, "_comment_safety": "safety_settings через OpenAI-совместимый слой НЕ передаются (проверено 2026-07-04: Unknown name). Дефолт фильтров у 2.5/3 — OFF (gap-2 §6); явное управление фильтрами → только нативный Gemini API (для продакшн-судьи)", "_comment_thinking": "дефолтный thinking съедал max_tokens и обрезал перевод (ловился детектором вырезаний) — выключен через thinking_budget:0" }, { "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": "Только для замера transformation exception (gap-2 §1) — НЕ канал продукта; reasoning_params: max_completion_tokens вместо max_tokens, без temperature; reasoning=minimal, иначе выжигал бюджет до пустого ответа" }, { "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, "_comment": "Терминальный fallback (установлена на стенде 2026-07); env OLLAMA_FAKE_KEY=x; сэмплеры Qwen3 через /v1 не пробрасываются — для боевого прогона использовать тег с запечённым Modelfile (паттерн qwen3-vojo)" } ] }