@jeffreycao/copilot-api 1.2.4 → 1.2.5

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.
@@ -1,4 +1,4 @@
1
- import { HTTPError, PATHS, cacheModels, copilotBaseUrl, copilotHeaders, forwardError, generateRequestIdFromPayload, getConfig, getCopilotUsage, getExtraPromptForModel, getReasoningEffortForModel, getRootSessionId, getSmallModel, getUUID, isNullish, isResponsesApiContextManagementModel, shouldCompactUseSmallModel, sleep, state } from "./config-BD6sOCuT.js";
1
+ import { HTTPError, PATHS, cacheModels, copilotBaseUrl, copilotHeaders, forwardError, generateRequestIdFromPayload, getConfig, getCopilotUsage, getExtraPromptForModel, getProviderConfig, getReasoningEffortForModel, getRootSessionId, getSmallModel, getUUID, isNullish, isResponsesApiContextManagementModel, prepareInteractionHeaders, shouldCompactUseSmallModel, sleep, state } from "./config-C4e-TaZM.js";
2
2
  import consola from "consola";
3
3
  import path from "node:path";
4
4
  import fs, { readFileSync } from "node:fs";
@@ -429,11 +429,7 @@ const createChatCompletions = async (payload, options) => {
429
429
  ...copilotHeaders(state, options.requestId, enableVision),
430
430
  "x-initiator": isAgentCall ? "agent" : "user"
431
431
  };
