diff options
Diffstat (limited to 'makima/frontend')
| -rw-r--r-- | makima/frontend/src/components/files/CliInput.tsx | 17 | ||||
| -rw-r--r-- | makima/frontend/src/lib/api.ts | 12 |
2 files changed, 25 insertions, 4 deletions
diff --git a/makima/frontend/src/components/files/CliInput.tsx b/makima/frontend/src/components/files/CliInput.tsx index 0ac840a..c1e6b6d 100644 --- a/makima/frontend/src/components/files/CliInput.tsx +++ b/makima/frontend/src/components/files/CliInput.tsx @@ -1,5 +1,5 @@ import { useState, useCallback, useRef, useEffect } from "react"; -import { chatWithFile, type BodyElement, type LlmModel } from "../../lib/api"; +import { chatWithFile, type BodyElement, type LlmModel, type ChatMessage } from "../../lib/api"; import { SimpleMarkdown } from "../SimpleMarkdown"; interface CliInputProps { @@ -26,6 +26,8 @@ export function CliInput({ fileId, onUpdate }: CliInputProps) { const [messages, setMessages] = useState<Message[]>([]); const [expanded, setExpanded] = useState(false); const [model, setModel] = useState<LlmModel>("claude-opus"); + // Track conversation history for context continuity + const [conversationHistory, setConversationHistory] = useState<ChatMessage[]>([]); const inputRef = useRef<HTMLInputElement>(null); const messagesRef = useRef<HTMLDivElement>(null); @@ -55,7 +57,8 @@ export function CliInput({ fileId, onUpdate }: CliInputProps) { setLoading(true); try { - const response = await chatWithFile(fileId, userMessage, model); + // Send request with conversation history for context + const response = await chatWithFile(fileId, userMessage, model, conversationHistory); // Add assistant response const assistantMsgId = (Date.now() + 1).toString(); @@ -73,6 +76,13 @@ export function CliInput({ fileId, onUpdate }: CliInputProps) { }, ]); + // Update conversation history for next request + setConversationHistory((prev) => [ + ...prev, + { role: "user", content: userMessage }, + { role: "assistant", content: response.response }, + ]); + // Update parent with new body/summary onUpdate(response.updatedBody, response.updatedSummary); } catch (err) { @@ -90,11 +100,12 @@ export function CliInput({ fileId, onUpdate }: CliInputProps) { inputRef.current?.focus(); } }, - [input, loading, fileId, model, onUpdate] + [input, loading, fileId, model, onUpdate, conversationHistory] ); const clearMessages = useCallback(() => { setMessages([]); + setConversationHistory([]); }, []); return ( diff --git a/makima/frontend/src/lib/api.ts b/makima/frontend/src/lib/api.ts index 931981b..eb8d908 100644 --- a/makima/frontend/src/lib/api.ts +++ b/makima/frontend/src/lib/api.ts @@ -136,9 +136,15 @@ export class VersionConflictError extends Error { export type LlmModel = "claude-sonnet" | "claude-opus" | "groq"; // Chat API types +export interface ChatMessage { + role: "user" | "assistant"; + content: string; +} + export interface ChatRequest { message: string; model?: LlmModel; + history?: ChatMessage[]; } export interface ToolCallInfo { @@ -219,12 +225,16 @@ export async function deleteFile(id: string): Promise<void> { export async function chatWithFile( id: string, message: string, - model?: LlmModel + model?: LlmModel, + history?: ChatMessage[] ): Promise<ChatResponse> { const body: ChatRequest = { message }; if (model) { body.model = model; } + if (history && history.length > 0) { + body.history = history; + } const res = await fetch(`${API_BASE}/api/v1/files/${id}/chat`, { method: "POST", headers: { "Content-Type": "application/json" }, |
