import { ConfigModelProvider, UIConfigField, UIConfigSections, } from '@/lib/config/types'; import { motion } from 'framer-motion'; import { ArrowLeft, ArrowRight, Check } from 'lucide-react'; import { useEffect, useState } from 'react'; import { toast } from 'sonner'; import AddProvider from '../Settings/Sections/Models/AddProviderDialog'; import ModelProvider from '../Settings/Sections/Models/ModelProvider'; import ModelSelect from '@/components/Settings/Sections/Models/ModelSelect'; const SetupConfig = ({ configSections, setupState, setSetupState, }: { configSections: UIConfigSections; setupState: number; setSetupState: (state: number) => void; }) => { const [providers, setProviders] = useState([]); const [isLoading, setIsLoading] = useState(true); const [isFinishing, setIsFinishing] = useState(false); useEffect(() => { const fetchProviders = async () => { try { setIsLoading(true); const res = await fetch('/api/providers'); if (!res.ok) throw new Error('Failed to fetch providers'); const data = await res.json(); setProviders(data.providers || []); } catch (error) { console.error('Error fetching providers:', error); toast.error('Failed to load providers'); } finally { setIsLoading(false); } }; if (setupState === 2) { fetchProviders(); } }, [setupState]); const handleFinish = async () => { try { setIsFinishing(true); const res = await fetch('/api/config/setup-complete', { method: 'POST', }); if (!res.ok) throw new Error('Failed to complete setup'); window.location.reload(); } catch (error) { console.error('Error completing setup:', error); toast.error('Failed to complete setup'); setIsFinishing(false); } }; const hasProviders = providers.length > 0; return (
{setupState === 2 && (

Manage Providers

Add and configure your model providers

{isLoading ? (

Loading providers...

) : providers.length === 0 ? (

No providers configured

) : ( providers.map((provider) => ( f.key === provider.type, )?.fields ?? []) as UIConfigField[] } modelProvider={provider} setProviders={setProviders} /> )) )}
)} {setupState === 3 && (

Select models

Select models which you wish to use.

)}
{setupState === 2 && ( { setSetupState(3); }} disabled={!hasProviders || isLoading} className="flex flex-row items-center gap-1.5 md:gap-2 px-3 md:px-5 py-2 md:py-2.5 rounded-lg bg-[#24A0ED] text-white hover:bg-[#1e8fd1] active:scale-95 transition-all duration-200 font-medium text-xs sm:text-sm disabled:bg-light-200 dark:disabled:bg-dark-200 disabled:text-black/40 dark:disabled:text-white/40 disabled:cursor-not-allowed disabled:active:scale-100" > Next )} {setupState === 3 && ( {isFinishing ? 'Finishing...' : 'Finish'} )}
); }; export default SetupConfig;