diff --git a/app/learn/chat/page.tsx b/app/learn/chat/page.tsx index 4f9741e..b4b549f 100644 --- a/app/learn/chat/page.tsx +++ b/app/learn/chat/page.tsx @@ -24,11 +24,18 @@ import remarkMath from "remark-math"; import rehypeKatex from "rehype-katex"; import "katex/dist/katex.min.css"; -// Define message structure for chat interface Message { - id: number; - content: string; // The actual message text - sender: "user" | "ai"; + role: 'user' | 'assistant'; + content: string; + options?: string[]; +} + +interface AgentResponse { + status: string; + explanation: string; + subtopics: string[]; + prerequisites: string[]; + summary: string; } const Chat: React.FC = () => { @@ -72,7 +79,7 @@ const Chat: React.FC = () => { parsedResponse.response || parsedResponse.summary || "No content available"; - setMessages([{ id: Date.now(), content: moduleContent, sender: "ai" }]); + setMessages([{ role: "assistant", content: moduleContent }]); localStorage.removeItem("chatResponse"); } }, []); @@ -84,9 +91,8 @@ const Chat: React.FC = () => { if (!input.trim()) return; const userMessage: Message = { - id: Date.now(), + role: "user", content: input, - sender: "user", }; setMessages((prev) => [...prev, userMessage]); @@ -96,10 +102,9 @@ const Chat: React.FC = () => { try { // TODO: Add error handling for network issues const response = await axios.post( - "http://127.0.0.1:5000/process-content", + "http://127.0.0.1:5000/process-interaction", { - notes: input, - files: [], // Future enhancement: add file upload support + input: input, } ); @@ -108,12 +113,13 @@ const Chat: React.FC = () => { response.data.response || response.data.summary || response.data.learning_plan || + response.data.feedback || "Sorry, I couldn't generate a response"; const aiMessage: Message = { - id: Date.now() + 1, + role: "assistant", content: aiContent, - sender: "ai", + options: response.data.subtopics }; setMessages((prev) => [...prev, aiMessage]); @@ -121,9 +127,8 @@ const Chat: React.FC = () => { console.error("Error:", error); const errorMessage: Message = { - id: Date.now() + 1, + role: "assistant", content: "Oops! Something went wrong. Please try again.", - sender: "ai", }; setMessages((prev) => [...prev, errorMessage]); @@ -236,10 +241,9 @@ const Chat: React.FC = () => { setIsLoading(true); try { const response = await axios.post( - "http://127.0.0.1:5000/process-content", + "http://127.0.0.1:5000/process-interaction", { - notes: `Please explain this more deeply: ${content}`, - files: [], + input: `Please explain this more deeply: ${content}`, } ); @@ -249,9 +253,9 @@ const Chat: React.FC = () => { "I couldn't generate a deeper explanation"; const aiMessage: Message = { - id: Date.now(), + role: "assistant", content: aiContent, - sender: "ai", + options: response.data.subtopics }; setMessages((prev) => [...prev, aiMessage]); @@ -260,9 +264,8 @@ const Chat: React.FC = () => { setMessages((prev) => [ ...prev, { - id: Date.now(), + role: "assistant", content: "Sorry, I couldn't generate a deeper explanation.", - sender: "ai", }, ]); } finally { @@ -274,10 +277,9 @@ const Chat: React.FC = () => { setIsLoading(true); try { const response = await axios.post( - "http://127.0.0.1:5000/process-content", + "http://127.0.0.1:5000/process-interaction", { - notes: `Please create a quick test to verify understanding of this content: ${content}`, - files: [], + input: `Please create a quick test to verify understanding of this content: ${content}`, } ); @@ -287,9 +289,9 @@ const Chat: React.FC = () => { "I couldn't generate a test"; const aiMessage: Message = { - id: Date.now(), + role: "assistant", content: aiContent, - sender: "ai", + options: response.data.subtopics }; setMessages((prev) => [...prev, aiMessage]); @@ -298,9 +300,8 @@ const Chat: React.FC = () => { setMessages((prev) => [ ...prev, { - id: Date.now(), + role: "assistant", content: "Sorry, I couldn't generate a test.", - sender: "ai", }, ]); } finally { @@ -308,14 +309,20 @@ const Chat: React.FC = () => { } }; + const handleOptionClick = async (option: string) => { + setInput(option); + const fakeEvent = { preventDefault: () => {} } as React.FormEvent; + await handleSubmit(fakeEvent); + }; + const handleInteractiveQuestions = async (content: string) => { setIsLoading(true); + console.log("handling interactive question"); try { const response = await axios.post( - "http://127.0.0.1:5000/process-content", + "http://127.0.0.1:5000/process-interaction", { - notes: `Please create interactive questions to verify understanding of this content: ${content}`, - files: [], + input: `Generate a quiz about the following content:\n\n${content}` } ); @@ -325,9 +332,9 @@ const Chat: React.FC = () => { "I couldn't generate interactive questions"; const aiMessage: Message = { - id: Date.now(), + role: "assistant", content: aiContent, - sender: "ai", + options: response.data.subtopics }; setMessages((prev) => [...prev, aiMessage]); @@ -336,9 +343,8 @@ const Chat: React.FC = () => { setMessages((prev) => [ ...prev, { - id: Date.now(), + role: "assistant", content: "Sorry, I couldn't generate interactive questions.", - sender: "ai", }, ]); } finally { @@ -363,14 +369,13 @@ const Chat: React.FC = () => { {messages.map((message) => ( { >
- {message.sender === "ai" ? ( + {message.role === "assistant" ? ( <> { > {message.content} + {message.options && message.options.length > 0 && ( +
+ {message.options.map((option, i) => ( + + ))} +
+ )}