import { UIConfigField, ConfigModelProvider } from '@/lib/config/types'; import { cn } from '@/lib/utils'; import { AnimatePresence, motion } from 'framer-motion'; import { AlertCircle, ChevronDown, Pencil, Trash2, X } from 'lucide-react'; import { useState } from 'react'; import { toast } from 'sonner'; import AddModel from './AddModelDialog'; import UpdateProvider from './UpdateProviderDialog'; import DeleteProvider from './DeleteProviderDialog'; const ModelProvider = ({ modelProvider, setProviders, fields, }: { modelProvider: ConfigModelProvider; fields: UIConfigField[]; setProviders: React.Dispatch>; }) => { const [open, setOpen] = useState(false); const handleModelDelete = async ( type: 'chat' | 'embedding', modelKey: string, ) => { try { const res = await fetch(`/api/providers/${modelProvider.id}/models`, { method: 'DELETE', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ key: modelKey, type: type }), }); if (!res.ok) { throw new Error('Failed to delete model: ' + (await res.text())); } setProviders( (prev) => prev.map((provider) => { if (provider.id === modelProvider.id) { return { ...provider, ...(type === 'chat' ? { chatModels: provider.chatModels.filter( (m) => m.key !== modelKey, ), } : { embeddingModels: provider.embeddingModels.filter( (m) => m.key !== modelKey, ), }), }; } return provider; }) as ConfigModelProvider[], ); toast.success('Model deleted successfully.'); } catch (err) { console.error('Failed to delete model', err); toast.error('Failed to delete model.'); } }; return (
setOpen(!open)} >

{modelProvider.name}

{open && (
{modelProvider.chatModels.length > 0 && (

Chat models

{modelProvider.chatModels.some((m) => m.key === 'error') ? (
{ modelProvider.chatModels.find( (m) => m.key === 'error', )?.name }
) : (
{modelProvider.chatModels.map((model, index) => (
{model.name}
))}
)}
)} {modelProvider.embeddingModels.length > 0 && (

Embedding models

{modelProvider.embeddingModels.some( (m) => m.key === 'error', ) ? (
{ modelProvider.embeddingModels.find( (m) => m.key === 'error', )?.name }
) : (
{modelProvider.embeddingModels.map((model, index) => (
{model.name}
))}
)}
)}
)}
); }; export default ModelProvider;