'use client' import { useMemo, useState } from 'react' import { Badge } from '@/components/ui/badge' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Check, X } from 'lucide-react' import { ProviderAvailability } from '@/lib/types/models' interface ProviderStatusProps { providers: ProviderAvailability } export function ProviderStatus({ providers }: ProviderStatusProps) { // Combine all providers, with available ones first const allProviders = useMemo( () => [ ...providers.available.map((p) => ({ name: p, available: true })), ...providers.unavailable.map((p) => ({ name: p, available: false })), ], [providers.available, providers.unavailable], ) const [expanded, setExpanded] = useState(false) const visibleProviders = useMemo(() => { if (expanded) { return allProviders } return allProviders.slice(0, 6) }, [allProviders, expanded]) return ( AI Providers Configure providers through environment variables to enable their models. {providers.available.length} of {allProviders.length} configured
{visibleProviders.map((provider) => { const supportedTypes = providers.supported_types[provider.name] ?? [] return (
{provider.available ? ( ) : ( )}
{provider.name} {provider.available ? (
{supportedTypes.length > 0 ? ( supportedTypes.map((type) => ( {type.replace('_', ' ')} )) ) : ( No models )}
) : ( Not configured )}
) })}
{allProviders.length > 6 ? (
) : null}
Learn how to configure providers →
) }