"use client"; import { useRouter } from "next/navigation"; import { Suspense, useEffect, useState } from "react"; import { toast } from "sonner"; import { type OnboardingVariables, useOnboardingMutation, } from "@/app/api/mutations/useOnboardingMutation"; import { DoclingHealthBanner, useDoclingHealth } from "@/components/docling-health-banner"; import IBMLogo from "@/components/logo/ibm-logo"; import OllamaLogo from "@/components/logo/ollama-logo"; import OpenAILogo from "@/components/logo/openai-logo"; import { ProtectedRoute } from "@/components/protected-route"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardFooter, CardHeader, } from "@/components/ui/card"; import { DotPattern } from "@/components/ui/dot-pattern"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; import { useGetSettingsQuery } from "../api/queries/useGetSettingsQuery"; import { IBMOnboarding } from "./components/ibm-onboarding"; import { OllamaOnboarding } from "./components/ollama-onboarding"; import { OpenAIOnboarding } from "./components/openai-onboarding"; function OnboardingPage() { const { data: settingsDb, isLoading: isSettingsLoading } = useGetSettingsQuery(); const { isHealthy: isDoclingHealthy } = useDoclingHealth(); const redirect = "/"; const router = useRouter(); // Redirect if already authenticated or in no-auth mode useEffect(() => { if (!isSettingsLoading && settingsDb && settingsDb.edited) { router.push(redirect); } }, [isSettingsLoading, settingsDb, router]); const [modelProvider, setModelProvider] = useState("openai"); const [sampleDataset, setSampleDataset] = useState(true); const handleSetModelProvider = (provider: string) => { setModelProvider(provider); setSettings({ model_provider: provider, embedding_model: "", llm_model: "", }); }; const [settings, setSettings] = useState({ model_provider: modelProvider, embedding_model: "", llm_model: "", }); // Mutations const onboardingMutation = useOnboardingMutation({ onSuccess: (data) => { console.log("Onboarding completed successfully", data); router.push(redirect); }, onError: (error) => { toast.error("Failed to complete onboarding", { description: error.message, }); }, }); const handleComplete = () => { if ( !settings.model_provider || !settings.llm_model || !settings.embedding_model ) { toast.error("Please complete all required fields"); return; } // Prepare onboarding data const onboardingData: OnboardingVariables = { model_provider: settings.model_provider, llm_model: settings.llm_model, embedding_model: settings.embedding_model, sample_data: sampleDataset, }; // Add API key if available if (settings.api_key) { onboardingData.api_key = settings.api_key; } // Add endpoint if available if (settings.endpoint) { onboardingData.endpoint = settings.endpoint; } // Add project_id if available if (settings.project_id) { onboardingData.project_id = settings.project_id; } onboardingMutation.mutate(onboardingData); }; const isComplete = !!settings.llm_model && !!settings.embedding_model && isDoclingHealthy; return (

Connect a model provider

OpenAI IBM watsonx.ai Ollama
{!isComplete && ( {!!settings.llm_model && !!settings.embedding_model && !isDoclingHealthy ? "docling-serve must be running to continue" : "Please fill in all required fields"} )}
); } export default function ProtectedOnboardingPage() { return ( Loading onboarding...}> ); }