@jeffreycao/copilot-api 1.13.4 → 1.13.6

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 CHANGED
@@ -25,7 +25,7 @@ bindElectronFetch();
25
25
  const { auth } = await import("./auth-CtydxYcd.js");
26
26
  const { debug } = await import("./debug-CjJqlHl_.js");
27
27
  const { mcp } = await import("./mcp-BseuqgHR.js");
28
- const { start } = await import("./start-DDL0wwno.js");
28
+ const { start } = await import("./start-CXcuZf8x.js");
29
29
  await runMain(defineCommand({
30
30
  meta: {
31
31
  name: "copilot-api",
@@ -442,11 +442,18 @@ async function openBunDatabase(dbPath) {
442
442
  async function loadNodeSqliteModule() {
443
443
  const nodeVersion = process.versions.node;
444
444
  if (!isNodeSqliteSupportedVersion(nodeVersion)) throw new UnsupportedNodeSqliteRuntimeError(nodeVersion);
445
+ const emitWarning = process.emitWarning.bind(process);
446
+ process.emitWarning = (warning, ...args) => {
447
+ if (typeof warning === "string" && warning.includes("SQLite is an experimental feature")) return;
448
+ return emitWarning(warning, ...args);
449
+ };
445
450
  const specifier = ["node", "sqlite"].join(":");
446
451
  try {
447
452
  return await import(specifier);
448
453
  } catch (error) {
449
454
  throw new UnsupportedNodeSqliteRuntimeError(nodeVersion, error);
455
+ } finally {
456
+ process.emitWarning = emitWarning;
450
457
  }
451
458
  }
452
459
  async function openNodeDatabase(dbPath) {
@@ -1292,6 +1299,7 @@ function mergeAnthropicUsage(current, next) {
1292
1299
  cache_read_input_tokens: next.cache_read_input_tokens ?? current.cache_read_input_tokens,
1293
1300
  input_tokens: next.input_tokens ?? current.input_tokens,
1294
1301
  output_tokens: next.output_tokens ?? current.output_tokens,
1302
+ total_nano_aiu: next.total_nano_aiu ?? current.total_nano_aiu,
1295
1303
  total_tokens: next.total_tokens ?? current.total_tokens
1296
1304
  };
1297
1305
  }
@@ -2746,11 +2754,22 @@ const prepareMessagesApiPayload = (payload, selectedModel) => {
2746
2754
  if (reasoningEffort && !reasoningEffort.includes(effort)) effort = reasoningEffort.at(-1);
2747
2755
  payload.output_config = { effort };
2748
2756
  }
2749
- if (!selectedModel?.capabilities.supports.adaptive_thinking && payload.output_config?.effort) {
2750
- const supported = selectedModel?.capabilities.supports.reasoning_effort;
2751
- if (!supported || supported.length === 0) {
2752
- delete payload.output_config.effort;
2753
- if (Object.keys(payload.output_config).length === 0) delete payload.output_config;
2757
+ const modelSupports = selectedModel?.capabilities.supports;
2758
+ if (!modelSupports?.adaptive_thinking) {
2759
+ const reasoningEfforts = modelSupports?.reasoning_effort;
2760
+ if (!reasoningEfforts || reasoningEfforts.length === 0) {
2761
+ if (payload.output_config?.effort) {
2762
+ delete payload.output_config.effort;
2763
+ if (Object.keys(payload.output_config).length === 0) delete payload.output_config;
2764
+ }
2765
+ }
2766
+ if (disableThink) delete payload.thinking;
2767
+ else {
2768
+ const budgetTokens = modelSupports?.max_thinking_budget ?? 4096;
2769
+ if (payload.thinking?.type === "adaptive") payload.thinking = {
2770
+ type: "enabled",
2771
+ budget_tokens: budgetTokens - 1
2772
+ };
2754
2773
  }
2755
2774
  }
2756
2775
  };
@@ -5813,8 +5832,14 @@ const handleWithMessagesApi = async (c, anthropicPayload, options) => {
5813
5832
  if (!data) continue;
5814
5833
  debugLazy(logger, () => ["Messages raw stream event:", data]);
5815
5834
  const parsedEvent = parseAnthropicStreamEvent(data);
5816
- if (parsedEvent?.type === "message_start") usage = mergeAnthropicUsage(usage, normalizeAnthropicUsage(parsedEvent.message.usage));
5817
- else if (parsedEvent?.type === "message_delta") usage = mergeAnthropicUsage(usage, normalizeAnthropicUsage(parsedEvent.usage));
5835
+ if (parsedEvent?.type === "message_start") usage = mergeAnthropicUsage(usage, {
5836
+ ...normalizeAnthropicUsage(parsedEvent.message.usage),
5837
+ ...normalizeCopilotUsage(parsedEvent.message.copilot_usage)
5838
+ });
5839
+ else if (parsedEvent?.type === "message_delta") usage = mergeAnthropicUsage(usage, {
5840
+ ...normalizeAnthropicUsage(parsedEvent.usage),
5841
+ ...normalizeCopilotUsage(parsedEvent.copilot_usage)
5842
+ });
5818
5843
  await stream.writeSSE({
5819
5844
  event: eventName,
5820
5845
  data
@@ -5827,7 +5852,10 @@ const handleWithMessagesApi = async (c, anthropicPayload, options) => {
5827
5852
  value: response,
5828
5853
  tailLength: 400
5829
5854
  });
5830
- recordUsage(normalizeAnthropicUsage(response.usage));
5855
+ recordUsage({
5856
+ ...normalizeAnthropicUsage(response.usage),
5857
+ ...normalizeCopilotUsage(response.copilot_usage)
5858
+ });
5831
5859
  return c.json(response);
5832
5860
  };
5833
5861
  const prepareCopilotChatCompletionsPayload = (payload) => {
@@ -5859,6 +5887,7 @@ const createCopilotUsageRecorder = (options) => createCopilotTokenUsageRecorder(
5859
5887
  sessionId: getMetadataSessionId(options.payload)
5860
5888
  });
5861
5889
  const getMetadataSessionId = (payload) => parseUserIdMetadata(payload.metadata?.user_id).sessionId;
5890
+ const normalizeCopilotUsage = (copilotUsage) => ({ total_nano_aiu: normalizeOptionalToken(copilotUsage?.total_nano_aiu) });
5862
5891
  const parseAnthropicStreamEvent = (data) => {
5863
5892
  try {
5864
5893
  return JSON.parse(data);
@@ -6593,4 +6622,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
6593
6622
  //#endregion
6594
6623
  export { server };
6595
6624
 
6596
- //# sourceMappingURL=server-BzgBFAIx.js.map
6625
+ //# sourceMappingURL=server-Cuy2sQrU.js.map