Files
veridian/app/utils/model-mapping.ts
T
zoeissleeping 7a944afdb5 style: UI polish and miscellaneous fixes
Fixes link color from hardcoded white to currentColor for proper theme
support. Adds video and audio modality icons to ModelInfo. Registers
anthropic, nvidia, and xiaomi in the provider icon map. Removes unused
pagination validation from agents and topics endpoints. Adds convenience
start script. Updates AGENTS.md.
2026-04-27 12:07:01 -05:00

347 lines
8.0 KiB
TypeScript

import {
LogoOpenAI,
LogoOpenrouter,
LogoOllama,
LogoCerebras,
LogoLongCat,
LogoGoogle,
LogoGrok,
LogoGemini,
LogoGemma,
LogoDeepMind,
LogoVertexAI,
LogoDeepCogito,
LogoQwen,
LogoArcee,
LogoAi2,
LogoMoonshot,
LogoZAI,
LogoGLMV,
LogoChatGLM,
LogoNvidia,
LogoMistral,
LogoMeta,
LogoPerplexity,
LogoDeepSeek,
LogoClaude,
LogoAnthropic,
LogoMorph,
LogoNousResearch,
LogoAi21,
LogoWenxin,
LogoBaiduCloud,
LogoMinimax,
LogoNova,
LogoByteDance,
LogoLiquid,
LogoPaLM,
LogoUpstage,
LogoStepfun,
LogoXiaomiMiMo,
LogoRelace,
LogoEssentialAI,
LogoKwaipilot,
LogoIBM,
LogoInternLM,
LogoHunyuan,
LogoInception,
LogoAya,
LogoCohere,
LogoAionLabs,
LogoMicrosoft,
LogoInflection,
LogoVllm,
LogoClosedRouter,
} from '#components';
import { markRaw } from 'vue';
interface ModelConfig {
Icon: any;
keywords: RegExp[];
props?: Record<string, any>;
}
const MODEL_MAPPINGS: ModelConfig[] = [
{ Icon: markRaw(LogoOpenAI), keywords: [/gpt-3/], props: { type: 'gpt3' } },
{ Icon: markRaw(LogoOpenAI), keywords: [/gpt-4/], props: { type: 'gpt4' } },
{ Icon: markRaw(LogoOpenAI), keywords: [/gpt-5/], props: { type: 'gpt5' } },
// { Icon: Sora, keywords: ['sora'] },
{ Icon: markRaw(LogoOpenAI), keywords: [/gpt-oss/], props: { type: 'oss' } },
{
Icon: markRaw(LogoOpenAI),
keywords: [/o1-/, /^o1/, /\/o1/, /o3-/, /^o3/, /\/o3/, /o4-/, /^o4/, /\/o4/],
props: { type: 'o1' },
},
// { Icon: Dalle, keywords: ['dalle', 'dall-e'] },
{
Icon: markRaw(LogoOpenAI),
keywords: [
/text-embedding-/,
/tts-/,
/whisper-/,
/codex/,
/davinci/,
/babbage/,
/omni-moderation/,
/text-moderation/,
/text-adb/,
/text-ada/,
/computer-use/,
],
props: { type: 'platform' },
},
{
Icon: markRaw(LogoOpenAI),
keywords: [/^gpt-/, /\/gpt-/, /openai/],
},
{
Icon: markRaw(LogoGrok),
keywords: [/^grok-/, /^x-ai\//],
},
{
Icon: markRaw(LogoGemini),
keywords: [/gemini-/],
},
{
Icon: markRaw(LogoGemma),
keywords: [/gemma-/, /^gemma/, /\/gemma/, /translategemma/],
},
{
Icon: markRaw(LogoDeepMind),
keywords: [/^imagen-/, /\/imagen-/, /^imagen\d\//, /\/imagen\d/]
},
{
Icon: markRaw(LogoVertexAI),
keywords: [/^veo-/, /\/veo-/]
},
{
Icon: markRaw(LogoGoogle),
keywords: [/google/, /learnlm/, /nano-banana/]
},
{
Icon: markRaw(LogoDeepCogito),
keywords: [/^deepcogito-/, /\/deepcogito-/, /^cogito-/, /\/cogito-/]
},
{
Icon: markRaw(LogoQwen),
keywords: [/qwen/, /qwq/, /qvq/, /wanx/, /wan\d/, /wan\d\.\d-/, /tongyi/],
},
{
Icon: markRaw(LogoArcee),
keywords: [
/^trinity-/,
/\/trinity-/,
/afm-4.5b/,
/caller-large/,
/spotlight/,
/maestro-reasoning/,
/virtuoso-medium-v2/,
/virtuoso-large/,
/coder-large/,
/arcee-blitz/,
],
},
{
Icon: markRaw(LogoAi2),
keywords: [
/allenai\//,
/olmo-/,
/\/olmo-/,
]
},
{
Icon: markRaw(LogoOpenrouter),
keywords: [
/openrouter\//,
]
},
{
Icon: markRaw(LogoMoonshot),
keywords: [/kimi/, /moonshot/]
},
{
Icon: markRaw(LogoZAI),
keywords: [/^glm-4/, /\/glm-4/, /zai-/, /-glm-4/, /glm-\d/]
},
{
Icon: markRaw(LogoGLMV),
keywords: [/^glm-(.*)v/, /\/glm-(.*)v/]
},
{
Icon: markRaw(LogoChatGLM),
keywords: [/^glm-/, /\/glm-/, /chatglm/]
},
{
Icon: markRaw(LogoNvidia),
keywords: [/nvidia\//, /nemotron/, /openreasoning/, /nemoretriever/, /neva-/, /nv-/]
},
{
Icon: markRaw(LogoMistral),
keywords: [
/mistral/,
/mixtral/,
/codestral/,
/mathstral/,
/\/mn-/,
/pixtral/,
/ministral/,
/magistral/,
/devstral/,
/voxtral/,
/leanstral/,
],
},
{
Icon: markRaw(LogoMeta),
keywords: [/llama/, /\/l3/, /meta-llama\//]
},
{
Icon: markRaw(LogoPerplexity),
keywords: [/pplx/, /sonar/, /perplexity\//]
},
{
Icon: markRaw(LogoDeepSeek),
keywords: [/deepseek/]
},
{
Icon: markRaw(LogoClaude),
keywords: [/claude/]
},
{
Icon: markRaw(LogoAnthropic),
keywords: [/anthropic/],
},
{
Icon: markRaw(LogoMorph),
keywords: [/^morph-/, /\/morph-/]
},
{
Icon: markRaw(LogoNousResearch),
keywords: [/deephermes/, /hermes/, /genstruct/, /minos/]
},
{
Icon: markRaw(LogoAi21),
keywords: [/jamba/, /^j2/, /ai21/]
},
{
Icon: markRaw(LogoWenxin),
keywords: [/ernie/, /irag/]
},
{
Icon: markRaw(LogoBaiduCloud),
keywords: [/baidu/, /qianfan/]
},
{
Icon: markRaw(LogoMinimax),
keywords: [/minimax/, /abab/, /^image-/]
},
{
Icon: markRaw(LogoNova),
keywords: [/^nova-/, /\/nova-/]
},
{
Icon: markRaw(LogoByteDance),
keywords: [/bytedance/, /skylark/, /seed-/]
},
{
Icon: markRaw(LogoLiquid),
keywords: [/liquid/, /lfm/]
},
{
Icon: markRaw(LogoPaLM),
keywords: [/palm/]
},
{
Icon: markRaw(LogoUpstage),
keywords: [/^solar-/, /\/solar/]
},
{
Icon: markRaw(LogoStepfun),
keywords: [/step/]
},
{
Icon: markRaw(LogoXiaomiMiMo),
keywords: [/^mimo-/, /\/mimo-/]
},
{
Icon: markRaw(LogoRelace),
keywords: [/^relace-/, /\/relace-/]
},
{
Icon: markRaw(LogoEssentialAI),
keywords: [/^rnj-/, /\/rnj-/]
},
{
Icon: markRaw(LogoKwaipilot),
keywords: [/kat-/]
},
{
Icon: markRaw(LogoIBM),
keywords: [/ibm/, /granite/]
},
{
Icon: markRaw(LogoInternLM),
keywords: [/internlm/, /internvl/]
},
{
Icon: markRaw(LogoLongCat),
keywords: [/longcat/]
},
{
Icon: markRaw(LogoHunyuan),
keywords: [/hunyuan/]
},
{
Icon: markRaw(LogoInception),
keywords: [/^inception\//, /^mercury/, /\/mercury/]
},
{
Icon: markRaw(LogoAya),
keywords: [/aya/]
},
{
Icon: markRaw(LogoCohere),
keywords: [/command/, /cohere\//]
},
{
Icon: markRaw(LogoAionLabs),
keywords: [/aion-/]
},
{
Icon: markRaw(LogoMicrosoft),
keywords: [/wizardlm/, /phi-/, /^phi-/, /-phi-/, /mai-/, /microsoft/]
},
{
Icon: markRaw(LogoInflection),
keywords: [/inflection-/, /^inflection\//]
}
];
export const providerIcons: Record<string, any | null> = {
ollama: markRaw(LogoOllama),
google: markRaw(LogoGoogle),
openai: markRaw(LogoOpenAI),
azure: null,
anthropic: markRaw(LogoAnthropic),
cohere: markRaw(LogoCohere),
huggingface: null,
openrouter: markRaw(LogoOpenrouter),
cerebras: markRaw(LogoCerebras),
longcat: markRaw(LogoLongCat),
inception: markRaw(LogoInception),
mistral: markRaw(LogoMistral),
vllm: markRaw(LogoVllm),
closedrouter: markRaw(LogoClosedRouter),
nvidia: markRaw(LogoNvidia),
xiaomi: markRaw(LogoXiaomiMiMo),
};
export function getModelConfig(modelId: string) {
const cleanId = modelId.toLowerCase();
const match = MODEL_MAPPINGS.find(cfg =>
cfg.keywords.some(regex => regex.test(cleanId))
);
return match || { Icon: null, props: {} };
}