@jeffreycao/copilot-api 1.12.7 → 1.12.8
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 +3 -1
- package/README.zh-CN.md +3 -1
- package/dist/auth-BMROoous.js +198 -0
- package/dist/auth-BMROoous.js.map +1 -0
- package/dist/{check-usage-A0wChz3s.js → check-usage-7Dxi5XkE.js} +3 -3
- package/dist/{check-usage-A0wChz3s.js.map → check-usage-7Dxi5XkE.js.map} +1 -1
- package/dist/{config-B-_X-1gj.js → config-B71_S_hQ.js} +12 -5
- package/dist/config-B71_S_hQ.js.map +1 -0
- package/dist/{debug-BiGuRO0S.js → debug-TyT2u9dt.js} +2 -2
- package/dist/{debug-BiGuRO0S.js.map → debug-TyT2u9dt.js.map} +1 -1
- package/dist/main.js +4 -4
- package/dist/{server-ypsjdIs5.js → server-DQXpAOIW.js} +43 -43
- package/dist/server-DQXpAOIW.js.map +1 -0
- package/dist/{start-BBRI5K7R.js → start-BW-kr6B8.js} +4 -4
- package/dist/{start-BBRI5K7R.js.map → start-BW-kr6B8.js.map} +1 -1
- package/dist/{token-CIpQTF2M.js → token-fpw8tAQS.js} +4 -4
- package/dist/{token-CIpQTF2M.js.map → token-fpw8tAQS.js.map} +1 -1
- package/package.json +1 -1
- package/dist/auth-bQxQAUnE.js +0 -117
- package/dist/auth-bQxQAUnE.js.map +0 -1
- package/dist/config-B-_X-1gj.js.map +0 -1
- package/dist/server-ypsjdIs5.js.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { C as prepareMessageProxyHeaders, E as compactMessageSections, F as createPooledWebSocketStream, I as createWebSocketUrl, L as state, M as generateTraceId, N as requestContext, O as compactSystemPromptStarts, P as resolveTraceId$1, R as HTTPError, S as prepareInteractionHeaders, T as compactAutoContinuePromptStarts, _ as getCopilotUsage, b as copilotWebSocketHeaders, d as generateRequestIdFromPayload, f as getRootSessionId, g as sleep, h as parseUserIdMetadata, j as forwardCodexResponses, m as isNullish, p as getUUID, r as setupCodexToken, s as cacheModels, v as copilotBaseUrl, x as prepareForCompact, y as copilotHeaders, z as forwardError } from "./token-
|
|
1
|
+
import { C as setModelMappings, S as resolveMappedModel, T as PATHS, _ as isResponsesApiWebSocketEnabled, a as getExtraPromptForModel, c as getModelResponsesApiCompactThreshold$1, d as getReasoningEffortForModel, f as getSmallModel, g as isResponsesApiWebSearchEnabled, h as isResponsesApiContextManagementEnabled, i as getConfig, l as getProviderConfig, m as isMessagesApiEnabled, n as getAnthropicApiKey, o as getMessageApiWebSearchModel, r as getClaudeTokenMultiplier, s as getModelMappings, u as getRawProviderConfig } from "./config-B71_S_hQ.js";
|
|
2
|
+
import { C as prepareMessageProxyHeaders, E as compactMessageSections, F as createPooledWebSocketStream, I as createWebSocketUrl, L as state, M as generateTraceId, N as requestContext, O as compactSystemPromptStarts, P as resolveTraceId$1, R as HTTPError, S as prepareInteractionHeaders, T as compactAutoContinuePromptStarts, _ as getCopilotUsage, b as copilotWebSocketHeaders, d as generateRequestIdFromPayload, f as getRootSessionId, g as sleep, h as parseUserIdMetadata, j as forwardCodexResponses, m as isNullish, p as getUUID, r as setupCodexToken, s as cacheModels, v as copilotBaseUrl, x as prepareForCompact, y as copilotHeaders, z as forwardError } from "./token-fpw8tAQS.js";
|
|
3
3
|
import { a as isDeferredToolName, c as parseMcpToolSearchSentinel, d as shouldEnableResponsesToolSearch, i as isBridgeToolSearchName, l as resolveBridgeToolSearchName, o as listDeferredToolNames, r as formatToolSearchBridgeArguments, s as normalizeToolSearchBridgeArguments, t as BRIDGE_TOOL_SEARCH_NAME, u as selectDeferredToolsByNames } from "./tool-search-D3SN0jX-.js";
|
|
4
4
|
import consola from "consola";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
|
-
import { events } from "fetch-event-stream";
|
|
7
6
|
import fs, { readFileSync } from "node:fs";
|
|
8
7
|
import fs$1 from "node:fs/promises";
|
|
9
8
|
import path from "node:path";
|
|
9
|
+
import { events } from "fetch-event-stream";
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { Hono } from "hono";
|
|
12
12
|
import { cors } from "hono/cors";
|
|
@@ -1309,18 +1309,18 @@ async function handleCompletion$1(c) {
|
|
|
1309
1309
|
await checkRateLimit(state);
|
|
1310
1310
|
debugJson(logger$7, "Request payload:", payload);
|
|
1311
1311
|
const selectedModel = state.models?.data.find((model) => model.id === payload.model);
|
|
1312
|
-
if (selectedModel?.id === "gpt-5.4") return c.json({ error: {
|
|
1313
|
-
message: "Please use `/v1/responses` or `/v1/messages` API",
|
|
1314
|
-
type: "invalid_request_error"
|
|
1315
|
-
} }, 400);
|
|
1316
1312
|
if (state.manualApprove) await awaitApproval();
|
|
1317
|
-
if (isNullish(payload.max_tokens)) {
|
|
1313
|
+
if (isNullish(payload.max_tokens) && isNullish(payload.max_completion_tokens)) {
|
|
1318
1314
|
payload = {
|
|
1319
1315
|
...payload,
|
|
1320
1316
|
max_tokens: selectedModel?.capabilities.limits.max_output_tokens
|
|
1321
1317
|
};
|
|
1322
1318
|
debugJson(logger$7, "Set max_tokens to:", payload.max_tokens);
|
|
1323
1319
|
}
|
|
1320
|
+
if (payload.model.includes("gpt")) {
|
|
1321
|
+
if (isNullish(payload.max_completion_tokens)) payload.max_completion_tokens = payload.max_tokens;
|
|
1322
|
+
delete payload.max_tokens;
|
|
1323
|
+
}
|
|
1324
1324
|
const requestId = generateRequestIdFromPayload(payload);
|
|
1325
1325
|
logger$7.debug("Generated request ID:", requestId);
|
|
1326
1326
|
const sessionId = getUUID(requestId);
|
|
@@ -1664,6 +1664,7 @@ function translateToOpenAI(payload, options = {}) {
|
|
|
1664
1664
|
const modelId = payload.model;
|
|
1665
1665
|
const model = state.models?.data.find((m) => m.id === modelId);
|
|
1666
1666
|
const thinkingBudget = getThinkingBudget(payload, model);
|
|
1667
|
+
const reasoningEffort = getReasoningEffort(payload, options);
|
|
1667
1668
|
return {
|
|
1668
1669
|
model: modelId,
|
|
1669
1670
|
messages: translateAnthropicMessagesToOpenAI(payload, modelId, {
|
|
@@ -1678,12 +1679,22 @@ function translateToOpenAI(payload, options = {}) {
|
|
|
1678
1679
|
user: payload.metadata?.user_id,
|
|
1679
1680
|
tools: translateAnthropicToolsToOpenAI(payload.tools),
|
|
1680
1681
|
tool_choice: translateAnthropicToolChoiceToOpenAI(payload.tool_choice),
|
|
1681
|
-
thinking_budget: thinkingBudget
|
|
1682
|
+
thinking_budget: thinkingBudget,
|
|
1683
|
+
...reasoningEffort ? { reasoning_effort: reasoningEffort } : {}
|
|
1682
1684
|
};
|
|
1683
1685
|
}
|
|
1686
|
+
function getReasoningEffort(payload, options) {
|
|
1687
|
+
const effort = payload.output_config?.effort;
|
|
1688
|
+
if (!effort) return;
|
|
1689
|
+
if (!options.validateReasoningEffort) return effort;
|
|
1690
|
+
const supportedEfforts = options.reasoningEffortSupport;
|
|
1691
|
+
if (!supportedEfforts || supportedEfforts.length === 0) return;
|
|
1692
|
+
if (supportedEfforts.includes(effort)) return effort;
|
|
1693
|
+
return supportedEfforts.at(-1);
|
|
1694
|
+
}
|
|
1684
1695
|
function getThinkingBudget(payload, model) {
|
|
1685
1696
|
const thinking = payload.thinking;
|
|
1686
|
-
if (model && thinking) {
|
|
1697
|
+
if (model && thinking?.budget_tokens !== void 0) {
|
|
1687
1698
|
const maxThinkingBudget = Math.min(model.capabilities.supports.max_thinking_budget ?? 0, (model.capabilities.limits.max_output_tokens ?? 0) - 1);
|
|
1688
1699
|
thinking.budget_tokens ??= maxThinkingBudget;
|
|
1689
1700
|
if (maxThinkingBudget > 0) {
|
|
@@ -4917,14 +4928,12 @@ async function handleProviderMessagesForProvider(c, options) {
|
|
|
4917
4928
|
c,
|
|
4918
4929
|
payload,
|
|
4919
4930
|
provider,
|
|
4920
|
-
providerConfig,
|
|
4921
4931
|
upstreamResponse
|
|
4922
4932
|
});
|
|
4923
4933
|
return respondProviderMessagesJson(c, {
|
|
4924
4934
|
body: await upstreamResponse.json(),
|
|
4925
4935
|
payload,
|
|
4926
|
-
provider
|
|
4927
|
-
providerConfig
|
|
4936
|
+
provider
|
|
4928
4937
|
});
|
|
4929
4938
|
} catch (error) {
|
|
4930
4939
|
logger$5.error("provider.messages.error", {
|
|
@@ -5149,7 +5158,7 @@ const applyContextCacheControl = (message) => {
|
|
|
5149
5158
|
const setContextCacheControl = (part) => {
|
|
5150
5159
|
part.cache_control = { ...OPENAI_COMPATIBLE_CONTEXT_CACHE_CONTROL };
|
|
5151
5160
|
};
|
|
5152
|
-
const streamProviderMessages = ({ c, payload, provider,
|
|
5161
|
+
const streamProviderMessages = ({ c, payload, provider, upstreamResponse }) => {
|
|
5153
5162
|
logger$5.debug("provider.messages.streaming");
|
|
5154
5163
|
const recordUsage = createProviderMessagesUsageRecorder(payload, provider);
|
|
5155
5164
|
return streamSSE(c, async (stream) => {
|
|
@@ -5167,7 +5176,7 @@ const streamProviderMessages = ({ c, payload, provider, providerConfig, upstream
|
|
|
5167
5176
|
let data = chunk.data;
|
|
5168
5177
|
if (!data) continue;
|
|
5169
5178
|
if (chunk.data === "[DONE]") break;
|
|
5170
|
-
const parsed = parseProviderStreamEvent(data
|
|
5179
|
+
const parsed = parseProviderStreamEvent(data);
|
|
5171
5180
|
if (parsed) {
|
|
5172
5181
|
usage = mergeAnthropicUsage(usage, parsed.usage);
|
|
5173
5182
|
data = parsed.data;
|
|
@@ -5299,24 +5308,18 @@ const parseResponsesProviderStreamChunk = (data, providerConfig) => {
|
|
|
5299
5308
|
return null;
|
|
5300
5309
|
}
|
|
5301
5310
|
};
|
|
5302
|
-
const parseProviderStreamEvent = (data
|
|
5311
|
+
const parseProviderStreamEvent = (data) => {
|
|
5303
5312
|
try {
|
|
5304
5313
|
const parsed = JSON.parse(data);
|
|
5305
|
-
if (parsed.type === "message_start") {
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
adjustInputTokens(providerConfig, parsed.usage);
|
|
5315
|
-
return {
|
|
5316
|
-
data: JSON.stringify(parsed),
|
|
5317
|
-
usage: normalizeAnthropicUsage(parsed.usage)
|
|
5318
|
-
};
|
|
5319
|
-
}
|
|
5314
|
+
if (parsed.type === "message_start") return {
|
|
5315
|
+
data: JSON.stringify(parsed),
|
|
5316
|
+
model: parsed.message.model,
|
|
5317
|
+
usage: normalizeAnthropicUsage(parsed.message.usage)
|
|
5318
|
+
};
|
|
5319
|
+
if (parsed.type === "message_delta") return {
|
|
5320
|
+
data: JSON.stringify(parsed),
|
|
5321
|
+
usage: normalizeAnthropicUsage(parsed.usage)
|
|
5322
|
+
};
|
|
5320
5323
|
return {
|
|
5321
5324
|
data: JSON.stringify(parsed),
|
|
5322
5325
|
usage: {}
|
|
@@ -5330,10 +5333,8 @@ const parseProviderStreamEvent = (data, providerConfig) => {
|
|
|
5330
5333
|
}
|
|
5331
5334
|
};
|
|
5332
5335
|
const respondProviderMessagesJson = (c, options) => {
|
|
5333
|
-
const { body, payload, provider
|
|
5334
|
-
|
|
5335
|
-
adjustInputTokens(providerConfig, body.usage);
|
|
5336
|
-
recordUsage(normalizeAnthropicUsage(body.usage));
|
|
5336
|
+
const { body, payload, provider } = options;
|
|
5337
|
+
createProviderMessagesUsageRecorder(payload, provider)(normalizeAnthropicUsage(body.usage));
|
|
5337
5338
|
debugJson(logger$5, "provider.messages.no_stream result:", body);
|
|
5338
5339
|
return c.json(body);
|
|
5339
5340
|
};
|
|
@@ -5371,11 +5372,6 @@ const createProviderMessagesUsageRecorder = (payload, provider) => createProvide
|
|
|
5371
5372
|
providerName: provider,
|
|
5372
5373
|
sessionId: parseUserIdMetadata(payload.metadata?.user_id).sessionId
|
|
5373
5374
|
});
|
|
5374
|
-
const adjustInputTokens = (providerConfig, usage) => {
|
|
5375
|
-
if (!providerConfig.adjustInputTokens || !usage) return;
|
|
5376
|
-
usage.input_tokens = Math.max(0, (usage.input_tokens ?? 0) - (usage.cache_read_input_tokens ?? 0) - (usage.cache_creation_input_tokens ?? 0));
|
|
5377
|
-
debugJson(logger$5, "provider.messages.adjusted_usage:", usage);
|
|
5378
|
-
};
|
|
5379
5375
|
//#endregion
|
|
5380
5376
|
//#region src/services/copilot/create-messages.ts
|
|
5381
5377
|
const INTERLEAVED_THINKING_BETA = "interleaved-thinking-2025-05-14";
|
|
@@ -5437,8 +5433,11 @@ const messagesApiFlowDependencies = {
|
|
|
5437
5433
|
createResponses
|
|
5438
5434
|
};
|
|
5439
5435
|
const handleWithChatCompletions = async (c, anthropicPayload, options) => {
|
|
5440
|
-
const { logger, subagentMarker, requestId, sessionId, compactType } = options;
|
|
5441
|
-
const openAIPayload = translateToOpenAI(anthropicPayload
|
|
5436
|
+
const { logger, selectedModel, subagentMarker, requestId, sessionId, compactType } = options;
|
|
5437
|
+
const openAIPayload = translateToOpenAI(anthropicPayload, {
|
|
5438
|
+
validateReasoningEffort: true,
|
|
5439
|
+
reasoningEffortSupport: selectedModel?.capabilities.supports.reasoning_effort
|
|
5440
|
+
});
|
|
5442
5441
|
prepareCopilotChatCompletionsPayload(openAIPayload);
|
|
5443
5442
|
const recordUsage = createCopilotUsageRecorder({
|
|
5444
5443
|
endpoint: "chat_completions",
|
|
@@ -5723,6 +5722,7 @@ async function handleCompletion(c) {
|
|
|
5723
5722
|
});
|
|
5724
5723
|
return await messagesFlowHandlers.handleWithChatCompletions(c, anthropicPayload, {
|
|
5725
5724
|
subagentMarker,
|
|
5725
|
+
selectedModel,
|
|
5726
5726
|
requestId,
|
|
5727
5727
|
sessionId,
|
|
5728
5728
|
compactType,
|
|
@@ -6254,4 +6254,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
|
|
|
6254
6254
|
//#endregion
|
|
6255
6255
|
export { server };
|
|
6256
6256
|
|
|
6257
|
-
//# sourceMappingURL=server-
|
|
6257
|
+
//# sourceMappingURL=server-DQXpAOIW.js.map
|