# Provider profiles — active: PRIMARY_PROVIDER env (default: hybrid) # Regenerate: bash scripts/gen-litellm-config.py profiles: hybrid: label: "Hybrid: Novita workers + Novita plan/verify (no Claude geo-billing)" welcome_credit: false requires: [NOVITA_API_KEY] smart_router: model: novita/meta-llama/llama-3.1-8b-instruct api_key: NOVITA_API_KEY fallbacks: # No groq/gemini here — VPN off on IFT; those hang until client timeout. a-simple: [b-simple, a-medium-ops] a-medium-code: [b-medium-code, a-complex] a-complex: [b-complex, a-reasoning] b-complex: [a-complex, c-complex] a-reasoning: [b-reasoning, a-complex] a-vision: [a-vision-ocr] smart-router-internal: [a-medium-ops, a-medium-code, a-complex] # Planner is Max — fallback to DeepSeek then coder (never Llama) novita-planner: [b-complex, a-medium-code] novita-verifier: [b-complex, a-medium-code] default_fallbacks: [a-medium-code, a-complex, a-medium-ops] lanes: # Prefer Llama for fast lanes — Qwen3 puts answers in reasoning_content a-simple: { model: novita/meta-llama/llama-3.1-8b-instruct, api_key: NOVITA_API_KEY } b-simple: { model: novita/meta-llama/llama-3.1-8b-instruct, api_key: NOVITA_API_KEY } c-simple: { model: novita/meta-llama/llama-3.1-8b-instruct, api_key: NOVITA_API_KEY } a-medium-ops: { model: novita/meta-llama/llama-3.1-8b-instruct, api_key: NOVITA_API_KEY } b-medium-ops: { model: novita/meta-llama/llama-3.1-8b-instruct, api_key: NOVITA_API_KEY } c-medium-ops: { model: novita/meta-llama/llama-3.1-8b-instruct, api_key: NOVITA_API_KEY } # medium_code → coder / Plus-class (disable thinking — else stream hangs) a-medium-code: { model: novita/qwen/qwen3-coder-30b-a3b-instruct, api_key: NOVITA_API_KEY, disable_thinking: true } b-medium-code: { model: novita/qwen/qwen3-coder-30b-a3b-instruct, api_key: NOVITA_API_KEY, disable_thinking: true } c-medium-code: { model: novita/qwen/qwen3-coder-30b-a3b-instruct, api_key: NOVITA_API_KEY, disable_thinking: true } # complex/reasoning A/B → coder/deepseek; C (hard) → Qwen3.8-Max only a-complex: { model: novita/qwen/qwen3-coder-30b-a3b-instruct, api_key: NOVITA_API_KEY, disable_thinking: true } b-complex: { model: novita/deepseek/deepseek-v3.2, api_key: NOVITA_API_KEY } c-complex: { model: novita/qwen/qwen3.8-max, api_key: NOVITA_API_KEY, disable_thinking: true } a-reasoning: { model: novita/qwen/qwen3-coder-30b-a3b-instruct, api_key: NOVITA_API_KEY, disable_thinking: true } b-reasoning: { model: novita/deepseek/deepseek-v3.2, api_key: NOVITA_API_KEY } c-reasoning: { model: novita/qwen/qwen3.8-max, api_key: NOVITA_API_KEY, disable_thinking: true } a-vision-ocr: { model: novita/paddlepaddle/paddleocr-vl, api_key: NOVITA_API_KEY } a-vision: { model: novita/qwen/qwen3-vl-30b-a3b-instruct, api_key: NOVITA_API_KEY } b-vision: { model: novita/qwen/qwen2.5-vl-72b-instruct, api_key: NOVITA_API_KEY } c-vision: { model: novita/qwen/qwen3-vl-235b-a22b-instruct, api_key: NOVITA_API_KEY } openrouter: label: OpenRouter reserve (VPN; free :free + pay-as-you-go) welcome_credit: true requires: [OPENROUTER_API_KEY] requires_vpn: true smart_router: model: openrouter/openrouter/free api_key: OPENROUTER_API_KEY fallbacks: a-simple: [b-simple, c-simple] a-medium-code: [b-medium-code, c-medium-code] a-complex: [b-complex, c-complex] smart-router-internal: [a-medium-ops, a-medium-code] default_fallbacks: [a-medium-code, a-medium-ops] lanes: a-simple: { model: openrouter/openai/gpt-oss-20b:free, api_key: OPENROUTER_API_KEY } b-simple: { model: openrouter/openai/gpt-oss-20b:free, api_key: OPENROUTER_API_KEY } c-simple: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } a-medium-ops: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } b-medium-ops: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } c-medium-ops: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } a-medium-code: { model: openrouter/cohere/north-mini-code:free, api_key: OPENROUTER_API_KEY } b-medium-code: { model: openrouter/cohere/north-mini-code:free, api_key: OPENROUTER_API_KEY } c-medium-code: { model: openrouter/cohere/north-mini-code:free, api_key: OPENROUTER_API_KEY } a-complex: { model: openrouter/google/gemma-4-26b-a4b-it:free, api_key: OPENROUTER_API_KEY } b-complex: { model: openrouter/nvidia/nemotron-3-nano-30b-a3b:free, api_key: OPENROUTER_API_KEY } c-complex: { model: openrouter/nvidia/nemotron-3-nano-30b-a3b:free, api_key: OPENROUTER_API_KEY } a-reasoning: { model: openrouter/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free, api_key: OPENROUTER_API_KEY } b-reasoning: { model: openrouter/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free, api_key: OPENROUTER_API_KEY } c-reasoning: { model: openrouter/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free, api_key: OPENROUTER_API_KEY } a-vision-ocr: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } a-vision: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } b-vision: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } c-vision: { model: openrouter/openrouter/free, api_key: OPENROUTER_API_KEY } # Always registered when keys present (all profiles) fixed_models: # Hierarchical: strong Max plan (rare); DeepSeek verify (conditional) novita-planner: model: novita/qwen/qwen3.8-max api_key: NOVITA_API_KEY max_tokens: 1024 temperature: 0 disable_thinking: true novita-verifier: model: novita/deepseek/deepseek-v3.2 api_key: NOVITA_API_KEY max_tokens: 1024 temperature: 0 # Optional Claude — only if ANTHROPIC_API_KEY works later (VPN + billing) claude-haiku-planner: model: anthropic/claude-haiku-4-5-20251001 api_key: ANTHROPIC_API_KEY requires_vpn: true max_tokens: 1024 temperature: 0 claude-sonnet-verifier: model: anthropic/claude-sonnet-5 api_key: ANTHROPIC_API_KEY requires_vpn: true max_tokens: 2048 temperature: 0 grok-3: model: xai/grok-3 api_key: XAI_API_KEY requires_vpn: true groq-llama-8b: model: groq/llama-3.1-8b-instant api_key: GROQ_API_KEY groq-qwen-coder: model: groq/qwen-qwen-2.5-coder-32b api_key: GROQ_API_KEY gemini-flash: model: gemini/gemini-2.0-flash api_key: GEMINI_API_KEY gigachat-classifier: model: gigachat/GigaChat-2-Lite api_key: GIGACHAT_CREDENTIALS ssl_verify: false max_tokens: 64 temperature: 0 gigachat-pro: model: gigachat/GigaChat-2-Pro api_key: GIGACHAT_CREDENTIALS ssl_verify: false