{ "_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. `_exclude` is intentionally minimal: it only drops models that are technically incapable of generating a chat completion for a normal prompt (safety classifiers, agentic-only endpoints, meta-routers, wrong modalities). Everything else the verifier passes is surfaced — including language-specialised models (Arabic, Chinese, ...), reasoning models, legacy families and dated snapshots — so a user with a specific need can still pick the model that fits. Manually re-run from the Actions tab (any branch) when a new model needs to be picked up out of cycle.", "groq": { "models": [ "llama-3.3-70b-versatile", "llama-3.1-8b-instant", "meta-llama/llama-4-scout-17b-16e-instruct", "openai/gpt-oss-120b", "openai/gpt-oss-20b" ], "recommended": "llama-3.3-70b-versatile", "_exclude": [ "openai/gpt-oss-safeguard-*", "groq/compound", "groq/compound-*" ], "_note": "`_exclude` covers models the verifier may technically pass but that do not produce a usable chat completion: openai/gpt-oss-safeguard-* is a safety classifier (returns a category, not free text); groq/compound* is an agentic system that expects multi-step tool use, not a plain prompt." }, "gemini": { "models": [ "gemini-flash-lite-latest", "gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3.1-flash-lite", "gemini-3-flash-preview", "gemini-3.5-flash" ], "recommended": "gemini-2.5-flash-lite", "_exclude": [ "gemini-embedding-*", "gemini-*-pro*", "gemini-*-thinking*" ], "_deprecated": ["gemini-2.0-flash", "gemini-2.0-flash-lite", "gemini-1.5-flash", "gemini-1.0-pro", "gemini-pro"], "_note": "`_exclude` drops embeddings (wrong modality) and Pro / thinking variants that reject `thinkingConfig.thinkingBudget: 0` and therefore never return a visible completion within a reasonable token budget — technical failure with our current provider config." }, "openai": { "models": [ "gpt-4.1-nano", "gpt-4.1-mini", "gpt-4o-mini", "gpt-4.1", "gpt-4o", "gpt-5-chat-latest", "gpt-5-nano" ], "recommended": "gpt-4.1-nano", "_exclude": [ "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", "computer-use-*" ], "_note": "`_exclude` covers wrong-modality variants (audio, realtime, search, transcribe, tts) that cannot handle a plain notification-translation prompt, plus computer-use which requires an agent loop. All other OpenAI chat/completion models are surfaced — including legacy families (gpt-3.5, gpt-4), reasoning models (o-series, gpt-5.x non-chat) and dated snapshots — so users can pick by their own criteria (cost, quality, reproducibility). openai_provider.py already handles reasoning models via max_completion_tokens + reasoning_effort=minimal." }, "anthropic": { "models": [ "claude-haiku-4-5", "claude-sonnet-5", "claude-opus-4-8", "claude-sonnet-4-6", "claude-opus-4-6", "claude-fable-5" ], "recommended": "claude-haiku-4-5", "_exclude": [], "_note": "No technical exclusions — every Claude generation returns free-text completions for a plain prompt. The verifier tests each model listed under `models`; if a specific ID stops working upstream it simply drops out of the passing set. Anthropic does not expose a public models-list API, so new models must be added to `models` manually before the verifier can test them." }, "openrouter": { "models": [ "meta-llama/llama-3.3-70b-instruct", "meta-llama/llama-3.1-70b-instruct", "meta-llama/llama-3.1-8b-instruct", "meta-llama/llama-4-scout", "anthropic/claude-haiku-4.5", "anthropic/claude-sonnet-4.6", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "openai/gpt-4o-mini", "mistralai/mistral-small-3.2-24b-instruct", "nvidia/nemotron-3-super-120b-a12b:free", "google/gemma-4-26b-a4b-it:free", "nvidia/nemotron-nano-12b-v2-vl:free", "nvidia/nemotron-3-nano-30b-a3b:free", "poolside/laguna-s-2.1:free", "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free", "openai/gpt-oss-20b:free" ], "recommended": "meta-llama/llama-3.3-70b-instruct", "_exclude": [ "openrouter/*", "*/*-audio*", "*/*-audio-*", "*/*-tts*", "*/*-whisper*", "*/*-embed*", "*/*-embedding*", "*/*-image*", "*/*-vision-only*" ], "_note": "OpenRouter aggregates hundreds of models; the free-tier variants (:free suffix) are intentionally supported per user request and never blocked. `_exclude` covers only meta-routers (`openrouter/free`, `openrouter/auto` — they route dynamically to something else, so their behaviour is not the model the user picked) and wrong-modality models (audio, tts, whisper, embeddings, image, vision-only). Everything else — chat models across every family, language and price tier — is surfaced so the user can pick the fit." }, "ollama": { "_note": "Ollama models are local, we don't filter them. User manages their own models.", "models": [], "recommended": "" } }