'use client'; import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { MessageSquare, Settings, Server, Moon, Sun, PanelLeftClose, PanelLeftOpen } from "lucide-react"; import { ChatInput } from "@/components/chat/chat-input"; import { ChatMessage } from "@/components/chat/chat-message"; import { SystemPanel } from "@/components/chat/system-panel"; import { PromptGeneratorDialog } from "@/components/chat/prompt-generator"; import { useChat } from "@/hooks/use-chat"; import { useLocalModels } from "@/hooks/use-local-models"; import { useState, useEffect, useRef } from "react"; import { useTheme } from "next-themes"; import { ImperativePanelHandle } from "react-resizable-panels"; // @ts-ignore import defaultFormatPrompt from "@/data/prompts/default-format.md"; export default function ChatPage() { const { messages, sendMessage, isLoading, stop } = useChat(); const { models } = useLocalModels(); const { theme, setTheme } = useTheme(); const [selectedModel, setSelectedModel] = useState(""); // Initialize with default format prompt const [systemPrompt, setSystemPrompt] = useState(defaultFormatPrompt || "Você é um assistente útil e prestativo."); const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false); const sidebarRef = useRef(null); // Auto-select first model useEffect(() => { if (models.length > 0 && !selectedModel) { setSelectedModel(models[0].name); } }, [models, selectedModel]); const handleSend = (content: string) => { if (!selectedModel) return; sendMessage(content, selectedModel, systemPrompt); }; const toggleSidebar = () => { const panel = sidebarRef.current; if (panel) { if (isSidebarCollapsed) { panel.expand(); } else { panel.collapse(); } } }; return (
{/* Left Sidebar (Nav) */} setIsSidebarCollapsed(true)} onExpand={() => setIsSidebarCollapsed(false)} className="border-r flex flex-col items-center py-4 gap-4 bg-muted/20 min-w-[60px]" >
{/* Main Chat Area */}
{/* Header */}
{isSidebarCollapsed && ( )} {!isSidebarCollapsed && ( )}
Chat
{/* Messages */}
{messages.length === 0 ? (

Inicie uma conversa com {selectedModel}

) : (
{messages.map((msg, i) => ( ))} {isLoading && (
Gerando resposta...
)}
)}
{/* Input */}
{/* Right Sidebar (Settings & Monitor) */}
Parâmetros Sistema