import { AlertCircle, CheckCircle2, ChevronRight, CircleDashed, CircleDotDashed, Lock, Plus, Server, } from "lucide-react" import { shortModelName } from "@/components/model-selector" import { ProviderLogo } from "@/components/provider-logo" import { SettingsHeader } from "@/components/settings/settings-header" import { Button } from "@/components/ui/button" import { ScrollArea } from "@/components/ui/scroll-area" import { useDictionary } from "@/hooks/use-dictionary" import { formatMessage } from "@/lib/i18n/utils" import { POPULAR_PROVIDERS, providerStatus } from "@/lib/provider-setup" import { type FlattenedModel, PROVIDER_INFO, type ProviderConfig, type ProviderName, } from "@/lib/types/model-config" import { cn } from "@/lib/utils" function InUse() { const dict = useDictionary() return ( {dict.modelConfig.inUse} ) } /** The models tab's first page: the user's providers and the server's models */ export function ProvidersList({ providers, serverModels, selectedModelId, onOpen, onAdd, onBrowse, }: { providers: ProviderConfig[] serverModels: FlattenedModel[] selectedModelId: string | undefined onOpen: (providerId: string) => void onAdd: (provider: ProviderName) => void /** Shows every provider to pick from */ onBrowse: () => void }) { const dict = useDictionary() const t = dict.modelConfig const userProviderInUse = providers.find((p) => p.models.some((m) => m.id === selectedModelId), ) // No model chosen is the server's default model const serverInUse = !selectedModelId || serverModels.some((m) => m.id === selectedModelId) const names = serverModels .slice(0, 3) .map((m) => shortModelName(m.modelId)) .join(t.listSeparator) const serverCard = (serverModels.length > 0 || serverInUse) && (
{serverModels.length > 0 ? formatMessage( serverModels.length === 1 ? t.serverModelsSummaryOne : t.serverModelsSummaryOther, { count: serverModels.length, names: serverModels.length > 3 ? `${names}…` : names, }, ) : t.serverDefaultSummary}
{t.useOwnKeyHint}