feat: extract getChatStreamSettings

This commit is contained in:
Yu Chao 2025-04-28 12:11:37 +08:00
parent 1e83a40335
commit 1610c2ff4e

View File

@ -53,7 +53,7 @@ export async function sendMessage(
} = {}, } = {},
options: { abortSignal?: AbortSignal } = {}, options: { abortSignal?: AbortSignal } = {},
) { ) {
if (content !== undefined) { if (content != null) {
appendMessage({ appendMessage({
id: nanoid(), id: nanoid(),
threadId: THREAD_ID, threadId: THREAD_ID,
@ -63,11 +63,55 @@ export async function sendMessage(
}); });
} }
const settings = getChatStreamSettings();
const stream = chatStream(
content ?? "[REPLAY]",
{
thread_id: THREAD_ID,
interrupt_feedback: interruptFeedback,
auto_accepted_plan: settings.autoAcceptedPlan,
max_plan_iterations: settings.maxPlanIterations,
max_step_num: settings.maxStepNum,
mcp_settings: settings.mcpSettings,
},
options,
);
setResponding(true); setResponding(true);
try { try {
const settings = useSettingsStore.getState(); for await (const event of stream) {
const generalSettings = settings.general; const { type, data } = event;
const mcpServers = settings.mcp.servers.filter((server) => server.enabled); const messageId = data.id;
let message: Message | undefined;
if (type === "tool_call_result") {
message = findMessageByToolCallId(data.tool_call_id);
} else if (!existsMessage(messageId)) {
message = {
id: messageId,
threadId: data.thread_id,
agent: data.agent,
role: data.role,
content: "",
contentChunks: [],
isStreaming: true,
interruptFeedback,
};
appendMessage(message);
}
message ??= getMessage(messageId);
if (message) {
message = mergeMessage(message, event);
updateMessage(message);
}
}
} catch {
setOngoingResearchId(null);
} finally {
setResponding(false);
}
}
function getChatStreamSettings() {
let mcpSettings: let mcpSettings:
| { | {
servers: Record< servers: Record<
@ -79,6 +123,8 @@ export async function sendMessage(
>; >;
} }
| undefined = undefined; | undefined = undefined;
const settings = useSettingsStore.getState();
const mcpServers = settings.mcp.servers.filter((server) => server.enabled);
if (mcpServers.length > 0) { if (mcpServers.length > 0) {
mcpSettings = { mcpSettings = {
servers: mcpServers.reduce((acc, cur) => { servers: mcpServers.reduce((acc, cur) => {
@ -111,51 +157,13 @@ export async function sendMessage(
}, {}), }, {}),
}; };
} }
const stream = chatStream( return {
content ?? "[REPLAY]", ...settings.general,
{ mcpSettings,
thread_id: THREAD_ID,
auto_accepted_plan: generalSettings.autoAcceptedPlan,
max_plan_iterations: generalSettings.maxPlanIterations,
max_step_num: generalSettings.maxStepNum,
interrupt_feedback: interruptFeedback,
mcp_settings: mcpSettings,
},
options,
);
for await (const event of stream) {
const { type, data } = event;
const messageId = data.id;
let message: Message | undefined;
if (type === "tool_call_result") {
message = findMessageByToolCallId(data.tool_call_id);
} else if (!existsMessage(messageId)) {
message = {
id: messageId,
threadId: data.thread_id,
agent: data.agent,
role: data.role,
content: "",
contentChunks: [],
isStreaming: true,
interruptFeedback,
}; };
appendMessage(message);
}
message ??= getMessage(messageId);
if (message) {
message = mergeMessage(message, event);
updateMessage(message);
}
}
} catch {
setOngoingResearchId(null);
} finally {
setResponding(false);
}
} }
function setResponding(value: boolean) { function setResponding(value: boolean) {
useStore.setState({ responding: value }); useStore.setState({ responding: value });
} }