- Introduced a comprehensive README.md detailing the application, its architecture, and key features. - Implemented a local-first architecture with deep research capabilities, including query decomposition and parallel web scraping. - Added a reactive UI built with React and Next.js, featuring Tailwind CSS for styling and Zustand for state management. - Integrated a task scheduler for recurring tasks and system monitoring for real-time resource management. - Enhanced settings page with debug mode options and improved hardware dashboard loading states. - Updated chat interface to include debug data visualization and improved user experience during message streaming. - Removed unused favicon and updated application icons for better branding. - Improved navigation handling with non-blocking transitions and state management for setup completion.
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
'use client';
|
|
|
|
import { useHardware } from "@/hooks/use-hardware";
|
|
import { HardwareScan } from "@/components/setup/hardware-scan";
|
|
import { GpuSelector } from "@/components/setup/gpu-selector";
|
|
import { ModelSelector } from "@/components/setup/model-selector";
|
|
import { getRecommendation } from "@/lib/recommendation";
|
|
import { useRouter } from "next/navigation";
|
|
import { startTransition, useState } from "react";
|
|
|
|
export default function SetupPage() {
|
|
const { specs, loading, gpus } = useHardware();
|
|
const router = useRouter();
|
|
const [isNavigating, setIsNavigating] = useState(false);
|
|
|
|
const handleComplete = () => {
|
|
setIsNavigating(true);
|
|
// Save setup state if needed
|
|
localStorage.setItem("ollahub_setup_complete", "true");
|
|
|
|
// Usar startTransition para navegação não-bloqueante
|
|
startTransition(() => {
|
|
router.push("/chat");
|
|
});
|
|
};
|
|
|
|
return (
|
|
<main className="flex min-h-screen flex-col items-center justify-center p-4 bg-background text-foreground">
|
|
<div className="w-full max-w-2xl space-y-8 animate-in fade-in duration-700">
|
|
<div className="text-center space-y-2">
|
|
<h1 className="text-3xl font-bold tracking-tighter">Configuração Inicial</h1>
|
|
<p className="text-muted-foreground">Vamos preparar o ambiente ideal para você.</p>
|
|
</div>
|
|
|
|
<HardwareScan specs={specs} loading={loading} />
|
|
|
|
{!loading && specs && gpus.length > 0 && (
|
|
<div className="animate-in slide-in-from-bottom-8 duration-700 delay-200 fill-mode-backwards">
|
|
<GpuSelector gpus={gpus} />
|
|
</div>
|
|
)}
|
|
|
|
{!loading && specs && (
|
|
<div className="animate-in slide-in-from-bottom-8 duration-700 delay-300 fill-mode-backwards">
|
|
<ModelSelector
|
|
recommendation={getRecommendation(specs)}
|
|
onComplete={handleComplete}
|
|
/>
|
|
</div>
|
|
)}
|
|
</div>
|
|
</main>
|
|
);
|
|
}
|
|
|