fix: Corrected a bug where the current XML file was not attached to the user message.

This commit is contained in:
dayuan.jiang
2025-03-24 02:38:27 +00:00
parent 05d1adc179
commit 19dacfad30
2 changed files with 21 additions and 23 deletions

View File

@@ -13,8 +13,9 @@ export const maxDuration = 30;
const guide = readFileSync(resolve('./app/api/chat/xml_guide.md'), 'utf8'); const guide = readFileSync(resolve('./app/api/chat/xml_guide.md'), 'utf8');
export async function POST(req: Request) { 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 // Read and escape the guide content
const systemMessage = ` const systemMessage = `
@@ -50,12 +51,22 @@ ${guide}
""" """
`; `;
// Add system message if only user message is provided const lastMessage = messages[messages.length - 1];
const enhancedMessages = messages.length === 1 const formattedContent = `
? [{ role: "system", content: systemMessage }, ...messages] 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({ const result = streamText({
// model: google("gemini-2.0-flash"), // model: google("gemini-2.0-flash"),
model: openai("gpt-4o"), model: openai("gpt-4o"),

View File

@@ -47,7 +47,7 @@ export default function ChatPanel({
error, error,
setInput, setInput,
setMessages, setMessages,
data, append,
} = useChat({ } = useChat({
maxSteps: 5, maxSteps: 5,
async onToolCall({ toolCall }) { async onToolCall({ toolCall }) {
@@ -70,37 +70,24 @@ export default function ChatPanel({
if (messagesEndRef.current) { if (messagesEndRef.current) {
messagesEndRef.current.scrollIntoView({ behavior: "smooth" }); messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
} }
console.log("Data updated:", data);
}, [messages]); }, [messages]);
const onFormSubmit = async (e: React.FormEvent<HTMLFormElement>) => { const onFormSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault(); e.preventDefault();
if (input.trim() && status !== "streaming") { if (input.trim() && status !== "streaming") {
try { try {
// Hide examples panel after sending a message
// Fetch chart data before setting input // Fetch chart data before setting input
const chartXml = await onFetchChart(); const chartXml = await onFetchChart();
// Now use the fetched data to set input
setInput(
`
Current diagram XML:
"""xml
${chartXml}
"""
User input:
"""md
${input}
"""
`
);
handleSubmit(e, { handleSubmit(e, {
data: {
xml: chartXml,
},
experimental_attachments: files, experimental_attachments: files,
}); });
// Clear files after submission // Clear files after submission
setFiles(undefined); setFiles(undefined);
console.log("messages", messages);
} catch (error) { } catch (error) {
console.error("Error fetching chart data:", error); console.error("Error fetching chart data:", error);
} }