工具使用
This commit is contained in:
+19
-11
@@ -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",
|
||||
));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user