工具使用

This commit is contained in:
Sirius
2026-08-06 14:14:09 +08:00
parent d5eb882dfe
commit e236721db1
11 changed files with 745 additions and 73 deletions
+19 -11
View File
@@ -459,7 +459,6 @@ export async function registerResponseRoutes(
});
app.post("/v1/responses", async (request, reply) => {
if (coordinator.busy) return sendBusy(reply);
if (!installation.installed) {
return reply.status(503).send(openAIError(
"Command Code CLI is not installed",
@@ -494,12 +493,14 @@ export async function registerResponseRoutes(
));
}
const abortController = coordinator.begin();
if (!abortController) return sendBusy(reply);
const lease = coordinator.begin();
if (!lease) return sendBusy(reply);
const { controller: abortController } = lease;
let responseCompleted = false;
let acquired = false;
const cancelOnDisconnect = () => {
if (!responseCompleted) abortController.abort("client disconnected");
if (!responseCompleted) coordinator.cancel(abortController, "client disconnected");
};
request.raw.once("aborted", cancelOnDisconnect);
reply.raw.once("close", cancelOnDisconnect);
@@ -520,17 +521,23 @@ export async function registerResponseRoutes(
let writer: ResponsesSseWriter | undefined;
try {
if (parsed.stream) {
writer = startSse(reply, messageId);
writer.begin(initialResponse);
}
if (request.raw.aborted || reply.raw.destroyed) cancelOnDisconnect();
acquired = await lease.ready;
if (!acquired) {
responseCompleted = true;
return reply;
}
const chain = parsed.previous_response_id
? await store.loadChain(parsed.previous_response_id)
: [];
const prompt = buildResponsesPrompt(parsed, chain, inputItems);
const deadline = Date.now() + config.timeout_seconds * 1000;
if (parsed.stream) {
writer = startSse(reply, messageId);
writer.begin(initialResponse);
}
const execution = await executeResponse({
config,
cliModel: model.cli_model,
@@ -609,6 +616,7 @@ export async function registerResponseRoutes(
} finally {
request.raw.off("aborted", cancelOnDisconnect);
reply.raw.off("close", cancelOnDisconnect);
if (!acquired) coordinator.cancel(abortController, "request ended before execution");
coordinator.finish(abortController);
}
});
@@ -1082,8 +1090,8 @@ function sendRouteError(reply: FastifyReply, error: unknown) {
function sendBusy(reply: FastifyReply) {
return reply.status(429).send(openAIError(
"Another Command Code request is already running",
"busy",
"Command Code request queue is full",
"queue_full",
"server_error",
));
}