Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ export const ChatContextManagerProvider: React.FC<{ children: React.ReactNode }>
...msg,
display: true,
sendToLLM: false,
isAncestor: true,
}));

// Append new ancestor messages to existing ones
Expand All @@ -198,6 +199,7 @@ export const ChatContextManagerProvider: React.FC<{ children: React.ReactNode }>
...msg,
display: true,
sendToLLM: false,
isAncestor: true,
}));

setAncestorMessages(newAncestorMessages);
Expand Down
1 change: 1 addition & 0 deletions ui/desktop/src/hooks/useChat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export const useChat = ({ setIsLoadingSession, setView, setPairChat }: UseChatAr
id: sessionDetails.session_id,
title: sessionDetails.metadata?.description || `ID: ${sessionDetails.session_id}`,
messages: sessionDetails.messages,
ancestorMessages: sessionDetails.ancestorMessages || [],
messageHistoryIndex: sessionDetails.messages.length,
recipeConfig: null, // Sessions don't have recipes by default
};
Expand Down
9 changes: 6 additions & 3 deletions ui/desktop/src/hooks/useChatEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ export const useChatEngine = ({
}: UseChatEngineProps) => {
const [lastInteractionTime, setLastInteractionTime] = useState<number>(Date.now());
const [sessionTokenCount, setSessionTokenCount] = useState<number>(0);
const [ancestorMessages, setAncestorMessages] = useState<Message[]>([]);
const [ancestorMessages, setAncestorMessages] = useState<Message[]>(
Array.isArray(chat.ancestorMessages) ? chat.ancestorMessages : []
);
const [sessionInputTokens, setSessionInputTokens] = useState<number>(0);
const [sessionOutputTokens, setSessionOutputTokens] = useState<number>(0);
const [localInputTokens, setLocalInputTokens] = useState<number>(0);
Expand Down Expand Up @@ -96,7 +98,7 @@ export const useChatEngine = ({
} = useMessageStream({
api: getApiUrl('/reply'),
id: chat.id,
initialMessages: chat.messages,
initialMessages: [...(chat.ancestorMessages || []), ...chat.messages],
body: { session_id: chat.id, session_working_dir: window.appConfig.get('GOOSE_WORKING_DIR') },
onFinish: async (_message, _reason) => {
stopPowerSaveBlocker();
Expand Down Expand Up @@ -377,7 +379,8 @@ export const useChatEngine = ({
}, [stop, messages, _setInput, setMessages, stopPowerSaveBlocker, enableLocalStorage]);

const filteredMessages = useMemo(() => {
return [...ancestorMessages, ...messages].filter((message) => message.display ?? true);
const allMessages = [...ancestorMessages, ...messages];
return allMessages.filter((message) => message.display ?? true);
}, [ancestorMessages, messages]);

// Generate command history from filtered messages
Expand Down
15 changes: 12 additions & 3 deletions ui/desktop/src/sessions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export interface SessionDetails {
session_id: string;
metadata: SessionMetadata;
messages: Message[];
ancestorMessages?: Message[];
}

/**
Expand Down Expand Up @@ -113,13 +114,21 @@ export async function fetchSessionDetails(sessionId: string): Promise<SessionDet
path: { session_id: sessionId },
});

const allMessages = response.data.messages.map((message) =>
convertApiMessageToFrontendMessage(message, true, true)
);

const ancestorMessages = allMessages.filter(msg => msg.isAncestor === true);
const regularMessages = allMessages.filter(msg => msg.isAncestor !== true);

const validAncestorMessages = Array.isArray(ancestorMessages) ? ancestorMessages : [];

// Convert the SessionHistoryResponse to a SessionDetails object
return {
session_id: response.data.sessionId,
metadata: ensureWorkingDir(response.data.metadata),
messages: response.data.messages.map((message) =>
convertApiMessageToFrontendMessage(message, true, true)
), // slight diffs between backend and frontend Message obj
messages: regularMessages,
ancestorMessages: validAncestorMessages,
};
} catch (error) {
console.error(`Error fetching session details for ${sessionId}:`, error);
Expand Down
1 change: 1 addition & 0 deletions ui/desktop/src/types/chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export interface ChatType {
title: string;
messageHistoryIndex: number;
messages: Message[];
ancestorMessages?: Message[];
recipeConfig?: Recipe | null; // Add recipe configuration to chat state
recipeParameters?: Record<string, string> | null; // Add recipe parameters to chat state
}
1 change: 1 addition & 0 deletions ui/desktop/src/types/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ export interface Message {
content: MessageContent[];
display?: boolean;
sendToLLM?: boolean;
isAncestor?: boolean;
}

// Helper functions to create messages
Expand Down
Loading