@jeffreycao/copilot-api 1.9.7 → 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/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/main.js +1 -1
- package/dist/{server-Bpu_LXg5.js → server-BG69Fgym.js} +34 -4
- package/dist/server-BG69Fgym.js.map +1 -0
- package/dist/{start-BgL68ZLT.js → start-CpqH2Ekm.js} +2 -2
- package/dist/{start-BgL68ZLT.js.map → start-CpqH2Ekm.js.map} +1 -1
- package/package.json +1 -1
- package/dist/server-Bpu_LXg5.js.map +0 -1
package/README.md
CHANGED
package/README.zh-CN.md
CHANGED
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,6 +1496,7 @@ function mapContent(content, options = {}) {
|
|
|
1496
1496
|
});
|
|
1497
1497
|
break;
|
|
1498
1498
|
}
|
|
1499
|
+
if (contentParts.length === 0) return "";
|
|
1499
1500
|
return contentParts;
|
|
1500
1501
|
}
|
|
1501
1502
|
function createDocumentTextPart() {
|
|
@@ -3226,9 +3227,13 @@ function closeThinkingBlockIfOpen(state$1, events$1) {
|
|
|
3226
3227
|
|
|
3227
3228
|
//#endregion
|
|
3228
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" };
|
|
3229
3233
|
const handleWithChatCompletions = async (c, anthropicPayload, options) => {
|
|
3230
3234
|
const { logger: logger$7, subagentMarker, requestId, sessionId, compactType } = options;
|
|
3231
3235
|
const openAIPayload = translateToOpenAI(anthropicPayload);
|
|
3236
|
+
prepareCopilotChatCompletionsPayload(openAIPayload);
|
|
3232
3237
|
const recordUsage = createCopilotUsageRecorder({
|
|
3233
3238
|
endpoint: "chat_completions",
|
|
3234
3239
|
fallbackSessionId: sessionId,
|
|
@@ -3400,6 +3405,26 @@ const handleWithMessagesApi = async (c, anthropicPayload, options) => {
|
|
|
3400
3405
|
recordUsage(normalizeAnthropicUsage(response.usage));
|
|
3401
3406
|
return c.json(response);
|
|
3402
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)];
|
|
3403
3428
|
const isNonStreaming = (response) => Object.hasOwn(response, "choices");
|
|
3404
3429
|
const isAsyncIterable$1 = (value) => Boolean(value) && typeof value[Symbol.asyncIterator] === "function";
|
|
3405
3430
|
const createCopilotUsageRecorder = (options) => createCopilotTokenUsageRecorder({
|
|
@@ -3468,6 +3493,11 @@ const parseSubagentMarkerFromSystemReminder = (text) => {
|
|
|
3468
3493
|
//#endregion
|
|
3469
3494
|
//#region src/routes/messages/handler.ts
|
|
3470
3495
|
const logger$5 = createHandlerLogger("messages-handler");
|
|
3496
|
+
const messagesFlowHandlers = {
|
|
3497
|
+
handleWithChatCompletions,
|
|
3498
|
+
handleWithMessagesApi,
|
|
3499
|
+
handleWithResponsesApi
|
|
3500
|
+
};
|
|
3471
3501
|
async function handleCompletion(c) {
|
|
3472
3502
|
await checkRateLimit(state);
|
|
3473
3503
|
const anthropicPayload = await c.req.json();
|
|
@@ -3490,7 +3520,7 @@ async function handleCompletion(c) {
|
|
|
3490
3520
|
if (state.manualApprove) await awaitApproval();
|
|
3491
3521
|
const selectedModel = findEndpointModel(anthropicPayload.model);
|
|
3492
3522
|
anthropicPayload.model = selectedModel?.id ?? anthropicPayload.model;
|
|
3493
|
-
if (shouldUseMessagesApi(selectedModel)) return await handleWithMessagesApi(c, anthropicPayload, {
|
|
3523
|
+
if (shouldUseMessagesApi(selectedModel)) return await messagesFlowHandlers.handleWithMessagesApi(c, anthropicPayload, {
|
|
3494
3524
|
anthropicBetaHeader: anthropicBeta,
|
|
3495
3525
|
subagentMarker,
|
|
3496
3526
|
selectedModel,
|
|
@@ -3499,7 +3529,7 @@ async function handleCompletion(c) {
|
|
|
3499
3529
|
compactType,
|
|
3500
3530
|
logger: logger$5
|
|
3501
3531
|
});
|
|
3502
|
-
if (shouldUseResponsesApi(selectedModel)) return await handleWithResponsesApi(c, anthropicPayload, {
|
|
3532
|
+
if (shouldUseResponsesApi(selectedModel)) return await messagesFlowHandlers.handleWithResponsesApi(c, anthropicPayload, {
|
|
3503
3533
|
subagentMarker,
|
|
3504
3534
|
selectedModel,
|
|
3505
3535
|
requestId,
|
|
@@ -3507,7 +3537,7 @@ async function handleCompletion(c) {
|
|
|
3507
3537
|
compactType,
|
|
3508
3538
|
logger: logger$5
|
|
3509
3539
|
});
|
|
3510
|
-
return await handleWithChatCompletions(c, anthropicPayload, {
|
|
3540
|
+
return await messagesFlowHandlers.handleWithChatCompletions(c, anthropicPayload, {
|
|
3511
3541
|
subagentMarker,
|
|
3512
3542
|
requestId,
|
|
3513
3543
|
sessionId,
|
|
@@ -4309,4 +4339,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
|
|
|
4309
4339
|
|
|
4310
4340
|
//#endregion
|
|
4311
4341
|
export { server };
|
|
4312
|
-
//# sourceMappingURL=server-
|
|
4342
|
+
//# sourceMappingURL=server-BG69Fgym.js.map
|