Files
eepp/bin/assets/plugins/aiassistant.json
Martín Lucas Golini b02fc1f3a6 Add dynamic AI model catalog and reasoning controls
Fetch and cache the models.dev catalog asynchronously, replacing bundled model lists when catalog data is available while preserving local and user-configured providers.

Update live AI Assistant instances after refresh, defer startup requests until the UI is ready, and cancel in-flight catalog requests during shutdown. Prioritize providers with configured credentials and infer each provider's cheapest title-generation model from catalog pricing.

Add model reasoning metadata, effort controls, request serialization, chat persistence, and localized UI labels. Refresh the bundled fallback models and support API keys for arbitrary catalog providers.

Fix ACP Agent mode message chunks enqueue ordering issue (ACP thought chunks were enqueued twice while answer chunks were enqueued once).

Fix UIDropDownList WrapContent sizing so dropdown width follows its text, skin, and padding, and tighten UIDropDown automatic height sizing.
2026-08-19 01:30:56 -03:00

666 lines
17 KiB
JSON

{
"config": {},
"providers": {
"anthropic": {
"api_url": "https://api.anthropic.com/v1/messages",
"models": [
{
"display_name": "Claude Opus 5",
"name": "claude-opus-5",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["low", "medium", "high", "xhigh", "max"] }]
},
{
"display_name": "Claude Sonnet 5",
"name": "claude-sonnet-5",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["low", "medium", "high", "xhigh", "max"] }]
},
{
"display_name": "Claude Opus 4.8",
"name": "claude-opus-4-8",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["low", "medium", "high", "xhigh", "max"] }]
},
{
"display_name": "Claude Opus 4.6",
"name": "claude-opus-4-6"
},
{
"display_name": "Claude Opus 4.7",
"name": "claude-opus-4-7"
},
{
"display_name": "Claude Opus 4.5",
"max_tokens": 200000,
"name": "claude-opus-4-5-20251101"
},
{
"display_name": "Claude Haiku 4.5",
"max_tokens": 200000,
"name": "claude-haiku-4-5-20251001"
},
{
"display_name": "Claude Sonnet 4.5",
"max_tokens": 200000,
"name": "claude-sonnet-4-5-20250929"
},
{
"display_name": "Claude Opus 4.1",
"max_tokens": 200000,
"name": "claude-opus-4-1-20250805"
},
{
"display_name": "Claude Opus 4",
"max_tokens": 200000,
"name": "claude-opus-4-20250514"
},
{
"display_name": "Claude Sonnet 4",
"max_tokens": 200000,
"name": "claude-sonnet-4-20250514"
}
],
"version": 1
},
"deepseek": {
"api_url": "https://api.deepseek.com/v1/chat/completions",
"display_name": "DeepSeek",
"models": [
{
"display_name": "DeepSeek V4 Flash",
"name": "deepseek-v4-flash",
"cheapest": true
},
{
"display_name": "DeepSeek V4 Pro",
"name": "deepseek-v4-pro"
}
],
"version": 1
},
"google": {
"api_url": "https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",
"models": [
{
"name": "gemini-3.7-flash",
"display_name": "Gemini 3.7 Flash",
"max_tokens": 1000000,
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["low", "medium", "high"] }]
},
{
"name": "gemini-3.5-flash-lite",
"display_name": "Gemini 3.5 Flash Lite",
"max_tokens": 1000000,
"cheapest": true,
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["minimal", "low", "medium", "high"] }]
},
{
"name": "gemini-2.5-flash-lite",
"display_name": "Gemini 2.5 Flash Lite",
"max_tokens": 1000000,
"cheapest": true
},
{
"name": "gemini-3.1-flash-lite-preview",
"display_name": "Gemini 3.1 Flash Lite Preview",
"max_tokens": 1000000
},
{
"name": "gemini-2.5-pro",
"display_name": "Gemini 2.5 Pro",
"max_tokens": 1000000
},
{
"name": "gemini-2.5-flash",
"display_name": "Gemini 2.5 Flash",
"max_tokens": 1000000
},
{
"name": "gemini-3-flash-preview",
"display_name": "Gemini 3 Flash Preview",
"max_tokens": 1000000
},
{
"name": "gemini-3.1-pro-preview",
"display_name": "Gemini 3.1 Pro Preview",
"max_tokens": 1000000
}
]
},
"lmstudio": {
"api_url": "http://localhost:1234/api/v0/chat/completions",
"display_name": "LMStudio",
"fetch_models_url": "http://localhost:1234/api/v0/models",
"open_api": true
},
"mistral": {
"api_url": "https://api.mistral.ai/v1/chat/completions",
"models": [
{
"display_name": "Mistral Medium 3.5",
"max_tokens": 131000,
"name": "mistral-medium-latest",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["none", "high"] }]
},
{
"display_name": "Mistral Small 4",
"max_tokens": 131000,
"name": "mistral-small-latest",
"cheapest": true,
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["none", "high"] }]
},
{
"display_name": "codestral-latest",
"max_tokens": 256000,
"name": "codestral-latest"
},
{
"display_name": "mistral-large-latest",
"max_tokens": 131000,
"name": "mistral-large-latest"
},
{
"display_name": "mistral-small-latest",
"max_tokens": 32000,
"name": "mistral-small-latest",
"cheapest": true
},
{
"display_name": "open-mistral-nemo",
"max_tokens": 131000,
"name": "open-mistral-nemo"
},
{
"display_name": "open-codestral-mamba",
"max_tokens": 256000,
"name": "open-codestral-mamba"
}
],
"version": 1
},
"ollama": {
"api_url": "http://localhost:11434/api/chat",
"fetch_models_url": "http://localhost:11434/api/tags",
"open_api": true
},
"openai": {
"api_url": "https://api.openai.com/v1/chat/completions",
"display_name": "OpenAI",
"models": [
{
"display_name": "GPT-5.6 Terra",
"name": "gpt-5.6-terra",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["none", "low", "medium", "high", "xhigh", "max"] }]
},
{
"display_name": "GPT-5.6 Sol",
"name": "gpt-5.6-sol",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["none", "low", "medium", "high", "xhigh", "max"] }]
},
{
"display_name": "GPT-5.6 Luna",
"name": "gpt-5.6-luna",
"cheapest": true,
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["none", "low", "medium", "high", "xhigh", "max"] }]
},
{
"max_tokens": 128000,
"name": "gpt-4o"
},
{
"max_tokens": 128000,
"name": "gpt-4o-mini"
},
{
"max_tokens": 200000,
"name": "o1"
},
{
"max_tokens": 128000,
"name": "o1-mini"
},
{
"max_tokens": 200000,
"name": "o3-mini"
},
{
"name": "gpt-4.1-nano"
},
{
"name": "gpt-4.1-mini"
},
{
"name": "gpt-4.1"
},
{
"name": "o4-mini"
},
{
"name": "o3"
},
{
"name": "o3-pro"
},
{
"name": "o1-pro"
},
{
"name": "gpt-5"
},
{
"name": "gpt-5-mini"
},
{
"name": "gpt-5-nano",
"cheapest": true
},
{
"name": "gpt-5-pro"
},
{
"name": "gpt-5.1"
},
{
"name": "gpt-5.2"
},
{
"name": "gpt-5.3"
},
{
"name": "gpt-5.4"
},
{
"name": "gpt-5.5"
},
{
"name": "gpt-5.5-pro"
},
{
"name": "gpt-5.2-pro"
},
{
"name": "gpt-5.1-codex-max"
},
{
"name": "gpt-5.1-codex"
},
{
"name": "gpt-5.2-codex"
},
{
"name": "gpt-5.3-codex"
}
],
"version": 1
},
"xai": {
"api_url": "https://api.x.ai/v1/chat/completions",
"display_name": "xAI",
"models": [
{
"name": "grok-4.6",
"display_name": "Grok 4.6",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["low", "medium", "high", "xhigh"] }]
},
{
"name": "grok-4.5",
"display_name": "Grok 4.5",
"reasoning": true,
"reasoning_options": [{ "type": "effort", "values": ["low", "medium", "high"] }]
},
{
"name": "grok-4-1-fast-non-reasoning-latest",
"cheapest": true
},
{
"name": "grok-code-fast-1"
},
{
"name": "grok-4-1-fast-reasoning-latest"
},
{
"name": "grok-3-latest"
},
{
"name": "grok-4-latest"
}
]
},
"github": {
"api_url": "https://models.github.ai/inference/chat/completions",
"display_name": "GitHub",
"models": [
{
"name": "openai/gpt-5",
"display_name": "GitHub OpenAI GPT-5",
"tool_calling": true
},
{
"name": "openai/gpt-5-mini",
"display_name": "GitHub OpenAI GPT-5 mini",
"tool_calling": true
},
{
"name": "openai/gpt-5-nano",
"display_name": "GitHub OpenAI GPT-5 nano",
"tool_calling": true
},
{
"name": "openai/gpt-4.1",
"display_name": "GitHub OpenAI GPT-4.1",
"tool_calling": true
},
{
"name": "openai/gpt-4.1-mini",
"display_name": "GitHub OpenAI GPT-4.1 Mini",
"tool_calling": true
},
{
"name": "openai/o3",
"display_name": "GitHub OpenAI o3",
"reasoning": true,
"tool_calling": true
},
{
"name": "openai/o3-mini",
"display_name": "GitHub OpenAI o3 Mini",
"reasoning": true,
"tool_calling": true
},
{
"name": "openai/o4-mini",
"display_name": "GitHub OpenAI o4 Mini",
"reasoning": true,
"tool_calling": true
},
{
"name": "deepseek/deepseek-v3-0324",
"display_name": "GitHub DeepSeek V3-0324"
},
{
"name": "mistral-ai/codestral-2501",
"display_name": "GitHub Mistral Codestral 25.01"
},
{
"name": "meta/llama-4-scout-17b-16e-instruct",
"display_name": "GitHub Meta Llama 4 Scout 17B",
"reasoning": true,
"tool_calling": true
},
{
"name": "deepseek/deepseek-r1-0528",
"display_name": "GitHub DeepSeek R1-0528",
"tool_calling": true
},
{
"name": "xai/grok-3",
"display_name": "GitHub xAI Grok 3",
"reasoning": true
},
{
"name": "xai/grok-3-mini",
"display_name": "GitHub xAI Grok 3 Mini",
"cheapest": true
}
]
},
"perplexity": {
"api_url": "https://api.perplexity.ai/chat/completions",
"display_name": "Perplexity",
"models": [
{
"name": "sonar-reasoning-pro",
"display_name": "Sonar Reasoning Pro",
"tool_calling": true
},
{
"name": "sonar-pro",
"display_name": "Sonar Pro",
"tool_calling": true
},
{
"name": "sonar",
"display_name": "Sonar",
"tool_calling": true
}
]
},
"openrouter": {
"api_url": "https://openrouter.ai/api/v1/chat/completions",
"display_name": "OpenRouter",
"models": [
{
"name": "x-ai/grok-4-fast",
"display_name": "xAI: Grok 4 Fast"
},
{
"name": "deepseek/deepseek-chat-v3.1",
"display_name": "DeepSeek: DeepSeek V3.1"
},
{
"name": "x-ai/grok-code-fast-1",
"display_name": "xAI: Grok Code Fast 1"
},
{
"name": "anthropic/claude-sonnet-4",
"display_name": "Anthropic: Claude Sonnet 4"
},
{
"name": "google/gemini-2.5-flash",
"display_name": "Google: Gemini 2.5 Flash"
},
{
"name": "google/gemini-3-flash-preview",
"display_name": "Google: Gemini 3 Flash Preview"
},
{
"name": "deepseek/deepseek-chat-v3-0324",
"display_name": "DeepSeek: DeepSeek V3 0324"
},
{
"name": "google/gemini-2.5-pro",
"display_name": "Google: Gemini 2.5 Pro"
},
{
"name": "google/gemini-3-pro-preview",
"display_name": "Google: Gemini 3 Pro Preview"
},
{
"name": "google/gemini-3.1-pro-preview",
"display_name": "Google: Gemini 3.1 Pro Preview"
},
{
"name": "openai/gpt-5",
"display_name": "OpenAI: GPT-5"
},
{
"name": "google/gemini-2.5-flash-lite",
"display_name": "Google: Gemini 2.5 Flash Lite"
},
{
"name": "openai/gpt-5.2",
"display_name": "OpenAI: GPT-5.2"
},
{
"name": "openai/gpt-5.2-pro",
"display_name": "OpenAI: GPT-5 Pro"
},
{
"name": "moonshotai/kimi-k2.5",
"display_name": "kimi-k2.5"
},
{
"name": "stepfun/step-3.5-flash",
"display_name": "StepFun: Step 3.5 Flash"
},
{
"name": "z-ai/glm-4.7",
"display_name": "GLM 4.7"
},
{
"name": "z-ai/glm-5",
"display_name": "GLM 5"
},
{
"name": "qwen/qwen3-coder:free",
"display_name": "Qwen3 Coder 480B A35B (free)"
},
{
"name": "arcee-ai/trinity-large-preview:free",
"display_name": "Arcee AI: Trinity Large Preview (free)",
"cheapest": true
},
{
"name": "nvidia/nemotron-3-super-120b-a12b:free",
"display_name": "NVIDIA: Nemotron 3 Super (free)"
},
{
"name": "minimax/minimax-m2.5:free",
"display_name": "MiniMax: MiniMax M2.5 (free)"
},
{
"name": "NVIDIA: Nemotron 3 Ultra (free)",
"display_name": "nvidia/nemotron-3-ultra-550b-a55b:free"
}
]
},
"moonshotai": {
"api_url": "https://api.moonshot.ai/v1/chat/completions",
"display_name": "Moonshot",
"models": [
{
"name": "kimi-k2.5"
},
{
"name": "kimi-k2.6"
}
]
},
"nvidia": {
"api_url": "https://integrate.api.nvidia.com/v1/chat/completions",
"display_name": "NVIDIA",
"models": [
{
"name": "moonshotai/kimi-k2.5",
"display_name": "kimi-k2.5"
},
{
"name": "z-ai/glm4.7",
"display_name": "GLM-4.7"
},
{
"name": "minimaxai/minimax-m2.7",
"display_name": "MiniMax M2.7"
},
{
"name": "stepfun-ai/step-3.5-flash",
"display_name": "Step 3.5 Flash"
},
{
"name": "deepseek-ai/deepseek-v3.2",
"display_name": "DeepSeek-V3.2"
}
]
},
"llama.cpp": {
"api_url": "http://localhost:8080/api/chat",
"fetch_models_url": "http://localhost:8080/api/tags",
"open_api": true
},
"togetherai": {
"api_url": "https://api.together.xyz/v1/chat/completions",
"display_name": "Together AI",
"models": [
{
"name": "deepseek-ai/DeepSeek-V4-Pro",
"display_name": "Deepseek V4 Pro"
},
{
"name": "zai-org/GLM-5.1",
"display_name": "GLM 5.1 FP4"
},
{
"name": "moonshotai/Kimi-K2.5",
"display_name": "Kimi K2.5"
},
{
"name": "moonshotai/Kimi-K2.6",
"display_name": "Kimi K2.6 Fp4"
},
{
"name": "MiniMaxAI/MiniMax-M2.7",
"display_name": "MiniMax M2.7 FP4"
},
{
"name": "MiniMaxAI/MiniMax-M2.5",
"display_name": "MiniMax M2.5 FP4"
},
{
"name": "Qwen/Qwen3.5-9B",
"display_name": "Qwen3.5 9B FP8",
"cheapest": true
}
]
},
"xiaomi": {
"api_url": "https://api.xiaomimimo.com/v1/chat/completions",
"display_name": "Xiaomi MiMo",
"models": [
{
"name": "mimo-v2.5-pro",
"display_name": "MiMo V2.5 Pro"
},
{
"name": "mimo-v2.5",
"display_name": "MiMo V2.5"
}
]
}
},
"agents": {
"gemini-cli": {
"enabled": true,
"command": "gemini",
"args": ["--acp"]
},
"opencode": {
"enabled": true,
"command": "opencode",
"args": ["acp"]
},
"claude-agent": {
"enabled": true,
"command": "claude-agent-acp"
},
"cursor": {
"enabled": true,
"command": "cursor",
"args": ["acp"]
},
"pi-acp": {
"enabled": true,
"command": "pi-acp",
"args": []
},
"codex-acp": {
"enabled": true,
"command": "codex-acp",
"args": []
},
"qwen-code": {
"enabled": true,
"command": "qwen",
"args": ["--acp"]
}
}
}