{ "_description": "Verified AI models for ProxMenux notifications. Only models listed here will be shown to users. Models are tested to work with the chat/completions API format.", "_updated": "2026-09-02", "_verifier": "Refreshed by .github/workflows/verify-ai-models.yml (daily). The workflow runs .github/scripts/ai-models-verifier/verify.py against every provider whose API key is configured in repository Secrets, then applies the report via apply.py — which honours per-provider `_exclude` lists so editorial curation survives automated refreshes. Manually re-run from the Actions tab (any branch) when a new model needs to be picked up out of cycle.", "groq": { "models": [ "openai/gpt-oss-20b", "openai/gpt-oss-120b" ], "recommended": "openai/gpt-oss-20b", "_exclude": [ "allam-2-7b", "qwen/qwen3-32b", "qwen/qwen3*", "openai/gpt-oss-safeguard-*", "groq/compound", "groq/compound-*" ], "_note": "Verified functionally 2026-07-14 with the Groq API. `_exclude` covers models that pass the technical test but are the wrong fit for notification translation: allam-2-7b (Arabic-focused), qwen/* (Chinese-first, unreliable Spanish), openai/gpt-oss-safeguard-* (safety-classifier variant), groq/compound* (agentic system, not a chat model)." }, "gemini": { "models": [ "gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3.1-flash-lite", "gemini-3.1-flash-lite-preview", "gemini-flash-lite-latest", "gemini-3.5-flash-lite", "gemini-3-flash-preview", "gemini-3.5-flash" ], "recommended": "gemini-2.5-flash-lite", "_exclude": [ "gemini-*-pro*", "gemini-*-thinking*", "gemini-embedding-*", "gemini-2.0-*", "gemini-1.5-*", "gemini-1.0-*", "gemini-pro" ], "_deprecated": [ "gemini-2.0-flash", "gemini-2.0-flash-lite", "gemini-1.5-flash", "gemini-1.0-pro", "gemini-pro" ], "_note": "Verified 2026-07-13. gemini-flash-lite-latest now passes consistently (1.6s) and is fastest, but gemini-2.5-flash-lite remains recommended because 'latest' aliases can drift over time. gemini-3.1-flash-lite is the stable successor to 3-flash-preview. Pro variants continue to reject thinkingBudget=0 and are overkill for notification translation." }, "openai": { "models": [ "gpt-4.1-nano", "gpt-4.1", "gpt-5-nano", "gpt-4.1-mini", "gpt-4o-mini", "gpt-4o" ], "recommended": "gpt-4.1-nano", "_exclude": [ "gpt-3.5-*", "gpt-3-*", "gpt-4", "gpt-4-0613", "gpt-4-turbo*", "gpt-4o-audio*", "gpt-4o-realtime*", "gpt-4o-search*", "gpt-4o-transcribe*", "gpt-4o-mini-audio*", "gpt-4o-mini-realtime*", "gpt-4o-mini-search*", "gpt-4o-mini-transcribe*", "gpt-4o-mini-tts", "gpt-4.1-nano-2*", "gpt-4.1-mini-2*", "gpt-4.1-2*", "gpt-4o-2*", "gpt-4o-mini-2*", "gpt-5-nano-2*", "gpt-5-mini-2*", "gpt-5-chat-2*", "gpt-5-2*", "o1-*-2*", "o3-*-2*", "o4-*-2*", "codex-*", "computer-use-*" ], "_note": "Verified 2026-07-13. `_exclude` drops (a) dated snapshots (`gpt-4o-2024-11-20`, `gpt-4.1-nano-2025-04-14`, ...) — the stable aliases are preferred so the recommended model doesn't silently pin to a specific point-in-time build; (b) legacy families (gpt-3.5, gpt-4, gpt-4-turbo) that gpt-4.1 supersedes; (c) audio/realtime/search/transcribe/tts variants (wrong modality for notifications); (d) reasoning models (o-series, gpt-5.1/5.2 non-chat), which openai_provider.py supports via max_completion_tokens + reasoning_effort=minimal but do not improve translation quality and are slower. Add specific reasoning IDs to `models` manually if a user explicitly wants them." }, "anthropic": { "models": [ "claude-opus-4-7", "claude-opus-4-8", "claude-sonnet-5", "claude-sonnet-4-6", "claude-fable-5", "claude-opus-4-6" ], "recommended": "claude-opus-4-7", "_exclude": [ "claude-*-2*", "claude-3-*", "claude-3-5-*", "claude-3-opus-*" ], "_note": "Verified 2026-07-13 with all 10 discovered models passing after aligning the verifier with anthropic_provider.py (temperature omitted — newest generations reject it with 'temperature is deprecated for this model'). `_exclude` drops dated snapshots (`claude-haiku-4-5-20251001`) and legacy generations (claude-3-*) that are deprecated upstream. haiku-4-5 is the sweet spot for notification translation (3.6s, $1/$5 per MTok); sonnet-5 for slightly richer output (3.1s, $3/$15); opus-4-8 / fable-5 for demanding cases." }, "openrouter": { "models": [ "openrouter/free", "nvidia/nemotron-3-super-120b-a12b:free", "minimax/minimax-m3:free", "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free" ], "recommended": "openrouter/free", "_exclude": [ "*/wizardlm-*", "*/qwen*", "*/yi-*", "*/ernie-*", "*/glm-*", "*/deepseek*", "*/hermes-*-405b*", "*/dolphin*", "*/euryale*", "*/mythomax*", "*/toppy*", "*/rocinante*", "*/nsfw*", "*/*-uncensored*", "*/*-vision*", "*/*-image*", "*/*-audio*", "*/*-tts*", "*/*-whisper*", "*/*-embed*", "openai/o1-*", "openai/o3-*", "openai/o4-*", "anthropic/claude-3-*" ], "_note": "OpenRouter aggregates hundreds of models — `_exclude` is aggressive by design so the surfaced list stays curated. Blocked families: Chinese-first (Qwen, Yi, ERNIE, GLM, DeepSeek), role-play / uncensored, wrong-modality (vision/image/audio/tts/whisper/embed), reasoning models (o-series) and legacy Claude 3. Kept: the mainline chat/instruct models that were manually validated. Paid tier verified functionally 2026-07-14; free tier verified 2026-08-17. Free-tier rate limits (~20 req/min shared across all OpenRouter free users on that model) may cause 429 in high-traffic windows — usable for occasional notification translation, not for high-volume automation." }, "ollama": { "_note": "Ollama models are local, we don't filter them. User manages their own models.", "models": [], "recommended": "" } }