2025-07-23 18:25:15 +00:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { useMemo } from "react";
|
|
|
|
|
import { LanguageModelProvider } from "../../types";
|
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
|
import Image from "next/image";
|
|
|
|
|
import anthropicLogo from "@/public/anthropic.svg";
|
2025-07-23 23:53:43 +00:00
|
|
|
import azureAiLogo from "@/public/azureai.svg";
|
2025-07-23 18:25:15 +00:00
|
|
|
import bedrockLogo from "@/public/bedrock.svg";
|
|
|
|
|
import geminiLogo from "@/public/gemini.svg";
|
|
|
|
|
import openaiLogo from "@/public/openai.svg";
|
2025-07-23 23:53:43 +00:00
|
|
|
import deepseekLogo from "@/public/deepseek.svg";
|
|
|
|
|
import mistralLogo from "@/public/mistral.svg";
|
|
|
|
|
import openrouterLogo from "@/public/openrouter.svg";
|
|
|
|
|
import xaiLogo from "@/public/xai.svg";
|
2025-07-23 18:25:15 +00:00
|
|
|
|
|
|
|
|
interface ModelProviderLogoProps {
|
|
|
|
|
provider: LanguageModelProvider;
|
|
|
|
|
className?: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const ModelProviderLogo = ({
|
|
|
|
|
provider,
|
|
|
|
|
className,
|
|
|
|
|
}: ModelProviderLogoProps) => {
|
|
|
|
|
const { src, className: logoClassName } = useMemo(() => {
|
|
|
|
|
switch (provider) {
|
|
|
|
|
case 'amazon-bedrock':
|
|
|
|
|
return {
|
|
|
|
|
src: bedrockLogo,
|
|
|
|
|
className: 'w-3.5 h-3.5 dark:invert'
|
|
|
|
|
};
|
|
|
|
|
case 'anthropic':
|
|
|
|
|
return {
|
|
|
|
|
src: anthropicLogo,
|
|
|
|
|
className: 'dark:invert'
|
|
|
|
|
};
|
2025-07-23 23:53:43 +00:00
|
|
|
case 'azure':
|
|
|
|
|
return {
|
|
|
|
|
src: azureAiLogo,
|
|
|
|
|
className: 'w-3.5 h-3.5'
|
|
|
|
|
};
|
|
|
|
|
case 'deepseek':
|
|
|
|
|
return {
|
|
|
|
|
src: deepseekLogo,
|
|
|
|
|
className: 'w-3.5 h-3.5'
|
|
|
|
|
};
|
2025-07-23 18:25:15 +00:00
|
|
|
case 'openai':
|
|
|
|
|
return {
|
|
|
|
|
src: openaiLogo,
|
|
|
|
|
className: 'dark:invert w-3.5 h-3.5'
|
|
|
|
|
};
|
|
|
|
|
case 'google-generative-ai':
|
|
|
|
|
case 'google-vertex':
|
|
|
|
|
return {
|
|
|
|
|
src: geminiLogo,
|
|
|
|
|
className: 'w-3.5 h-3.5'
|
|
|
|
|
};
|
|
|
|
|
case 'google-vertex-anthropic':
|
|
|
|
|
return {
|
|
|
|
|
src: anthropicLogo,
|
|
|
|
|
className: 'dark:invert'
|
|
|
|
|
};
|
2025-07-23 23:53:43 +00:00
|
|
|
case 'mistral':
|
|
|
|
|
return {
|
|
|
|
|
src: mistralLogo,
|
|
|
|
|
className: 'w-3.5 h-3.5'
|
|
|
|
|
};
|
|
|
|
|
case 'openrouter':
|
|
|
|
|
return {
|
|
|
|
|
src: openrouterLogo,
|
|
|
|
|
className: 'dark:invert w-3.5 h-3.5'
|
|
|
|
|
};
|
|
|
|
|
case 'xai':
|
|
|
|
|
return {
|
|
|
|
|
src: xaiLogo,
|
|
|
|
|
className: 'dark:invert w-3.5 h-3.5'
|
|
|
|
|
};
|
2025-07-23 18:25:15 +00:00
|
|
|
}
|
|
|
|
|
}, [provider]);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Image
|
|
|
|
|
src={src}
|
|
|
|
|
alt={provider}
|
|
|
|
|
className={cn(
|
|
|
|
|
'w-4 h-4',
|
|
|
|
|
logoClassName,
|
|
|
|
|
className
|
|
|
|
|
)}
|
|
|
|
|
/>
|
|
|
|
|
)
|
|
|
|
|
}
|