import { JsonInput, Tabs, Textarea } from "@mantine/core"; import { trpc } from "../../../trpc/client"; import type { Message as UIMessage } from "ai"; import { useEffect } from "react"; import { defaultParameters, defaultSystemPrompt, useStore, } from "../../../state"; import { usePageContext } from "vike-react/usePageContext"; import { useData } from "vike-react/useData"; import type { Data } from "./+data"; import type { ConversationsId } from "../../../database/generated/public/Conversations"; export default function ChatPage() { const pageContext = usePageContext(); const conversationId = Number(pageContext.routeParams.id) as ConversationsId; const conversationTitle = useStore((state) => state.conversationTitle); const messages = useStore((state) => state.messages); const message = useStore((state) => state.message); const systemPrompt = useStore((state) => state.systemPrompt); const parameters = useStore((state) => state.parameters); const loading = useStore((state) => state.loading); const setConversationId = useStore((state) => state.setConversationId); const setConversationTitle = useStore((state) => state.setConversationTitle); const setMessages = useStore((state) => state.setMessages); const setMessage = useStore((state) => state.setMessage); const setSystemPrompt = useStore((state) => state.setSystemPrompt); const setParameters = useStore((state) => state.setParameters); const setLoading = useStore((state) => state.setLoading); const conversation = useData(); useEffect(() => { setConversationId(conversationId); }, [conversationId, setConversationId]); useEffect(() => { if (conversation?.id && conversation?.title) { setConversationId(conversation.id); setConversationTitle(conversation.title); } }, [ conversation?.id, conversation?.title, setConversationId, setConversationTitle, ]); return ( <>
Conversation #{conversationId} - { setConversationTitle(e.target.value); }} onBlur={(e) => { trpc.chat.updateConversationTitle.mutate({ id: conversationId, title: e.target.value, }); }} />
Message System Prompt Parameters