@jeffreycao/copilot-api 1.9.8 → 1.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +1 -1
- package/dist/{server-D4FT8suK.js → server-BG69Fgym.js} +34 -5
- package/dist/server-BG69Fgym.js.map +1 -0
- package/dist/{start-BCBe4icv.js → start-CpqH2Ekm.js} +2 -2
- package/dist/{start-BCBe4icv.js.map → start-CpqH2Ekm.js.map} +1 -1
- package/package.json +1 -1
- package/dist/server-D4FT8suK.js.map +0 -1
package/dist/main.js
CHANGED
|
@@ -44,7 +44,7 @@ bindElectronFetch();
|
|
|
44
44
|
const { auth } = await import("./auth-CWEhhJYn.js");
|
|
45
45
|
const { checkUsage } = await import("./check-usage-B5yr4fpk.js");
|
|
46
46
|
const { debug } = await import("./debug-DcC7ZPH0.js");
|
|
47
|
-
const { start } = await import("./start-
|
|
47
|
+
const { start } = await import("./start-CpqH2Ekm.js");
|
|
48
48
|
const main = defineCommand({
|
|
49
49
|
meta: {
|
|
50
50
|
name: "copilot-api",
|
|
@@ -1496,7 +1496,7 @@ function mapContent(content, options = {}) {
|
|
|
1496
1496
|
});
|
|
1497
1497
|
break;
|
|
1498
1498
|
}
|
|
1499
|
-
if (contentParts.length === 0) return
|
|
1499
|
+
if (contentParts.length === 0) return "";
|
|
1500
1500
|
return contentParts;
|
|
1501
1501
|
}
|
|
1502
1502
|
function createDocumentTextPart() {
|
|
@@ -3227,9 +3227,13 @@ function closeThinkingBlockIfOpen(state$1, events$1) {
|
|
|
3227
3227
|
|
|
3228
3228
|
//#endregion
|
|
3229
3229
|
//#region src/routes/messages/api-flows.ts
|
|
3230
|
+
const COPILOT_CONTEXT_CACHE_SYSTEM_MARKER_LIMIT = 2;
|
|
3231
|
+
const COPILOT_CONTEXT_CACHE_NON_SYSTEM_MARKER_LIMIT = 2;
|
|
3232
|
+
const COPILOT_CONTEXT_CACHE_CONTROL = { type: "ephemeral" };
|
|
3230
3233
|
const handleWithChatCompletions = async (c, anthropicPayload, options) => {
|
|
3231
3234
|
const { logger: logger$7, subagentMarker, requestId, sessionId, compactType } = options;
|
|
3232
3235
|
const openAIPayload = translateToOpenAI(anthropicPayload);
|
|
3236
|
+
prepareCopilotChatCompletionsPayload(openAIPayload);
|
|
3233
3237
|
const recordUsage = createCopilotUsageRecorder({
|
|
3234
3238
|
endpoint: "chat_completions",
|
|
3235
3239
|
fallbackSessionId: sessionId,
|
|
@@ -3401,6 +3405,26 @@ const handleWithMessagesApi = async (c, anthropicPayload, options) => {
|
|
|
3401
3405
|
recordUsage(normalizeAnthropicUsage(response.usage));
|
|
3402
3406
|
return c.json(response);
|
|
3403
3407
|
};
|
|
3408
|
+
const prepareCopilotChatCompletionsPayload = (payload) => {
|
|
3409
|
+
applyCopilotContextCache(payload);
|
|
3410
|
+
};
|
|
3411
|
+
const applyCopilotContextCache = (payload) => {
|
|
3412
|
+
const messageIndexes = selectCopilotContextCacheMessageIndexes(payload.messages);
|
|
3413
|
+
for (const messageIndex of messageIndexes) {
|
|
3414
|
+
const message = payload.messages[messageIndex];
|
|
3415
|
+
message.copilot_cache_control = { ...COPILOT_CONTEXT_CACHE_CONTROL };
|
|
3416
|
+
}
|
|
3417
|
+
};
|
|
3418
|
+
const selectCopilotContextCacheMessageIndexes = (messages) => {
|
|
3419
|
+
const systemIndexes = messages.flatMap((message, index) => message.role === "system" && isCopilotContextCacheEligible(message) ? [index] : []).slice(0, COPILOT_CONTEXT_CACHE_SYSTEM_MARKER_LIMIT);
|
|
3420
|
+
const reverseNonSystemIndexes = messages.flatMap((message, index) => message.role !== "system" && isCopilotContextCacheEligible(message) ? [index] : []).reverse().slice(0, COPILOT_CONTEXT_CACHE_NON_SYSTEM_MARKER_LIMIT);
|
|
3421
|
+
return uniqueIndexes$1([...systemIndexes, ...reverseNonSystemIndexes]).sort((a, b) => a - b);
|
|
3422
|
+
};
|
|
3423
|
+
const isCopilotContextCacheEligible = (message) => {
|
|
3424
|
+
if (typeof message.content === "string") return message.content.length > 0;
|
|
3425
|
+
return Array.isArray(message.content) && message.content.length > 0;
|
|
3426
|
+
};
|
|
3427
|
+
const uniqueIndexes$1 = (indexes) => [...new Set(indexes)];
|
|
3404
3428
|
const isNonStreaming = (response) => Object.hasOwn(response, "choices");
|
|
3405
3429
|
const isAsyncIterable$1 = (value) => Boolean(value) && typeof value[Symbol.asyncIterator] === "function";
|
|
3406
3430
|
const createCopilotUsageRecorder = (options) => createCopilotTokenUsageRecorder({
|
|
@@ -3469,6 +3493,11 @@ const parseSubagentMarkerFromSystemReminder = (text) => {
|
|
|
3469
3493
|
//#endregion
|
|
3470
3494
|
//#region src/routes/messages/handler.ts
|
|
3471
3495
|
const logger$5 = createHandlerLogger("messages-handler");
|
|
3496
|
+
const messagesFlowHandlers = {
|
|
3497
|
+
handleWithChatCompletions,
|
|
3498
|
+
handleWithMessagesApi,
|
|
3499
|
+
handleWithResponsesApi
|
|
3500
|
+
};
|
|
3472
3501
|
async function handleCompletion(c) {
|
|
3473
3502
|
await checkRateLimit(state);
|
|
3474
3503
|
const anthropicPayload = await c.req.json();
|
|
@@ -3491,7 +3520,7 @@ async function handleCompletion(c) {
|
|
|
3491
3520
|
if (state.manualApprove) await awaitApproval();
|
|
3492
3521
|
const selectedModel = findEndpointModel(anthropicPayload.model);
|
|
3493
3522
|
anthropicPayload.model = selectedModel?.id ?? anthropicPayload.model;
|
|
3494
|
-
if (shouldUseMessagesApi(selectedModel)) return await handleWithMessagesApi(c, anthropicPayload, {
|
|
3523
|
+
if (shouldUseMessagesApi(selectedModel)) return await messagesFlowHandlers.handleWithMessagesApi(c, anthropicPayload, {
|
|
3495
3524
|
anthropicBetaHeader: anthropicBeta,
|
|
3496
3525
|
subagentMarker,
|
|
3497
3526
|
selectedModel,
|
|
@@ -3500,7 +3529,7 @@ async function handleCompletion(c) {
|
|
|
3500
3529
|
compactType,
|
|
3501
3530
|
logger: logger$5
|
|
3502
3531
|
});
|
|
3503
|
-
if (shouldUseResponsesApi(selectedModel)) return await handleWithResponsesApi(c, anthropicPayload, {
|
|
3532
|
+
if (shouldUseResponsesApi(selectedModel)) return await messagesFlowHandlers.handleWithResponsesApi(c, anthropicPayload, {
|
|
3504
3533
|
subagentMarker,
|
|
3505
3534
|
selectedModel,
|
|
3506
3535
|
requestId,
|
|
@@ -3508,7 +3537,7 @@ async function handleCompletion(c) {
|
|
|
3508
3537
|
compactType,
|
|
3509
3538
|
logger: logger$5
|
|
3510
3539
|
});
|
|
3511
|
-
return await handleWithChatCompletions(c, anthropicPayload, {
|
|
3540
|
+
return await messagesFlowHandlers.handleWithChatCompletions(c, anthropicPayload, {
|
|
3512
3541
|
subagentMarker,
|
|
3513
3542
|
requestId,
|
|
3514
3543
|
sessionId,
|
|
@@ -4310,4 +4339,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
|
|
|
4310
4339
|
|
|
4311
4340
|
//#endregion
|
|
4312
4341
|
export { server };
|
|
4313
|
-
//# sourceMappingURL=server-
|
|
4342
|
+
//# sourceMappingURL=server-BG69Fgym.js.map
|