Skip to content

Commit 916ee37

Browse files
committed
wip(chat-db): track the end point for the current message tree.
1 parent 6429a08 commit 916ee37

File tree

4 files changed

+62
-5
lines changed

4 files changed

+62
-5
lines changed

refact-agent/gui/src/components/MessageNode/MessageNode.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import React from "react";
1+
import React, { useEffect, useMemo } from "react";
22
import {
3+
chatDbMessageSliceActions,
34
CMessageNode,
45
isUserCMessageNode,
56
UserCMessageNode,
@@ -19,6 +20,7 @@ import { ArrowLeftIcon, ArrowRightIcon } from "@radix-ui/react-icons";
1920
import { PlainText } from "../ChatContent/PlainText";
2021
import { ContextFiles } from "../ChatContent/ContextFiles";
2122
import { GroupedDiffs } from "../ChatContent/DiffContent";
23+
import { useAppDispatch } from "../../hooks";
2224

2325
const ElementForNodeMessage: React.FC<{ message: ChatMessage }> = ({
2426
message,
@@ -57,6 +59,23 @@ const ElementForNodeMessage: React.FC<{ message: ChatMessage }> = ({
5759

5860
export type MessageNodeProps = { children?: CMessageNode };
5961
export const MessageNode: React.FC<MessageNodeProps> = ({ children }) => {
62+
const dispatch = useAppDispatch();
63+
64+
useEffect(() => {
65+
if (children?.children.length === 0) {
66+
const action = chatDbMessageSliceActions.setEnd({
67+
number: children.message.cmessage_num,
68+
alt: children.message.cmessage_alt,
69+
});
70+
dispatch(action);
71+
}
72+
}, [
73+
children?.children.length,
74+
children?.message.cmessage_num,
75+
children?.message.cmessage_alt,
76+
dispatch,
77+
]);
78+
6079
if (!children) return null;
6180
return (
6281
<>

refact-agent/gui/src/features/ChatDB/chatDbMessagesSlice.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ type InitialState = {
3434
messageList: CMessage[];
3535
loading: boolean;
3636
error: null | string;
37+
endNumber: number;
38+
endAlt: number;
3739
};
3840

3941
const createChatThread = (): CThreadDefault => {
@@ -52,6 +54,8 @@ const initialState: InitialState = {
5254
messageList: [],
5355
loading: false,
5456
error: null,
57+
endNumber: 0,
58+
endAlt: 0,
5559
};
5660

5761
function parseCMessageFromChatDBToCMessage(
@@ -98,6 +102,10 @@ export const chatDbMessageSlice = createSlice({
98102
});
99103
}
100104
},
105+
setEnd: (state, action: PayloadAction<{ number: number; alt: number }>) => {
106+
state.endNumber = action.payload.number;
107+
state.endAlt = action.payload.alt;
108+
},
101109
},
102110

103111
selectors: {

refact-agent/gui/src/services/refact/chatdb.ts

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import { createAsyncThunk } from "@reduxjs/toolkit/react";
22
import { AppDispatch, RootState } from "../../app/store";
3-
import { CHAT_DB_THREADS_SUB, CHAT_DB_MESSAGES_SUB } from "./consts";
3+
import {
4+
CHAT_DB_THREADS_SUB,
5+
CHAT_DB_MESSAGES_SUB,
6+
CHAT_DB_MESSAGES_UPDATE,
7+
} from "./consts";
48
import { consumeStream } from "../../features/Chat/Thread/utils";
59
import {
610
isCThreadSubResponseUpdate,
711
isCThreadSubResponseDelete,
812
isCMessageUpdateResponse,
13+
CMessage,
914
} from "./types";
1015
import { chatDbActions } from "../../features/ChatDB/chatDbSlice";
1116
import {
@@ -136,18 +141,20 @@ export const subscribeToThreadMessagesThunk = createAppAsyncThunk<
136141
if (!reader) return;
137142

138143
const onAbort = () => {
139-
// console.log("knowledge stream aborted");
144+
console.log("message stream aborted");
140145
};
141146

142147
const onChunk = (chunk: Record<string, unknown>) => {
143-
// console.log("cmessages chunks");
144-
// console.log({ chunk });
148+
console.log("cmessages chunks");
149+
console.log({ chunk });
145150
if (isCMessageUpdateResponse(chunk)) {
146151
const action = chatDbMessageSliceActions.updateMessage({
147152
threadId: cthreadId,
148153
message: chunk.cmessage_rec,
149154
});
150155
thunkApi.dispatch(action);
156+
} else {
157+
console.log("invalid chunk");
151158
}
152159
};
153160

@@ -160,6 +167,28 @@ export const subscribeToThreadMessagesThunk = createAppAsyncThunk<
160167
});
161168
});
162169

170+
// How does this add a context file ? or images ?
171+
export function updateCMessage(
172+
cmessages: CMessage[],
173+
port = 8001,
174+
apiKey?: string | null,
175+
) {
176+
const url = `http://127.0.0.1:${port}${CHAT_DB_MESSAGES_UPDATE}`;
177+
const headers = new Headers();
178+
headers.append("Content-Type", "application/json");
179+
if (apiKey) {
180+
headers.append("Authorization", `Bearer ${apiKey}`);
181+
}
182+
183+
return fetch(url, {
184+
method: "POST",
185+
headers,
186+
redirect: "follow",
187+
cache: "no-cache",
188+
body: JSON.stringify(cmessages),
189+
});
190+
}
191+
163192
// Types for the API
164193

165194
// export interface Chore {

refact-agent/gui/src/services/refact/consts.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,4 @@ export const KNOWLEDGE_CREATE_URL = "/v1/trajectory-save";
4343
// Chatdblinks
4444
export const CHAT_DB_THREADS_SUB = "/db_v1/cthreads-sub";
4545
export const CHAT_DB_MESSAGES_SUB = "/db_v1/cmessages-sub";
46+
export const CHAT_DB_MESSAGES_UPDATE = "/db_v1//cmessages-update";

0 commit comments

Comments
 (0)