chore: bootstrap hermes-ui skeleton from 0.6.29 snapshot
Import the client, server, skills, tests, and build scripts as the starting point for the rebuild, then trim the surfaces this project does not ship: Electron desktop packaging, the marketing website, and the ESP32 firmware tree. CI keeps the web build, e2e, lockfile, release, and Docker workflows. Rename the package and CLI entry points to hermes-ui, drop the prepare hook so npm ci no longer triggers a build, and drop the removed tsconfig and nodemon references. Rewrite AGENTS.md, ARCHITECTURE.md, DEVELOPMENT.md, and the READMEs so the documented package map and hard rules match this repository. reference_code/ is ignored: it is a read-only snapshot, not an input to the build.
This commit is contained in:
@@ -0,0 +1,607 @@
|
||||
/**
|
||||
* Provider registry — single source of truth for both frontend and backend.
|
||||
* Synced from hermes-agent hermes_cli/models.py _PROVIDER_MODELS.
|
||||
*/
|
||||
|
||||
export interface ProviderPreset {
|
||||
label: string
|
||||
value: string
|
||||
base_url: string
|
||||
models: string[]
|
||||
builtin: boolean
|
||||
api_mode?: 'chat_completions' | 'codex_responses' | 'anthropic_messages' | 'bedrock_converse' | 'codex_app_server'
|
||||
}
|
||||
|
||||
export const PROVIDER_PRESETS: ProviderPreset[] = [
|
||||
{
|
||||
label: 'Codex-apikey.fun',
|
||||
value: 'fun-codex',
|
||||
builtin: true,
|
||||
base_url: 'https://api.apikey.fun/v1',
|
||||
api_mode: 'codex_responses',
|
||||
models: [
|
||||
'gpt-5.5',
|
||||
'gpt-5.4',
|
||||
'gpt-5.4-mini',
|
||||
'gpt-5.3-codex',
|
||||
'gpt-5.3-codex-spark',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Claude-apikey.fun',
|
||||
value: 'fun-claude',
|
||||
builtin: true,
|
||||
base_url: 'https://api.apikey.fun',
|
||||
api_mode: "anthropic_messages",
|
||||
models: [
|
||||
'claude-opus-4-8',
|
||||
'claude-opus-4-7',
|
||||
'claude-opus-4-6',
|
||||
'claude-sonnet-4-6',
|
||||
'claude-haiku-4-5'
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'LM Studio',
|
||||
value: 'lmstudio',
|
||||
builtin: true,
|
||||
base_url: 'http://127.0.0.1:1234/v1',
|
||||
api_mode: 'chat_completions',
|
||||
models: [],
|
||||
},
|
||||
{
|
||||
label: 'Anthropic',
|
||||
value: 'anthropic',
|
||||
builtin: true,
|
||||
base_url: 'https://api.anthropic.com',
|
||||
api_mode: 'anthropic_messages',
|
||||
models: [
|
||||
'claude-fable-5',
|
||||
'claude-opus-4-8',
|
||||
'claude-opus-4-7',
|
||||
'claude-opus-4-6',
|
||||
'claude-sonnet-4-6',
|
||||
'claude-opus-4-5-20251101',
|
||||
'claude-sonnet-4-5-20250929',
|
||||
'claude-opus-4-20250514',
|
||||
'claude-sonnet-4-20250514',
|
||||
'claude-haiku-4-5-20251001',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Claude OAuth',
|
||||
value: 'claude-oauth',
|
||||
builtin: true,
|
||||
base_url: 'https://api.anthropic.com',
|
||||
api_mode: 'anthropic_messages',
|
||||
models: [
|
||||
'claude-fable-5',
|
||||
'claude-opus-4-8',
|
||||
'claude-opus-4-7',
|
||||
'claude-opus-4-6',
|
||||
'claude-sonnet-4-6',
|
||||
'claude-haiku-4-5',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Google AI Studio',
|
||||
value: 'gemini',
|
||||
builtin: true,
|
||||
base_url: 'https://generativelanguage.googleapis.com/v1beta/openai',
|
||||
models: [
|
||||
'gemini-3.1-pro-preview',
|
||||
'gemini-3-pro-preview',
|
||||
'gemini-3-flash-preview',
|
||||
'gemini-3.1-flash-lite-preview',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Google Gemini OAuth',
|
||||
value: 'google-gemini-cli',
|
||||
builtin: true,
|
||||
base_url: 'cloudcode-pa://google',
|
||||
models: [
|
||||
'gemini-3.1-pro-preview',
|
||||
'gemini-3-pro-preview',
|
||||
'gemini-3-flash-preview',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'DeepSeek',
|
||||
value: 'deepseek',
|
||||
builtin: true,
|
||||
base_url: 'https://api.deepseek.com',
|
||||
models: ['deepseek-v4-pro', 'deepseek-v4-flash', 'deepseek-chat', 'deepseek-reasoner'],
|
||||
},
|
||||
{
|
||||
label: 'Z.AI / GLM',
|
||||
value: 'zai',
|
||||
builtin: true,
|
||||
base_url: 'https://api.z.ai/api/paas/v4',
|
||||
models: [
|
||||
'glm-5.1',
|
||||
'glm-5',
|
||||
'glm-5v-turbo',
|
||||
'glm-5-turbo',
|
||||
'glm-4.7',
|
||||
'glm-4.5',
|
||||
'glm-4.5-flash',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'GLM-Coding-Plan',
|
||||
value: 'glm',
|
||||
builtin: true,
|
||||
base_url: 'https://open.bigmodel.cn/api/coding/paas/v4',
|
||||
models: [
|
||||
'glm-5.2',
|
||||
'glm-5.1',
|
||||
'glm-5v-turbo',
|
||||
'glm-4.7',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Kimi for Coding',
|
||||
value: 'kimi-coding',
|
||||
builtin: true,
|
||||
base_url: 'https://api.kimi.com/coding/v1',
|
||||
models: [
|
||||
'kimi-k2.6',
|
||||
'kimi-k2.5',
|
||||
'kimi-for-coding',
|
||||
'kimi-k2-thinking',
|
||||
'kimi-k2-thinking-turbo',
|
||||
'kimi-k2-turbo-preview',
|
||||
'kimi-k2-0905-preview',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Kimi for Coding China',
|
||||
value: 'kimi-coding-cn',
|
||||
builtin: true,
|
||||
base_url: 'https://api.kimi.cn/coding/v1',
|
||||
models: [
|
||||
'kimi-k2.6',
|
||||
'kimi-k2.5',
|
||||
'kimi-k2-thinking',
|
||||
'kimi-k2-turbo-preview',
|
||||
'kimi-k2-0905-preview',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'xAI',
|
||||
value: 'xai',
|
||||
builtin: true,
|
||||
base_url: 'https://api.x.ai/v1',
|
||||
models: [
|
||||
'grok-4.3',
|
||||
'grok-4.20-0309-non-reasoning',
|
||||
'grok-4.20-0309-reasoning',
|
||||
'grok-4.20-multi-agent-0309',
|
||||
'grok-build-0.1',
|
||||
'grok-imagine-image',
|
||||
'grok-imagine-image-quality',
|
||||
'grok-imagine-video',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'xAI Grok OAuth (SuperGrok Subscription)',
|
||||
value: 'xai-oauth',
|
||||
builtin: true,
|
||||
base_url: 'https://api.x.ai/v1',
|
||||
models: [
|
||||
'grok-4.3',
|
||||
'grok-4.20-0309-non-reasoning',
|
||||
'grok-4.20-0309-reasoning',
|
||||
'grok-4.20-multi-agent-0309',
|
||||
'grok-build-0.1',
|
||||
'grok-imagine-image',
|
||||
'grok-imagine-image-quality',
|
||||
'grok-imagine-video',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'MiniMax',
|
||||
value: 'minimax',
|
||||
builtin: true,
|
||||
base_url: 'https://api.minimax.io/anthropic/v1',
|
||||
api_mode: 'anthropic_messages',
|
||||
models: ['MiniMax-M3', 'MiniMax-M2.7', 'MiniMax-M2.7-highspeed', 'MiniMax-M2.5', 'MiniMax-M2.5-highspeed', 'MiniMax-M2.1', 'MiniMax-M2.1-highspeed', 'MiniMax-M2'],
|
||||
},
|
||||
{
|
||||
label: 'MiniMax (China)',
|
||||
value: 'minimax-cn',
|
||||
builtin: true,
|
||||
base_url: 'https://api.minimaxi.com/anthropic/v1',
|
||||
api_mode: 'anthropic_messages',
|
||||
models: ['MiniMax-M3', 'MiniMax-M2.7', 'MiniMax-M2.7-highspeed', 'MiniMax-M2.5', 'MiniMax-M2.5-highspeed', 'MiniMax-M2.1', 'MiniMax-M2.1-highspeed', 'MiniMax-M2'],
|
||||
},
|
||||
{
|
||||
label: 'Alibaba Cloud',
|
||||
value: 'alibaba',
|
||||
builtin: true,
|
||||
base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',
|
||||
models: [
|
||||
'qwen3.7-max',
|
||||
'qwen3.6-plus',
|
||||
'kimi-k2.5',
|
||||
'qwen3.5-plus',
|
||||
'qwen3-coder-plus',
|
||||
'qwen3-coder-next',
|
||||
'glm-5',
|
||||
'glm-4.7',
|
||||
'MiniMax-M2.5',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Alibaba Cloud (Coding Plan)',
|
||||
value: 'alibaba-coding-plan',
|
||||
builtin: true,
|
||||
// NOTE: This is the international (intl) DashScope endpoint, matching upstream
|
||||
// hermes-agent (auth.py:255). Mainland China DashScope accounts (sk-sp-* keys
|
||||
// issued by dashscope.aliyun.com) must override via ALIBABA_CODING_PLAN_BASE_URL=
|
||||
// https://coding.dashscope.aliyuncs.com/v1 (no -intl), since the -intl endpoint
|
||||
// returns HTTP 401 for those keys.
|
||||
base_url: 'https://coding-intl.dashscope.aliyuncs.com/v1',
|
||||
models: [
|
||||
'qwen3.7-max',
|
||||
'qwen3.7-plus',
|
||||
'qwen3.6-plus',
|
||||
'qwen3.5-plus',
|
||||
'qwen3-coder-plus',
|
||||
'qwen3-coder-next',
|
||||
'kimi-k2.5',
|
||||
'glm-5',
|
||||
'glm-4.7',
|
||||
'MiniMax-M2.5',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Hugging Face',
|
||||
value: 'huggingface',
|
||||
builtin: true,
|
||||
base_url: 'https://router.huggingface.co/v1',
|
||||
models: [
|
||||
'moonshotai/Kimi-K2.5',
|
||||
'Qwen/Qwen3.5-397B-A17B',
|
||||
'Qwen/Qwen3.5-35B-A3B',
|
||||
'deepseek-ai/DeepSeek-V3.2',
|
||||
'MiniMaxAI/MiniMax-M2.5',
|
||||
'zai-org/GLM-5',
|
||||
'XiaomiMiMo/MiMo-V2-Flash',
|
||||
'moonshotai/Kimi-K2-Thinking',
|
||||
'moonshotai/Kimi-K2.6',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'NVIDIA',
|
||||
value: 'nvidia',
|
||||
builtin: true,
|
||||
base_url: 'https://integrate.api.nvidia.com/v1',
|
||||
models: [
|
||||
'nvidia/nemotron-3-super-120b-a12b',
|
||||
'nvidia/nemotron-3-nano-30b-a3b',
|
||||
'nvidia/llama-3.3-nemotron-super-49b-v1.5',
|
||||
'qwen/qwen3.5-397b-a17b',
|
||||
'deepseek-ai/deepseek-v3.2',
|
||||
'moonshotai/kimi-k2.6',
|
||||
'minimaxai/minimax-m2.5',
|
||||
'z-ai/glm5',
|
||||
'openai/gpt-oss-120b',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'NovitaAI',
|
||||
value: 'novita',
|
||||
builtin: true,
|
||||
base_url: 'https://api.novita.ai/openai',
|
||||
models: [
|
||||
'moonshotai/kimi-k2.5',
|
||||
'minimax/minimax-m2.7',
|
||||
'zai-org/glm-5',
|
||||
'deepseek/deepseek-v3-0324',
|
||||
'deepseek/deepseek-r1-0528',
|
||||
'qwen/qwen3-235b-a22b-fp8',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'GMI Cloud',
|
||||
value: 'gmi',
|
||||
builtin: true,
|
||||
base_url: 'https://api.gmi-serving.com/v1',
|
||||
models: [
|
||||
'zai-org/GLM-5.1-FP8',
|
||||
'deepseek-ai/DeepSeek-V3.2',
|
||||
'moonshotai/Kimi-K2.5',
|
||||
'google/gemini-3.1-flash-lite-preview',
|
||||
'anthropic/claude-sonnet-4.6',
|
||||
'openai/gpt-5.4',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Xiaomi Token Plan',
|
||||
value: 'xiaomi-token-plan',
|
||||
builtin: true,
|
||||
base_url: 'https://token-plan-sgp.xiaomimimo.com/v1',
|
||||
models: [
|
||||
'mimo-v2-omni',
|
||||
'mimo-v2-pro',
|
||||
'mimo-v2-tts',
|
||||
'mimo-v2.5',
|
||||
'mimo-v2.5-pro',
|
||||
'mimo-v2.5-tts',
|
||||
'mimo-v2.5-tts-voiceclone',
|
||||
'mimo-v2.5-tts-voicedesign',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Xiaomi MiMo',
|
||||
value: 'xiaomi',
|
||||
builtin: true,
|
||||
base_url: 'https://api.xiaomimimo.com/v1',
|
||||
models: [
|
||||
'mimo-v2.5-pro',
|
||||
'mimo-v2.5',
|
||||
'mimo-v2-pro',
|
||||
'mimo-v2-omni',
|
||||
'mimo-v2-flash',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Kilo Code',
|
||||
value: 'kilocode',
|
||||
builtin: true,
|
||||
base_url: 'https://api.kilo.ai/api/gateway',
|
||||
models: [
|
||||
'anthropic/claude-opus-4.6',
|
||||
'anthropic/claude-sonnet-4.6',
|
||||
'openai/gpt-5.4',
|
||||
'google/gemini-3-pro-preview',
|
||||
'google/gemini-3-flash-preview',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Tencent TokenHub',
|
||||
value: 'tencent-tokenhub',
|
||||
builtin: true,
|
||||
base_url: 'https://tokenhub.tencentmaas.com/v1',
|
||||
models: ['hy3-preview'],
|
||||
},
|
||||
{
|
||||
label: 'Vercel AI Gateway',
|
||||
value: 'ai-gateway',
|
||||
builtin: true,
|
||||
base_url: 'https://ai-gateway.vercel.sh/v1',
|
||||
models: [
|
||||
'moonshotai/kimi-k2.6',
|
||||
'alibaba/qwen3.6-plus',
|
||||
'zai/glm-5.1',
|
||||
'minimax/minimax-m2.7',
|
||||
'anthropic/claude-sonnet-4.6',
|
||||
'anthropic/claude-opus-4.7',
|
||||
'anthropic/claude-opus-4.6',
|
||||
'anthropic/claude-haiku-4.5',
|
||||
'openai/gpt-5.4',
|
||||
'openai/gpt-5.4-mini',
|
||||
'openai/gpt-5.3-codex',
|
||||
'google/gemini-3.1-pro-preview',
|
||||
'google/gemini-3-flash',
|
||||
'google/gemini-3.1-flash-lite-preview',
|
||||
'xai/grok-4.20-reasoning',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'CLIProxyAPI',
|
||||
value: 'cliproxyapi',
|
||||
builtin: true,
|
||||
base_url: 'http://127.0.0.1:8317/v1',
|
||||
models: [
|
||||
'gpt-5.5',
|
||||
'gpt-5-codex',
|
||||
'claude-sonnet-4-6',
|
||||
'claude-sonnet-4-5-20250929',
|
||||
'gemini-3.1-pro-preview',
|
||||
'gemini-2.5-pro',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'OpenCode Zen',
|
||||
value: 'opencode-zen',
|
||||
builtin: true,
|
||||
base_url: 'https://opencode.ai/zen/v1',
|
||||
models: [
|
||||
'kimi-k2.5',
|
||||
'gpt-5.4-pro',
|
||||
'gpt-5.4',
|
||||
'gpt-5.3-codex',
|
||||
'gpt-5.2',
|
||||
'gpt-5.2-codex',
|
||||
'gpt-5.1',
|
||||
'gpt-5.1-codex',
|
||||
'gpt-5.1-codex-max',
|
||||
'gpt-5.1-codex-mini',
|
||||
'gpt-5',
|
||||
'gpt-5-codex',
|
||||
'gpt-5-nano',
|
||||
'claude-opus-4-6',
|
||||
'claude-opus-4-5',
|
||||
'claude-opus-4-1',
|
||||
'claude-sonnet-4-6',
|
||||
'claude-sonnet-4-5',
|
||||
'claude-sonnet-4',
|
||||
'claude-haiku-4-5',
|
||||
'claude-3-5-haiku',
|
||||
'gemini-3.1-pro',
|
||||
'gemini-3-pro',
|
||||
'gemini-3-flash',
|
||||
'minimax-m2.7',
|
||||
'minimax-m2.5',
|
||||
'minimax-m2.5-free',
|
||||
'minimax-m2.1',
|
||||
'glm-5',
|
||||
'glm-4.7',
|
||||
'glm-4.6',
|
||||
'kimi-k2-thinking',
|
||||
'kimi-k2',
|
||||
'qwen3-coder',
|
||||
'big-pickle',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'OpenCode Go',
|
||||
value: 'opencode-go',
|
||||
builtin: true,
|
||||
base_url: 'https://opencode.ai/zen/go/v1',
|
||||
models: [
|
||||
'glm-5.1',
|
||||
'glm-5',
|
||||
'kimi-k2.5',
|
||||
'kimi-k2.6',
|
||||
'mimo-v2.5-pro',
|
||||
'mimo-v2.5',
|
||||
'mimo-v2-pro',
|
||||
'mimo-v2-omni',
|
||||
'minimax-m2.7',
|
||||
'minimax-m2.5',
|
||||
'qwen3.7-max',
|
||||
'qwen3.6-plus',
|
||||
'qwen3.5-plus'
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'LongCat',
|
||||
value: 'longcat',
|
||||
builtin: true,
|
||||
base_url: 'https://api.longcat.chat/openai',
|
||||
api_mode: 'codex_responses',
|
||||
models: ['LongCat-Flash-Lite', 'LongCat-2.0-Preview'],
|
||||
},
|
||||
{
|
||||
label: 'OpenAI Codex',
|
||||
value: 'openai-codex',
|
||||
builtin: true,
|
||||
base_url: 'https://chatgpt.com/backend-api/codex',
|
||||
models: ['gpt-5.5', 'gpt-5.4-mini'],
|
||||
},
|
||||
{
|
||||
label: 'OpenAI API',
|
||||
value: 'openai-api',
|
||||
builtin: true,
|
||||
base_url: 'https://api.openai.com/v1',
|
||||
api_mode: 'codex_responses',
|
||||
models: [
|
||||
'gpt-5.5',
|
||||
'gpt-5.5-pro',
|
||||
'gpt-5.4',
|
||||
'gpt-5.4-mini',
|
||||
'gpt-5.4-nano',
|
||||
'gpt-5-mini',
|
||||
'gpt-5.3-codex',
|
||||
'gpt-4.1',
|
||||
'gpt-4o',
|
||||
'gpt-4o-mini',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Arcee AI',
|
||||
value: 'arcee',
|
||||
builtin: true,
|
||||
base_url: 'https://api.arcee.ai/api/v1',
|
||||
models: ['trinity-large-thinking', 'trinity-large-preview', 'trinity-mini'],
|
||||
},
|
||||
{
|
||||
label: 'Nous Portal',
|
||||
value: 'nous',
|
||||
builtin: true,
|
||||
base_url: 'https://inference-api.nousresearch.com/v1',
|
||||
// Synced from:
|
||||
// - https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
|
||||
// - https://portal.nousresearch.com/api/nous/recommended-models
|
||||
models: [
|
||||
'anthropic/claude-opus-4.8',
|
||||
'anthropic/claude-opus-4.7',
|
||||
'anthropic/claude-opus-4.6',
|
||||
'anthropic/claude-sonnet-4.6',
|
||||
'moonshotai/kimi-k2.6',
|
||||
'qwen/qwen3.7-max',
|
||||
'anthropic/claude-haiku-4.5',
|
||||
'openai/gpt-5.5',
|
||||
'openai/gpt-5.5-pro',
|
||||
'openai/gpt-5.4-mini',
|
||||
'openai/gpt-5.4-nano',
|
||||
'openai/gpt-5.3-codex',
|
||||
'xiaomi/mimo-v2.5-pro',
|
||||
'tencent/hy3-preview',
|
||||
'google/gemini-3-pro-preview',
|
||||
'google/gemini-3-flash-preview',
|
||||
'google/gemini-3.1-pro-preview',
|
||||
'google/gemini-3.1-flash-lite-preview',
|
||||
'qwen/qwen3.6-35b-a3b',
|
||||
'stepfun/step-3.5-flash',
|
||||
'minimax/minimax-m2.7',
|
||||
'z-ai/glm-5.1',
|
||||
'x-ai/grok-4.3',
|
||||
'nvidia/nemotron-3-super-120b-a12b',
|
||||
'deepseek/deepseek-v4-pro',
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'StepFun',
|
||||
value: 'stepfun',
|
||||
builtin: true,
|
||||
base_url: 'https://api.stepfun.ai/step_plan/v1',
|
||||
models: ['step-3.7-flash', 'step-3.5-flash', 'step-3.5-flash-2603'],
|
||||
},
|
||||
{
|
||||
label: 'Ollama Cloud',
|
||||
value: 'ollama-cloud',
|
||||
builtin: true,
|
||||
base_url: 'https://ollama.com/v1',
|
||||
models: [],
|
||||
},
|
||||
{
|
||||
label: 'OpenRouter',
|
||||
value: 'openrouter',
|
||||
builtin: true,
|
||||
base_url: 'https://openrouter.ai/api/v1',
|
||||
models: [],
|
||||
},
|
||||
{
|
||||
label: 'GitHub Copilot',
|
||||
value: 'copilot',
|
||||
builtin: true,
|
||||
base_url: 'https://api.githubcopilot.com',
|
||||
models: [
|
||||
'gpt-5.5',
|
||||
'gpt-5.4',
|
||||
'gpt-5.4-mini',
|
||||
'gpt-5.4-nano',
|
||||
'gpt-5-mini',
|
||||
'gpt-5.3-codex',
|
||||
'claude-opus-4.8',
|
||||
'claude-opus-4.7',
|
||||
'claude-opus-4.6',
|
||||
'claude-opus-4.6-fast',
|
||||
'claude-opus-4.5',
|
||||
'claude-haiku-4.5',
|
||||
'claude-sonnet-4.6',
|
||||
'claude-sonnet-4.5',
|
||||
'gemini-2.5-pro',
|
||||
'gemini-3-flash',
|
||||
'gemini-3.1-pro',
|
||||
'gemini-3.5-flash',
|
||||
'raptor-mini',
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
/** Build a Record<providerKey, models[]> for backend lookup */
|
||||
export function buildProviderModelMap(): Record<string, string[]> {
|
||||
const map: Record<string, string[]> = {}
|
||||
for (const p of PROVIDER_PRESETS) {
|
||||
if (p.models.length > 0) {
|
||||
map[p.value] = p.models
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
Reference in New Issue
Block a user