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 } = {},
) {
if (content !== undefined) {
if (content != null) {
appendMessage({
id: nanoid(),
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);
try {
const settings = useSettingsStore.getState();
const generalSettings = settings.general;
const mcpServers = settings.mcp.servers.filter((server) => server.enabled);
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 getChatStreamSettings() {
let mcpSettings:
| {
servers: Record<
@ -79,6 +123,8 @@ export async function sendMessage(
>;
}
| undefined = undefined;
const settings = useSettingsStore.getState();
const mcpServers = settings.mcp.servers.filter((server) => server.enabled);
if (mcpServers.length > 0) {
mcpSettings = {
servers: mcpServers.reduce((acc, cur) => {
@ -111,51 +157,13 @@ export async function sendMessage(
}, {}),
};
}
const stream = chatStream(
content ?? "[REPLAY]",
{
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,
return {
...settings.general,
mcpSettings,
};
appendMessage(message);
}
message ??= getMessage(messageId);
if (message) {
message = mergeMessage(message, event);
updateMessage(message);
}
}
} catch {
setOngoingResearchId(null);
} finally {
setResponding(false);
}
}
function setResponding(value: boolean) {
useStore.setState({ responding: value });
}