7a944afdb5
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.
347 lines
8.0 KiB
TypeScript
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: {} };
|
|
} |