diff --git a/app/api/chat/route.ts b/app/api/chat/route.ts index 53dcd29..e5caf2c 100644 --- a/app/api/chat/route.ts +++ b/app/api/chat/route.ts @@ -13,8 +13,9 @@ export const maxDuration = 30; const guide = readFileSync(resolve('./app/api/chat/xml_guide.md'), 'utf8'); export async function POST(req: Request) { - const { messages } = await req.json(); + const body = await req.json(); + const { messages, data = {} } = body; // Read and escape the guide content const systemMessage = ` @@ -50,12 +51,22 @@ ${guide} """ `; - // Add system message if only user message is provided - const enhancedMessages = messages.length === 1 - ? [{ role: "system", content: systemMessage }, ...messages] + const lastMessage = messages[messages.length - 1]; + const formattedContent = ` +Current diagram XML: +"""xml +${data.xml || ''} +""" +User input: +"""md +${lastMessage.content} +"""`; - : messages; + let enhancedMessages = messages.length === 1 + ? [{ role: "system", content: systemMessage }, { ...lastMessage, content: formattedContent }] + : [...messages.slice(0, -1), { ...lastMessage, content: formattedContent }]; + console.log(enhancedMessages); const result = streamText({ // model: google("gemini-2.0-flash"), model: openai("gpt-4o"), diff --git a/components/chatPanel.tsx b/components/chatPanel.tsx index dc1838a..7f0b82b 100644 --- a/components/chatPanel.tsx +++ b/components/chatPanel.tsx @@ -47,7 +47,7 @@ export default function ChatPanel({ error, setInput, setMessages, - data, + append, } = useChat({ maxSteps: 5, async onToolCall({ toolCall }) { @@ -70,37 +70,24 @@ export default function ChatPanel({ if (messagesEndRef.current) { messagesEndRef.current.scrollIntoView({ behavior: "smooth" }); } - console.log("Data updated:", data); }, [messages]); const onFormSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (input.trim() && status !== "streaming") { try { - // Hide examples panel after sending a message - // Fetch chart data before setting input const chartXml = await onFetchChart(); - - // Now use the fetched data to set input - setInput( - ` - Current diagram XML: - """xml - ${chartXml} - """ - User input: - """md - ${input} - """ - ` - ); handleSubmit(e, { + data: { + xml: chartXml, + }, experimental_attachments: files, }); // Clear files after submission setFiles(undefined); + console.log("messages", messages); } catch (error) { console.error("Error fetching chart data:", error); }