432
- if (options.subagentMarker) {
433
- headers["x-initiator"] = "agent";
434
- headers["x-interaction-type"] = "conversation-subagent";
435
- }
436
- if (options.sessionId) headers["x-interaction-id"] = options.sessionId;
432
+ prepareInteractionHeaders(options.sessionId, Boolean(options.subagentMarker), headers);
437
433
  const response = await fetch(`${copilotBaseUrl(state)}/chat/completions`, {
438
434
  method: "POST",
439
435
  headers,
@@ -449,19 +445,19 @@ const createChatCompletions = async (payload, options) => {
449
445
 
450
446
  //#endregion
451
447
  //#region src/routes/chat-completions/handler.ts
452
- const logger$3 = createHandlerLogger("chat-completions-handler");
448
+ const logger$6 = createHandlerLogger("chat-completions-handler");
453
449
  async function handleCompletion$1(c) {
454
450
  await checkRateLimit(state);
455
451
  let payload = await c.req.json();
456
- logger$3.debug("Request payload:", JSON.stringify(payload).slice(-400));
452
+ logger$6.debug("Request payload:", JSON.stringify(payload).slice(-400));
457
453
  const selectedModel = state.models?.data.find((model) => model.id === payload.model);
458
454
  try {
459
455
  if (selectedModel) {
460
456
  const tokenCount = await getTokenCount(payload, selectedModel);
461
- logger$3.info("Current token count:", tokenCount);
462
- } else logger$3.warn("No model selected, skipping token count calculation");
457
+ logger$6.info("Current token count:", tokenCount);
458
+ } else logger$6.warn("No model selected, skipping token count calculation");
463
459
  } catch (error) {
464
- logger$3.warn("Failed to calculate token count:", error);
460
+ logger$6.warn("Failed to calculate token count:", error);
465
461
  }
466
462
  if (state.manualApprove) await awaitApproval();
467
463
  if (isNullish(payload.max_tokens)) {
@@ -469,24 +465,24 @@ async function handleCompletion$1(c) {
469
465
  ...payload,
470
466
  max_tokens: selectedModel?.capabilities.limits.max_output_tokens
471
467
  };
472
- logger$3.debug("Set max_tokens to:", JSON.stringify(payload.max_tokens));
468
+ logger$6.debug("Set max_tokens to:", JSON.stringify(payload.max_tokens));
473
469
  }
474
470
  const requestId = generateRequestIdFromPayload(payload);
475
- logger$3.debug("Generated request ID:", requestId);
471
+ logger$6.debug("Generated request ID:", requestId);
476
472
  const sessionId = getUUID(requestId);
477
- logger$3.debug("Extracted session ID:", sessionId);
473
+ logger$6.debug("Extracted session ID:", sessionId);
478
474
  const response = await createChatCompletions(payload, {
479
475
  requestId,
480
476
  sessionId
481
477
  });
482
478
  if (isNonStreaming$1(response)) {
483
- logger$3.debug("Non-streaming response:", JSON.stringify(response));
479
+ logger$6.debug("Non-streaming response:", JSON.stringify(response));
484
480
  return c.json(response);
485
481
  }
486
- logger$3.debug("Streaming response");
482
+ logger$6.debug("Streaming response");
487
483
  return streamSSE(c, async (stream) => {
488
484
  for await (const chunk of response) {
489
- logger$3.debug("Streaming chunk:", JSON.stringify(chunk));
485
+ logger$6.debug("Streaming chunk:", JSON.stringify(chunk));
490
486
  await stream.writeSSE(chunk);
491
487
  }
492
488
  });
@@ -823,11 +819,7 @@ const createResponses = async (payload, { vision, initiator, subagentMarker, req
823
819
  ...copilotHeaders(state, requestId, vision),
824
820
  "x-initiator": initiator
825
821
  };
826
- if (subagentMarker) {
827
- headers["x-initiator"] = "agent";
828
- headers["x-interaction-type"] = "conversation-subagent";
829
- }
830
- if (sessionId) headers["x-interaction-id"] = sessionId;
822
+ prepareInteractionHeaders(sessionId, Boolean(subagentMarker), headers);
831
823
  payload.service_tier = null;
832
824
  const response = await fetch(`${copilotBaseUrl(state)}/responses`, {
833
825
  method: "POST",
@@ -1797,11 +1789,7 @@ const createMessages = async (payload, anthropicBetaHeader, options) => {
1797
1789
  ...copilotHeaders(state, options.requestId, enableVision),
1798
1790
  "x-initiator": isInitiateRequest ? "user" : "agent"
1799
1791
  };
1800
- if (options.subagentMarker) {
1801
- headers["x-initiator"] = "agent";
1802
- headers["x-interaction-type"] = "conversation-subagent";
1803
- }
1804
- if (options.sessionId) headers["x-interaction-id"] = options.sessionId;
1792
+ prepareInteractionHeaders(options.sessionId, Boolean(options.subagentMarker), headers);
1805
1793
  const anthropicBeta = buildAnthropicBetaHeader(anthropicBetaHeader, payload.thinking);
1806
1794
  if (anthropicBeta) headers["anthropic-beta"] = anthropicBeta;
1807
1795
  const response = await fetch(`${copilotBaseUrl(state)}/v1/messages`, {
@@ -2114,27 +2102,27 @@ const parseSubagentMarkerFromSystemReminder = (text) => {
2114
2102
 
2115
2103
  //#endregion
2116
2104
  //#region src/routes/messages/handler.ts
2117
- const logger$2 = createHandlerLogger("messages-handler");
2105
+ const logger$5 = createHandlerLogger("messages-handler");
2118
2106
  const compactSystemPromptStart = "You are a helpful AI assistant tasked with summarizing conversations";
2119
2107
  async function handleCompletion(c) {
2120
2108
  await checkRateLimit(state);
2121
2109
  const anthropicPayload = await c.req.json();
2122
- logger$2.debug("Anthropic request payload:", JSON.stringify(anthropicPayload));
2110
+ logger$5.debug("Anthropic request payload:", JSON.stringify(anthropicPayload));
2123
2111
  const subagentMarker = parseSubagentMarkerFromFirstUser(anthropicPayload);
2124
- if (subagentMarker) logger$2.debug("Detected Subagent marker:", JSON.stringify(subagentMarker));
2112
+ if (subagentMarker) logger$5.debug("Detected Subagent marker:", JSON.stringify(subagentMarker));
2125
2113
  const sessionId = getRootSessionId(anthropicPayload, c);
2126
- logger$2.debug("Extracted session ID:", sessionId);
2114
+ logger$5.debug("Extracted session ID:", sessionId);
2127
2115
  const isCompact = isCompactRequest(anthropicPayload);
2128
2116
  const anthropicBeta = c.req.header("anthropic-beta");
2129
- logger$2.debug("Anthropic Beta header:", anthropicBeta);
2117
+ logger$5.debug("Anthropic Beta header:", anthropicBeta);
2130
2118
  const noTools = !anthropicPayload.tools || anthropicPayload.tools.length === 0;
2131
2119
  if (anthropicBeta && noTools && !isCompact) anthropicPayload.model = getSmallModel();
2132
2120
  if (isCompact) {
2133
- logger$2.debug("Is compact request:", isCompact);
2121
+ logger$5.debug("Is compact request:", isCompact);
2134
2122
  if (shouldCompactUseSmallModel()) anthropicPayload.model = getSmallModel();
2135
2123
  } else mergeToolResultForClaude(anthropicPayload);
2136
2124
  const requestId = generateRequestIdFromPayload(anthropicPayload, sessionId);
2137
- logger$2.debug("Generated request ID:", requestId);
2125
+ logger$5.debug("Generated request ID:", requestId);
2138
2126
  if (state.manualApprove) await awaitApproval();
2139
2127
  const selectedModel = state.models?.data.find((m) => m.id === anthropicPayload.model);
2140
2128
  if (shouldUseMessagesApi(selectedModel)) return await handleWithMessagesApi(c, anthropicPayload, {
@@ -2161,19 +2149,19 @@ const MESSAGES_ENDPOINT = "/v1/messages";
2161
2149
  const handleWithChatCompletions = async (c, anthropicPayload, options) => {
2162
2150
  const { subagentMarker, requestId, sessionId } = options;
2163
2151
  const openAIPayload = translateToOpenAI(anthropicPayload);
2164
- logger$2.debug("Translated OpenAI request payload:", JSON.stringify(openAIPayload));
2152
+ logger$5.debug("Translated OpenAI request payload:", JSON.stringify(openAIPayload));
2165
2153
  const response = await createChatCompletions(openAIPayload, {
2166
2154
  subagentMarker,
2167
2155
  requestId,
2168
2156
  sessionId
2169
2157
  });
2170
2158
  if (isNonStreaming(response)) {
2171
- logger$2.debug("Non-streaming response from Copilot:", JSON.stringify(response));
2159
+ logger$5.debug("Non-streaming response from Copilot:", JSON.stringify(response));
2172
2160
  const anthropicResponse = translateToAnthropic(response);
2173
- logger$2.debug("Translated Anthropic response:", JSON.stringify(anthropicResponse));
2161
+ logger$5.debug("Translated Anthropic response:", JSON.stringify(anthropicResponse));
2174
2162
  return c.json(anthropicResponse);
2175
2163
  }
2176
- logger$2.debug("Streaming response from Copilot");
2164
+ logger$5.debug("Streaming response from Copilot");
2177
2165
  return streamSSE(c, async (stream) => {
2178
2166
  const streamState = {
2179
2167
  messageStartSent: false,
@@ -2183,13 +2171,13 @@ const handleWithChatCompletions = async (c, anthropicPayload, options) => {
2183
2171
  thinkingBlockOpen: false
2184
2172
  };
2185
2173
  for await (const rawEvent of response) {
2186
- logger$2.debug("Copilot raw stream event:", JSON.stringify(rawEvent));
2174
+ logger$5.debug("Copilot raw stream event:", JSON.stringify(rawEvent));
2187
2175
  if (rawEvent.data === "[DONE]") break;
2188
2176
  if (!rawEvent.data) continue;
2189
2177
  const chunk = JSON.parse(rawEvent.data);
2190
2178
  const events$1 = translateChunkToAnthropicEvents(chunk, streamState);
2191
2179
  for (const event of events$1) {
2192
- logger$2.debug("Translated Anthropic event:", JSON.stringify(event));
2180
+ logger$5.debug("Translated Anthropic event:", JSON.stringify(event));
2193
2181
  await stream.writeSSE({
2194
2182
  event: event.type,
2195
2183
  data: JSON.stringify(event)
@@ -2203,7 +2191,7 @@ const handleWithResponsesApi = async (c, anthropicPayload, options) => {
2203
2191
  const responsesPayload = translateAnthropicMessagesToResponsesPayload(anthropicPayload);
2204
2192
  applyResponsesApiContextManagement(responsesPayload, selectedModel?.capabilities.limits.max_prompt_tokens);
2205
2193
  compactInputByLatestCompaction(responsesPayload);
2206
- logger$2.debug("Translated Responses payload:", JSON.stringify(responsesPayload));
2194
+ logger$5.debug("Translated Responses payload:", JSON.stringify(responsesPayload));
2207
2195
  const { vision, initiator } = getResponsesRequestOptions(responsesPayload);
2208
2196
  const response = await createResponses(responsesPayload, {
2209
2197
  vision,
@@ -2213,7 +2201,7 @@ const handleWithResponsesApi = async (c, anthropicPayload, options) => {
2213
2201
  sessionId
2214
2202
  });
2215
2203
  if (responsesPayload.stream && isAsyncIterable$1(response)) {
2216
- logger$2.debug("Streaming response from Copilot (Responses API)");
2204
+ logger$5.debug("Streaming response from Copilot (Responses API)");
2217
2205
  return streamSSE(c, async (stream) => {
2218
2206
  const streamState = createResponsesStreamState();
2219
2207
  for await (const chunk of response) {
@@ -2226,23 +2214,23 @@ const handleWithResponsesApi = async (c, anthropicPayload, options) => {
2226
2214
  }
2227
2215
  const data = chunk.data;
2228
2216
  if (!data) continue;
2229
- logger$2.debug("Responses raw stream event:", data);
2217
+ logger$5.debug("Responses raw stream event:", data);
2230
2218
  const events$1 = translateResponsesStreamEvent(JSON.parse(data), streamState);
2231
2219
  for (const event of events$1) {
2232
2220
  const eventData = JSON.stringify(event);
2233
- logger$2.debug("Translated Anthropic event:", eventData);
2221
+ logger$5.debug("Translated Anthropic event:", eventData);
2234
2222
  await stream.writeSSE({
2235
2223
  event: event.type,
2236
2224
  data: eventData
2237
2225
  });
2238
2226
  }
2239
2227
  if (streamState.messageCompleted) {
2240
- logger$2.debug("Message completed, ending stream");
2228
+ logger$5.debug("Message completed, ending stream");
2241
2229
  break;
2242
2230
  }
2243
2231
  }
2244
2232
  if (!streamState.messageCompleted) {
2245
- logger$2.warn("Responses stream ended without completion; sending error event");
2233
+ logger$5.warn("Responses stream ended without completion; sending error event");
2246
2234
  const errorEvent = buildErrorEvent("Responses stream ended without completion");
2247
2235
  await stream.writeSSE({
2248
2236
  event: errorEvent.type,
@@ -2251,9 +2239,9 @@ const handleWithResponsesApi = async (c, anthropicPayload, options) => {
2251
2239
  }
2252
2240
  });
2253
2241
  }
2254
- logger$2.debug("Non-streaming Responses result:", JSON.stringify(response).slice(-400));
2242
+ logger$5.debug("Non-streaming Responses result:", JSON.stringify(response).slice(-400));
2255
2243
  const anthropicResponse = translateResponsesResultToAnthropic(response);
2256
- logger$2.debug("Translated Anthropic response:", JSON.stringify(anthropicResponse));
2244
+ logger$5.debug("Translated Anthropic response:", JSON.stringify(anthropicResponse));
2257
2245
  return c.json(anthropicResponse);
2258
2246
  };
2259
2247
  const handleWithMessagesApi = async (c, anthropicPayload, options) => {
@@ -2268,19 +2256,19 @@ const handleWithMessagesApi = async (c, anthropicPayload, options) => {
2268
2256
  anthropicPayload.thinking = { type: "adaptive" };
2269
2257
  anthropicPayload.output_config = { effort: getAnthropicEffortForModel(anthropicPayload.model) };
2270
2258
  }
2271
- logger$2.debug("Translated Messages payload:", JSON.stringify(anthropicPayload));
2259
+ logger$5.debug("Translated Messages payload:", JSON.stringify(anthropicPayload));
2272
2260
  const response = await createMessages(anthropicPayload, anthropicBetaHeader, {
2273
2261
  subagentMarker,
2274
2262
  requestId,
2275
2263
  sessionId
2276
2264
  });
2277
2265
  if (isAsyncIterable$1(response)) {
2278
- logger$2.debug("Streaming response from Copilot (Messages API)");
2266
+ logger$5.debug("Streaming response from Copilot (Messages API)");
2279
2267
  return streamSSE(c, async (stream) => {
2280
2268
  for await (const event of response) {
2281
2269
  const eventName = event.event;
2282
2270
  const data = event.data ?? "";
2283
- logger$2.debug("Messages raw stream event:", data);
2271
+ logger$5.debug("Messages raw stream event:", data);
2284
2272
  await stream.writeSSE({
2285
2273
  event: eventName,
2286
2274
  data
@@ -2288,7 +2276,7 @@ const handleWithMessagesApi = async (c, anthropicPayload, options) => {
2288
2276
  }
2289
2277
  });
2290
2278
  }
2291
- logger$2.debug("Non-streaming Messages result:", JSON.stringify(response).slice(-400));
2279
+ logger$5.debug("Non-streaming Messages result:", JSON.stringify(response).slice(-400));
2292
2280
  return c.json(response);
2293
2281
  };
2294
2282
  const shouldUseResponsesApi = (selectedModel) => {
@@ -2399,6 +2387,182 @@ modelRoutes.get("/", async (c) => {
2399
2387
  }
2400
2388
  });
2401
2389
 
2390
+ //#endregion
2391
+ //#region src/routes/provider/messages/count-tokens-handler.ts
2392
+ const logger$4 = createHandlerLogger("provider-count-tokens-handler");
2393
+ const createFallbackModel = (modelId) => ({
2394
+ capabilities: {
2395
+ family: "provider",
2396
+ limits: {},
2397
+ object: "model_capabilities",
2398
+ supports: {},
2399
+ tokenizer: "o200k_base",
2400
+ type: "chat"
2401
+ },
2402
+ id: modelId,
2403
+ model_picker_enabled: false,
2404
+ name: modelId,
2405
+ object: "model",
2406
+ preview: false,
2407
+ vendor: "provider",
2408
+ version: "unknown"
2409
+ });
2410
+ async function handleProviderCountTokens(c) {
2411
+ const provider = c.req.param("provider");
2412
+ try {
2413
+ const anthropicPayload = await c.req.json();
2414
+ const openAIPayload = translateToOpenAI(anthropicPayload);
2415
+ const modelId = anthropicPayload.model.trim();
2416
+ let selectedModel = state.models?.data.find((model) => model.id === modelId);
2417
+ if (!selectedModel && modelId) selectedModel = createFallbackModel(modelId);
2418
+ if (!selectedModel) {
2419
+ logger$4.warn("provider.count_tokens.model_not_found", {
2420
+ provider,
2421
+ model: anthropicPayload.model
2422
+ });
2423
+ return c.json({ input_tokens: 1 });
2424
+ }
2425
+ const tokenCount = await getTokenCount(openAIPayload, selectedModel);
2426
+ const finalTokenCount = tokenCount.input + tokenCount.output;
2427
+ logger$4.debug("provider.count_tokens.success", {
2428
+ provider,
2429
+ model: anthropicPayload.model,
2430
+ input_tokens: finalTokenCount
2431
+ });
2432
+ return c.json({ input_tokens: finalTokenCount });
2433
+ } catch (error) {
2434
+ logger$4.error("provider.count_tokens.error", {
2435
+ provider,
2436
+ error
2437
+ });
2438
+ return c.json({ input_tokens: 1 });
2439
+ }
2440
+ }
2441
+
2442
+ //#endregion
2443
+ //#region src/services/providers/anthropic-proxy.ts
2444
+ const FORWARDABLE_HEADERS = [
2445
+ "anthropic-version",
2446
+ "anthropic-beta",
2447
+ "accept",
2448
+ "user-agent"
2449
+ ];
2450
+ function buildProviderUpstreamHeaders(providerConfig, requestHeaders) {
2451
+ const headers = {
2452
+ "content-type": "application/json",
2453
+ accept: "application/json",
2454
+ "x-api-key": providerConfig.apiKey
2455
+ };
2456
+ for (const headerName of FORWARDABLE_HEADERS) {
2457
+ const headerValue = requestHeaders.get(headerName);
2458
+ if (headerValue) headers[headerName] = headerValue;
2459
+ }
2460
+ return headers;
2461
+ }
2462
+ async function forwardProviderMessages(providerConfig, payload, requestHeaders) {
2463
+ return await fetch(`${providerConfig.baseUrl}/v1/messages`, {
2464
+ method: "POST",
2465
+ headers: buildProviderUpstreamHeaders(providerConfig, requestHeaders),
2466
+ body: JSON.stringify(payload)
2467
+ });
2468
+ }
2469
+ async function forwardProviderModels(providerConfig, requestHeaders) {
2470
+ return await fetch(`${providerConfig.baseUrl}/v1/models`, {
2471
+ method: "GET",
2472
+ headers: buildProviderUpstreamHeaders(providerConfig, requestHeaders)
2473
+ });
2474
+ }
2475
+
2476
+ //#endregion
2477
+ //#region src/routes/provider/messages/handler.ts
2478
+ const logger$3 = createHandlerLogger("provider-messages-handler");
2479
+ async function handleProviderMessages(c) {
2480
+ const provider = c.req.param("provider");
2481
+ const providerConfig = getProviderConfig(provider);
2482
+ if (!providerConfig) return c.json({ error: {
2483
+ message: `Provider '${provider}' not found or disabled`,
2484
+ type: "invalid_request_error"
2485
+ } }, 404);
2486
+ try {
2487
+ const payload = await c.req.json();
2488
+ payload.temperature ??= providerConfig.defaultTemperature;
2489
+ payload.top_p ??= providerConfig.defaultTopP;
2490
+ payload.top_k ??= providerConfig.defaultTopK;
2491
+ logger$3.debug("provider.messages.request", JSON.stringify({
2492
+ payload,
2493
+ provider
2494
+ }));
2495
+ const upstreamResponse = await forwardProviderMessages(providerConfig, payload, c.req.raw.headers);
2496
+ const contentType = upstreamResponse.headers.get("content-type") ?? "";
2497
+ if (Boolean(payload.stream) && contentType.includes("text/event-stream")) {
2498
+ logger$3.debug("provider.messages.streaming");
2499
+ return streamSSE(c, async (stream) => {
2500
+ for await (const event of events(upstreamResponse)) {
2501
+ const eventName = event.event;
2502
+ const data = event.data ?? "";
2503
+ logger$3.debug("provider.messages.raw_stream_event", data);
2504
+ await stream.writeSSE({
2505
+ event: eventName,
2506
+ data
2507
+ });
2508
+ }
2509
+ });
2510
+ }
2511
+ return upstreamResponse;
2512
+ } catch (error) {
2513
+ logger$3.error("provider.messages.error", {
2514
+ provider,
2515
+ error
2516
+ });
2517
+ throw error;
2518
+ }
2519
+ }
2520
+
2521
+ //#endregion
2522
+ //#region src/routes/provider/messages/route.ts
2523
+ const providerMessageRoutes = new Hono();
2524
+ providerMessageRoutes.post("/", async (c) => {
2525
+ try {
2526
+ return await handleProviderMessages(c);
2527
+ } catch (error) {
2528
+ return await forwardError(c, error);
2529
+ }
2530
+ });
2531
+ providerMessageRoutes.post("/count_tokens", async (c) => {
2532
+ try {
2533
+ return await handleProviderCountTokens(c);
2534
+ } catch (error) {
2535
+ return await forwardError(c, error);
2536
+ }
2537
+ });
2538
+
2539
+ //#endregion
2540
+ //#region src/routes/provider/models/route.ts
2541
+ const logger$2 = createHandlerLogger("provider-models-handler");
2542
+ const providerModelRoutes = new Hono();
2543
+ providerModelRoutes.get("/", async (c) => {
2544
+ const provider = c.req.param("provider") ?? "";
2545
+ try {
2546
+ const providerConfig = getProviderConfig(provider);
2547
+ if (!providerConfig) return c.json({ error: {
2548
+ message: `Provider '${provider}' not found or disabled`,
2549
+ type: "invalid_request_error"
2550
+ } }, 404);
2551
+ const upstreamResponse = await forwardProviderModels(providerConfig, c.req.raw.headers);
2552
+ logger$2.debug("provider.models.response", {
2553
+ provider,
2554
+ statusCode: upstreamResponse.status
2555
+ });
2556
+ return upstreamResponse;
2557
+ } catch (error) {
2558
+ logger$2.error("provider.models.error", {
2559
+ provider,
2560
+ error
2561
+ });
2562
+ return await forwardError(c, error);
2563
+ }
2564
+ });
2565
+
2402
2566
  //#endregion
2403
2567
  //#region src/routes/responses/stream-id-sync.ts
2404
2568
  const createStreamIdTracker = () => ({ outputItems: /* @__PURE__ */ new Map() });
@@ -2584,7 +2748,9 @@ server.route("/v1/models", modelRoutes);
2584
2748
  server.route("/v1/embeddings", embeddingRoutes);
2585
2749
  server.route("/v1/responses", responsesRoutes);
2586
2750
  server.route("/v1/messages", messageRoutes);
2751
+ server.route("/:provider/v1/messages", providerMessageRoutes);
2752
+ server.route("/:provider/v1/models", providerModelRoutes);
2587
2753
 
2588
2754
  //#endregion
2589
2755
  export { server };
2590
- //# sourceMappingURL=server-BPTBrSfO.js.map
2756
+ //# sourceMappingURL=server-C6P5thwB.js.map