@jeffreycao/copilot-api 1.14.7 → 1.14.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.
@@ -444,25 +444,74 @@ async function forwardProviderModels(providerConfig, requestHeaders) {
444
444
  headers: buildProviderUpstreamHeaders(providerConfig, requestHeaders)
445
445
  });
446
446
  }
447
+ /** Align with Codex images: long-running generation/edits need a generous cap. */
448
+ const PROVIDER_IMAGES_TIMEOUT_MS = 900 * 1e3;
449
+ const providerImagesDispatcher = { dispatch(options, handler) {
450
+ return getGlobalDispatcher().dispatch({
451
+ ...options,
452
+ bodyTimeout: PROVIDER_IMAGES_TIMEOUT_MS,
453
+ headersTimeout: PROVIDER_IMAGES_TIMEOUT_MS
454
+ }, handler);
455
+ } };
456
+ function resolveProviderRequestUrl(providerConfig, requestUrl, path) {
457
+ const upstreamUrl = new URL(`${providerConfig.baseUrl}${path}`);
458
+ upstreamUrl.search = new URL(requestUrl, "http://localhost").search;
459
+ return upstreamUrl.toString();
460
+ }
461
+ async function forwardProviderAlphaSearch(providerConfig, request) {
462
+ const headers = buildProviderUpstreamHeaders(providerConfig, request.headers);
463
+ const body = await request.arrayBuffer();
464
+ return await fetch(resolveProviderRequestUrl(providerConfig, request.url, "/v1/alpha/search"), {
465
+ method: "POST",
466
+ headers,
467
+ body
468
+ });
469
+ }
470
+ async function forwardProviderImages(providerConfig, request, operation) {
471
+ const headers = buildProviderUpstreamHeaders(providerConfig, request.headers);
472
+ const contentType = request.headers.get("content-type");
473
+ if (contentType) headers["content-type"] = contentType;
474
+ else if (operation === "edits") delete headers["content-type"];
475
+ const init = {
476
+ method: "POST",
477
+ headers,
478
+ body: request.body,
479
+ duplex: "half",
480
+ signal: AbortSignal.timeout(PROVIDER_IMAGES_TIMEOUT_MS)
481
+ };
482
+ const upstreamUrl = resolveProviderRequestUrl(providerConfig, request.url, `/v1/images/${operation}`);
483
+ if (typeof Bun !== "undefined") return await fetch(upstreamUrl, init);
484
+ return await fetch$1(upstreamUrl, {
485
+ ...init,
486
+ dispatcher: providerImagesDispatcher
487
+ });
488
+ }
447
489
  //#endregion
448
490
  //#region src/routes/alpha-search/route.ts
449
- const logger$11 = createHandlerLogger("alpha-search-handler");
491
+ const logger$14 = createHandlerLogger("alpha-search-handler");
450
492
  const alphaSearchRoutes = new Hono();
493
+ /**
494
+ * Handles Codex alpha-search proxying. Pass `resolvedProviderConfig` when the
495
+ * caller already resolved the codex provider to avoid a second resolve.
496
+ */
497
+ async function handleCodexAlphaSearch(c, resolvedProviderConfig) {
498
+ if (!(resolvedProviderConfig ?? await resolveProviderConfig("codex"))) return c.json({ error: {
499
+ message: "Provider 'codex' not found or disabled",
500
+ type: "invalid_request_error"
501
+ } }, 404);
502
+ await debugJsonAsync(logger$14, "alpha_search.codex.request", async () => ({ body: await c.req.raw.clone().text() }));
503
+ const upstreamResponse = await forwardCodexAlphaSearch(c.req.raw);
504
+ await debugJsonAsync(logger$14, "alpha_search.codex.response", async () => ({
505
+ body: await upstreamResponse.clone().text(),
506
+ statusCode: upstreamResponse.status
507
+ }));
508
+ return createProviderProxyResponse(upstreamResponse);
509
+ }
451
510
  alphaSearchRoutes.post("/", async (c) => {
452
511
  try {
453
- if (!await resolveProviderConfig("codex")) return c.json({ error: {
454
- message: "Provider 'codex' not found or disabled",
455
- type: "invalid_request_error"
456
- } }, 404);
457
- await debugJsonAsync(logger$11, "alpha_search.codex.request", async () => ({ body: await c.req.raw.clone().text() }));
458
- const upstreamResponse = await forwardCodexAlphaSearch(c.req.raw);
459
- await debugJsonAsync(logger$11, "alpha_search.codex.response", async () => ({
460
- body: await upstreamResponse.clone().text(),
461
- statusCode: upstreamResponse.status
462
- }));
463
- return createProviderProxyResponse(upstreamResponse);
512
+ return await handleCodexAlphaSearch(c);
464
513
  } catch (error) {
465
- logger$11.error("alpha_search.codex.error", { error });
514
+ logger$14.error("alpha_search.codex.error", { error });
466
515
  return await forwardError(c, error);
467
516
  }
468
517
  });
@@ -1594,7 +1643,7 @@ const setContextCacheControl = (part) => {
1594
1643
  };
1595
1644
  //#endregion
1596
1645
  //#region src/routes/provider/chat-completions/handler.ts
1597
- const logger$10 = createHandlerLogger("provider-chat-completions-handler");
1646
+ const logger$13 = createHandlerLogger("provider-chat-completions-handler");
1598
1647
  async function handleProviderChatCompletionsForProvider(c, options) {
1599
1648
  const { payload, provider } = options;
1600
1649
  const providerConfig = await resolveProviderConfig(provider);
@@ -1608,13 +1657,13 @@ async function handleProviderChatCompletionsForProvider(c, options) {
1608
1657
  applyProviderStreamOptions(payload);
1609
1658
  applyDashScopePreserveThinkingDefault(payload, providerConfig);
1610
1659
  applyProviderContextCache(payload, modelConfig, providerConfig);
1611
- debugJson(logger$10, "provider.chat_completions.request", {
1660
+ debugJson(logger$13, "provider.chat_completions.request", {
1612
1661
  payload,
1613
1662
  provider
1614
1663
  });
1615
1664
  const upstreamResponse = await forwardProviderChatCompletions(providerConfig, payload, c.req.raw.headers);
1616
1665
  if (!upstreamResponse.ok) {
1617
- logger$10.error("Failed to create provider chat completions", {
1666
+ logger$13.error("Failed to create provider chat completions", {
1618
1667
  provider,
1619
1668
  statusCode: upstreamResponse.status
1620
1669
  });
@@ -1628,7 +1677,7 @@ async function handleProviderChatCompletionsForProvider(c, options) {
1628
1677
  });
1629
1678
  const responseBody = await upstreamResponse.clone().json();
1630
1679
  recordUsage(normalizeOpenAIUsage(responseBody.usage));
1631
- debugJson(logger$10, "provider.chat_completions.response", responseBody);
1680
+ debugJson(logger$13, "provider.chat_completions.response", responseBody);
1632
1681
  return createProviderProxyResponse(upstreamResponse);
1633
1682
  }
1634
1683
  const applyProviderModelDefaults = (payload, modelConfig) => {
@@ -1658,12 +1707,12 @@ const createProviderChatCompletionsUsageRecorder = (payload, provider, modelConf
1658
1707
  providerName: provider
1659
1708
  });
1660
1709
  const streamProviderChatCompletions = (c, upstreamResponse, options) => {
1661
- logger$10.debug("provider.chat_completions.streaming", { provider: options.provider });
1710
+ logger$13.debug("provider.chat_completions.streaming", { provider: options.provider });
1662
1711
  return streamSSE(c, async (stream) => {
1663
1712
  let usage = {};
1664
1713
  try {
1665
1714
  for await (const chunk of events(upstreamResponse)) {
1666
- debugJson(logger$10, "provider.chat_completions.stream_chunk", chunk);
1715
+ debugJson(logger$13, "provider.chat_completions.stream_chunk", chunk);
1667
1716
  if (chunk.data && chunk.data !== "[DONE]") {
1668
1717
  const parsedChunk = parseChatCompletionChunkData(chunk.data);
1669
1718
  if (parsedChunk?.usage) usage = normalizeOpenAIUsage(parsedChunk.usage);
@@ -1790,7 +1839,7 @@ const createChatCompletions = async (payload, options) => {
1790
1839
  };
1791
1840
  //#endregion
1792
1841
  //#region src/routes/chat-completions/handler.ts
1793
- const logger$9 = createHandlerLogger("chat-completions-handler");
1842
+ const logger$12 = createHandlerLogger("chat-completions-handler");
1794
1843
  async function handleCompletion$1(c) {
1795
1844
  let payload = await c.req.json();
1796
1845
  const requestedModel = payload.model;
@@ -1804,23 +1853,23 @@ async function handleCompletion$1(c) {
1804
1853
  provider: providerModelAlias.provider
1805
1854
  });
1806
1855
  }
1807
- debugJson(logger$9, "Request payload:", payload);
1856
+ debugJson(logger$12, "Request payload:", payload);
1808
1857
  const selectedModel = state.models?.data.find((model) => model.id === payload.model);
1809
1858
  if (isNullish(payload.max_tokens) && isNullish(payload.max_completion_tokens)) {
1810
1859
  payload = {
1811
1860
  ...payload,
1812
1861
  max_tokens: selectedModel?.capabilities.limits.max_output_tokens
1813
1862
  };
1814
- debugJson(logger$9, "Set max_tokens to:", payload.max_tokens);
1863
+ debugJson(logger$12, "Set max_tokens to:", payload.max_tokens);
1815
1864
  }
1816
1865
  if (payload.model.includes("gpt")) {
1817
1866
  if (isNullish(payload.max_completion_tokens)) payload.max_completion_tokens = payload.max_tokens;
1818
1867
  delete payload.max_tokens;
1819
1868
  }
1820
1869
  const requestId = generateRequestIdFromPayload(payload);
1821
- logger$9.debug("Generated request ID:", requestId);
1870
+ logger$12.debug("Generated request ID:", requestId);
1822
1871
  const sessionId = getUUID(requestId);
1823
- logger$9.debug("Extracted session ID:", sessionId);
1872
+ logger$12.debug("Extracted session ID:", sessionId);
1824
1873
  const recordUsage = createCopilotTokenUsageRecorder({
1825
1874
  endpoint: "chat_completions",
1826
1875
  fallbackSessionId: sessionId,
@@ -1831,18 +1880,18 @@ async function handleCompletion$1(c) {
1831
1880
  sessionId
1832
1881
  });
1833
1882
  if (isNonStreaming$1(response)) {
1834
- debugJson(logger$9, "Non-streaming response:", response);
1883
+ debugJson(logger$12, "Non-streaming response:", response);
1835
1884
  recordUsage({
1836
1885
  ...normalizeOpenAIUsage(response.usage),
1837
1886
  total_nano_aiu: normalizeOptionalToken(response.copilot_usage?.total_nano_aiu)
1838
1887
  });
1839
1888
  return c.json(response);
1840
1889
  }
1841
- logger$9.debug("Streaming response");
1890
+ logger$12.debug("Streaming response");
1842
1891
  return streamSSE(c, async (stream) => {
1843
1892
  let usage = {};
1844
1893
  for await (const chunk of response) {
1845
- debugJson(logger$9, "Streaming chunk:", chunk);
1894
+ debugJson(logger$12, "Streaming chunk:", chunk);
1846
1895
  const parsedChunk = parseChatCompletionChunk(chunk);
1847
1896
  if (parsedChunk?.usage || parsedChunk?.copilot_usage) usage = {
1848
1897
  ...normalizeOpenAIUsage(parsedChunk.usage),
@@ -1965,31 +2014,35 @@ async function forwardCodexImages(request, operation) {
1965
2014
  }
1966
2015
  //#endregion
1967
2016
  //#region src/routes/images/route.ts
1968
- const logger$8 = createHandlerLogger("images-handler");
2017
+ const logger$11 = createHandlerLogger("images-handler");
1969
2018
  const imageRoutes = new Hono();
1970
2019
  const imageRouteDependencies = { debugJsonAsync };
1971
- function getContentMetadata(headers) {
2020
+ function getContentMetadata$1(headers) {
1972
2021
  return {
1973
2022
  contentType: headers.get("content-type"),
1974
2023
  contentLength: headers.get("content-length")
1975
2024
  };
1976
2025
  }
1977
- async function handleCodexImages(c, operation) {
2026
+ /**
2027
+ * Handles Codex images proxying. Pass `resolvedProviderConfig` when the
2028
+ * caller already resolved the codex provider to avoid a second resolve.
2029
+ */
2030
+ async function handleCodexImages(c, operation, resolvedProviderConfig) {
1978
2031
  try {
1979
- if (!await resolveProviderConfig("codex")) return c.json({ error: {
2032
+ if (!(resolvedProviderConfig ?? await resolveProviderConfig("codex"))) return c.json({ error: {
1980
2033
  message: "Provider 'codex' not found or disabled",
1981
2034
  type: "invalid_request_error"
1982
2035
  } }, 404);
1983
- if (operation === "generations") await imageRouteDependencies.debugJsonAsync(logger$8, "images.generations.codex.request", async () => ({ body: await c.req.raw.clone().text() }));
1984
- else debugJson(logger$8, "images.edits.codex.request", getContentMetadata(c.req.raw.headers));
2036
+ if (operation === "generations") await imageRouteDependencies.debugJsonAsync(logger$11, "images.generations.codex.request", async () => ({ body: await c.req.raw.clone().text() }));
2037
+ else debugJson(logger$11, "images.edits.codex.request", getContentMetadata$1(c.req.raw.headers));
1985
2038
  const upstreamResponse = await forwardCodexImages(c.req.raw, operation);
1986
- debugJson(logger$8, `images.${operation}.codex.response`, {
1987
- ...getContentMetadata(upstreamResponse.headers),
2039
+ debugJson(logger$11, `images.${operation}.codex.response`, {
2040
+ ...getContentMetadata$1(upstreamResponse.headers),
1988
2041
  statusCode: upstreamResponse.status
1989
2042
  });
1990
2043
  return createProviderProxyResponse(upstreamResponse);
1991
2044
  } catch (error) {
1992
- logger$8.error(`images.${operation}.codex.error`, { error });
2045
+ logger$11.error(`images.${operation}.codex.error`, { error });
1993
2046
  return await forwardError(c, error);
1994
2047
  }
1995
2048
  }
@@ -3033,7 +3086,7 @@ const prepareMessagesApiPayload = (payload, selectedModel) => {
3033
3086
  };
3034
3087
  //#endregion
3035
3088
  //#region src/routes/provider/messages/count-tokens-handler.ts
3036
- const logger$7 = createHandlerLogger("provider-count-tokens-handler");
3089
+ const logger$10 = createHandlerLogger("provider-count-tokens-handler");
3037
3090
  async function handleProviderCountTokens(c) {
3038
3091
  const provider = c.req.param("provider");
3039
3092
  return await handleProviderCountTokensForProvider(c, {
@@ -3056,7 +3109,7 @@ async function handleProviderCountTokensForProvider(c, options) {
3056
3109
  toolContentSupportType: modelConfig?.toolContentSupportType ?? []
3057
3110
  } : void 0), createFallbackModel(modelId));
3058
3111
  const finalTokenCount = tokenCount.input + tokenCount.output;
3059
- logger$7.debug("provider.count_tokens.success", {
3112
+ logger$10.debug("provider.count_tokens.success", {
3060
3113
  provider,
3061
3114
  model: anthropicPayload.model,
3062
3115
  input_tokens: finalTokenCount
@@ -5418,7 +5471,7 @@ function getModels() {
5418
5471
  }
5419
5472
  //#endregion
5420
5473
  //#region src/routes/provider/messages/handler.ts
5421
- const logger$6 = createHandlerLogger("provider-messages-handler");
5474
+ const logger$9 = createHandlerLogger("provider-messages-handler");
5422
5475
  async function handleProviderMessages(c) {
5423
5476
  const provider = c.req.param("provider");
5424
5477
  return await handleProviderMessagesForProvider(c, {
@@ -5436,7 +5489,7 @@ async function handleProviderMessagesForProvider(c, options) {
5436
5489
  try {
5437
5490
  const modelConfig = providerConfig.models?.[payload.model];
5438
5491
  const effectiveType = resolveEffectiveProviderType(providerConfig, payload.model);
5439
- debugJson(logger$6, "provider.messages.request", {
5492
+ debugJson(logger$9, "provider.messages.request", {
5440
5493
  payload,
5441
5494
  provider
5442
5495
  });
@@ -5469,7 +5522,7 @@ async function handleProviderMessagesForProvider(c, options) {
5469
5522
  });
5470
5523
  }
5471
5524
  applyMissingExtraBody(payload, { extraBody: modelConfig?.extraBody });
5472
- debugJson(logger$6, "Translated provider.messages.request", {
5525
+ debugJson(logger$9, "Translated provider.messages.request", {
5473
5526
  payload,
5474
5527
  provider
5475
5528
  });
@@ -5479,7 +5532,7 @@ async function handleProviderMessagesForProvider(c, options) {
5479
5532
  authType: resolveProviderAuthType(providerConfig.name, void 0, effectiveType)
5480
5533
  }, payload, c.req.raw.headers);
5481
5534
  if (!upstreamResponse.ok) {
5482
- logger$6.error("Failed to create responses", upstreamResponse);
5535
+ logger$9.error("Failed to create responses", upstreamResponse);
5483
5536
  throw new HTTPError("Failed to create responses", upstreamResponse);
5484
5537
  }
5485
5538
  const contentType = upstreamResponse.headers.get("content-type") ?? "";
@@ -5499,7 +5552,7 @@ async function handleProviderMessagesForProvider(c, options) {
5499
5552
  provider
5500
5553
  });
5501
5554
  } catch (error) {
5502
- logger$6.error("provider.messages.error", {
5555
+ logger$9.error("provider.messages.error", {
5503
5556
  provider,
5504
5557
  error
5505
5558
  });
@@ -5509,7 +5562,7 @@ async function handleProviderMessagesForProvider(c, options) {
5509
5562
  const handleOpenAIResponsesProviderWebSearchMessages = async (c, options) => {
5510
5563
  const { modelConfig, payload, provider, providerConfig } = options;
5511
5564
  const responsesPayload = prepareWebSearchResponsesPayload(payload);
5512
- debugJson(logger$6, "provider.messages.responses.web_search.request", {
5565
+ debugJson(logger$9, "provider.messages.responses.web_search.request", {
5513
5566
  payload: responsesPayload,
5514
5567
  provider
5515
5568
  });
@@ -5520,7 +5573,7 @@ const handleOpenAIResponsesProviderWebSearchMessages = async (c, options) => {
5520
5573
  errorMessagePrefix: `${provider} web search responses stream`,
5521
5574
  parseEvent: (data) => parseResponsesProviderStreamChunk(data, providerConfig),
5522
5575
  upstreamResponse,
5523
- logger: logger$6
5576
+ logger: logger$9
5524
5577
  }),
5525
5578
  modelConfig,
5526
5579
  payload,
@@ -5537,7 +5590,7 @@ const handleOpenAIResponsesProviderWebSearchMessages = async (c, options) => {
5537
5590
  }
5538
5591
  const upstreamResponse = await forwardProviderResponses(providerConfig, responsesPayload, c.req.raw.headers);
5539
5592
  if (!upstreamResponse.ok) {
5540
- logger$6.error("Failed to create provider web search responses", {
5593
+ logger$9.error("Failed to create provider web search responses", {
5541
5594
  provider,
5542
5595
  upstreamResponse
5543
5596
  });
@@ -5548,7 +5601,7 @@ const handleOpenAIResponsesProviderWebSearchMessages = async (c, options) => {
5548
5601
  errorMessagePrefix: `${provider} web search responses stream`,
5549
5602
  parseEvent: (data) => parseResponsesProviderStreamChunk(data, providerConfig),
5550
5603
  upstreamResponse: events(upstreamResponse),
5551
- logger: logger$6
5604
+ logger: logger$9
5552
5605
  }),
5553
5606
  modelConfig,
5554
5607
  payload,
@@ -5570,7 +5623,7 @@ const handleOpenAIResponsesProviderMessages = async (c, options) => {
5570
5623
  const responsesPayload = translateAnthropicMessagesToResponsesPayload(payload);
5571
5624
  if (providerConfig.name === "codex" && !wantsStream) responsesPayload.stream = true;
5572
5625
  if (applyResponsesApiContextManagement(responsesPayload, selectedModel?.capabilities.limits.max_prompt_tokens, { source: "messages" })) compactInputByLatestCompaction(responsesPayload);
5573
- debugJson(logger$6, "provider.messages.responses.request", {
5626
+ debugJson(logger$9, "provider.messages.responses.request", {
5574
5627
  payload: responsesPayload,
5575
5628
  provider
5576
5629
  });
@@ -5591,7 +5644,7 @@ const handleOpenAIResponsesProviderMessages = async (c, options) => {
5591
5644
  errorMessagePrefix: `${provider} messages responses stream`,
5592
5645
  parseEvent: (data) => parseResponsesProviderStreamChunk(data, providerConfig),
5593
5646
  upstreamResponse,
5594
- logger: logger$6
5647
+ logger: logger$9
5595
5648
  }),
5596
5649
  modelConfig,
5597
5650
  payload,
@@ -5611,7 +5664,7 @@ const handleOpenAIResponsesProviderMessages = async (c, options) => {
5611
5664
  }
5612
5665
  const upstreamResponse = await forwardProviderResponses(providerConfig, responsesPayload, c.req.raw.headers);
5613
5666
  if (!upstreamResponse.ok) {
5614
- logger$6.error("Failed to create provider responses", upstreamResponse);
5667
+ logger$9.error("Failed to create provider responses", upstreamResponse);
5615
5668
  throw new HTTPError("Failed to create provider responses", upstreamResponse);
5616
5669
  }
5617
5670
  if (responsesPayload.stream) return streamResponsesProviderMessages({
@@ -5662,13 +5715,13 @@ const applyOpenAICompatibleExtraBodyThinkingBudget = (payload, options) => {
5662
5715
  const handleOpenAICompatibleProviderMessages = async (c, options) => {
5663
5716
  const { modelConfig, payload, provider, providerConfig } = options;
5664
5717
  const openAIPayload = createOpenAICompatiblePayload(payload, modelConfig, providerConfig);
5665
- debugJson(logger$6, "provider.messages.openai_compatible.request", {
5718
+ debugJson(logger$9, "provider.messages.openai_compatible.request", {
5666
5719
  payload: openAIPayload,
5667
5720
  provider
5668
5721
  });
5669
5722
  const upstreamResponse = await forwardProviderChatCompletions(providerConfig, openAIPayload, c.req.raw.headers);
5670
5723
  if (!upstreamResponse.ok) {
5671
- logger$6.error("Failed to create openai-compatible responses", upstreamResponse);
5724
+ logger$9.error("Failed to create openai-compatible responses", upstreamResponse);
5672
5725
  throw new HTTPError("Failed to create openai-compatible responses", upstreamResponse);
5673
5726
  }
5674
5727
  const contentType = upstreamResponse.headers.get("content-type") ?? "";
@@ -5723,12 +5776,12 @@ const applyOpenAICompatibleRequestOverrides = (payload, options) => {
5723
5776
  for (const key of allowedKeys) if (Object.hasOwn(options.source, key)) payload[key] = options.source[key];
5724
5777
  };
5725
5778
  const streamProviderMessages = ({ c, modelConfig, payload, pricingCurrency, provider, upstreamResponse }) => {
5726
- logger$6.debug("provider.messages.streaming");
5779
+ logger$9.debug("provider.messages.streaming");
5727
5780
  const recordUsage = createProviderMessagesUsageRecorder(payload, provider, modelConfig, pricingCurrency);
5728
5781
  return streamSSE(c, async (stream) => {
5729
5782
  let usage = {};
5730
5783
  for await (const chunk of events(upstreamResponse)) {
5731
- logger$6.debug("provider.messages.raw_stream_event:", chunk.data);
5784
+ logger$9.debug("provider.messages.raw_stream_event:", chunk.data);
5732
5785
  const eventName = chunk.event;
5733
5786
  if (eventName === "ping") {
5734
5787
  await stream.writeSSE({
@@ -5754,7 +5807,7 @@ const streamProviderMessages = ({ c, modelConfig, payload, pricingCurrency, prov
5754
5807
  });
5755
5808
  };
5756
5809
  const streamOpenAICompatibleProviderMessages = ({ c, modelConfig, payload, pricingCurrency, provider, upstreamResponse }) => {
5757
- logger$6.debug("provider.messages.openai_compatible.streaming");
5810
+ logger$9.debug("provider.messages.openai_compatible.streaming");
5758
5811
  const recordUsage = createProviderMessagesUsageRecorder(payload, provider, modelConfig, pricingCurrency);
5759
5812
  return streamSSE(c, async (stream) => {
5760
5813
  let usage = {};
@@ -5766,7 +5819,7 @@ const streamOpenAICompatibleProviderMessages = ({ c, modelConfig, payload, prici
5766
5819
  thinkingBlockOpen: false
5767
5820
  };
5768
5821
  for await (const chunk of events(upstreamResponse)) {
5769
- logger$6.debug("provider.messages.openai_compatible.raw_stream_event:", chunk.data);
5822
+ logger$9.debug("provider.messages.openai_compatible.raw_stream_event:", chunk.data);
5770
5823
  if (chunk.event === "ping") {
5771
5824
  await stream.writeSSE({
5772
5825
  event: "ping",
@@ -5784,7 +5837,7 @@ const streamOpenAICompatibleProviderMessages = ({ c, modelConfig, payload, prici
5784
5837
  const events = translateChunkToAnthropicEvents(parsed, streamState);
5785
5838
  for (const event of events) {
5786
5839
  const eventData = JSON.stringify(event);
5787
- debugLazy(logger$6, () => ["provider.messages.openai_compatible.translated_event:", eventData]);
5840
+ debugLazy(logger$9, () => ["provider.messages.openai_compatible.translated_event:", eventData]);
5788
5841
  await stream.writeSSE({
5789
5842
  event: event.type,
5790
5843
  data: eventData
@@ -5793,7 +5846,7 @@ const streamOpenAICompatibleProviderMessages = ({ c, modelConfig, payload, prici
5793
5846
  }
5794
5847
  for (const event of flushPendingAnthropicStreamEvents(streamState)) {
5795
5848
  const eventData = JSON.stringify(event);
5796
- debugLazy(logger$6, () => ["provider.messages.openai_compatible.translated_event:", eventData]);
5849
+ debugLazy(logger$9, () => ["provider.messages.openai_compatible.translated_event:", eventData]);
5797
5850
  await stream.writeSSE({
5798
5851
  event: event.type,
5799
5852
  data: eventData
@@ -5803,13 +5856,13 @@ const streamOpenAICompatibleProviderMessages = ({ c, modelConfig, payload, prici
5803
5856
  });
5804
5857
  };
5805
5858
  const streamResponsesProviderMessages = ({ c, modelConfig, payload, pricingCurrency, provider, providerConfig, upstreamResponse }) => {
5806
- logger$6.debug("provider.messages.responses.streaming", { provider });
5859
+ logger$9.debug("provider.messages.responses.streaming", { provider });
5807
5860
  const recordUsage = createProviderMessagesUsageRecorder(payload, provider, modelConfig, pricingCurrency);
5808
5861
  return streamSSE(c, async (stream) => {
5809
5862
  let usage = {};
5810
5863
  const streamState = createResponsesStreamState({ toolSearchName: resolveBridgeToolSearchName(payload.tools) });
5811
5864
  for await (const chunk of upstreamResponse) {
5812
- logger$6.debug("provider.messages.responses.raw_stream_event:", chunk.data);
5865
+ logger$9.debug("provider.messages.responses.raw_stream_event:", chunk.data);
5813
5866
  if (chunk.event === "ping") {
5814
5867
  await stream.writeSSE({
5815
5868
  event: "ping",
@@ -5827,7 +5880,7 @@ const streamResponsesProviderMessages = ({ c, modelConfig, payload, pricingCurre
5827
5880
  const events = translateResponsesStreamEvent(parsed, streamState);
5828
5881
  for (const event of events) {
5829
5882
  const eventData = JSON.stringify(event);
5830
- debugLazy(logger$6, () => ["provider.messages.responses.translated_event:", eventData]);
5883
+ debugLazy(logger$9, () => ["provider.messages.responses.translated_event:", eventData]);
5831
5884
  await stream.writeSSE({
5832
5885
  event: event.type,
5833
5886
  data: eventData
@@ -5851,7 +5904,7 @@ const parseOpenAICompatibleStreamChunk = (data) => {
5851
5904
  try {
5852
5905
  return JSON.parse(data);
5853
5906
  } catch (error) {
5854
- logger$6.error("provider.messages.openai_compatible.parse_chunk_error", {
5907
+ logger$9.error("provider.messages.openai_compatible.parse_chunk_error", {
5855
5908
  data,
5856
5909
  error
5857
5910
  });
@@ -5864,7 +5917,7 @@ const parseResponsesProviderStreamChunk = (data, providerConfig) => {
5864
5917
  if (providerConfig.name === "codex") logCodexRateLimitsEvent(parsed);
5865
5918
  return parsed;
5866
5919
  } catch (error) {
5867
- logger$6.error("provider.messages.responses.parse_chunk_error", {
5920
+ logger$9.error("provider.messages.responses.parse_chunk_error", {
5868
5921
  provider: providerConfig.name,
5869
5922
  data,
5870
5923
  error
@@ -5889,7 +5942,7 @@ const parseProviderStreamEvent = (data) => {
5889
5942
  usage: {}
5890
5943
  };
5891
5944
  } catch (error) {
5892
- logger$6.error("provider.messages.streaming.adjust_tokens_error", {
5945
+ logger$9.error("provider.messages.streaming.adjust_tokens_error", {
5893
5946
  error,
5894
5947
  originalData: data
5895
5948
  });
@@ -5899,34 +5952,34 @@ const parseProviderStreamEvent = (data) => {
5899
5952
  const respondProviderMessagesJson = (c, options) => {
5900
5953
  const { body, modelConfig, payload, pricingCurrency, provider } = options;
5901
5954
  createProviderMessagesUsageRecorder(payload, provider, modelConfig, pricingCurrency)(normalizeAnthropicUsage(body.usage));
5902
- debugJson(logger$6, "provider.messages.no_stream result:", body);
5955
+ debugJson(logger$9, "provider.messages.no_stream result:", body);
5903
5956
  return c.json(body);
5904
5957
  };
5905
5958
  const respondOpenAICompatibleProviderMessagesJson = (c, options) => {
5906
5959
  const { body, modelConfig, payload, pricingCurrency, provider } = options;
5907
5960
  createProviderMessagesUsageRecorder(payload, provider, modelConfig, pricingCurrency)(normalizeOpenAIUsage(body.usage));
5908
5961
  const anthropicResponse = translateToAnthropic(body);
5909
- debugJson(logger$6, "provider.messages.openai_compatible.no_stream result:", anthropicResponse);
5962
+ debugJson(logger$9, "provider.messages.openai_compatible.no_stream result:", anthropicResponse);
5910
5963
  return c.json(anthropicResponse);
5911
5964
  };
5912
5965
  const respondResponsesProviderMessagesJson = (c, options) => {
5913
5966
  const { body, modelConfig, payload, pricingCurrency, provider, providerConfig } = options;
5914
5967
  createProviderMessagesUsageRecorder(payload, provider, modelConfig, pricingCurrency)(normalizeResponsesUsage(body.usage));
5915
5968
  const anthropicResponse = translateResponsesResultToAnthropic(body, { toolSearchName: resolveBridgeToolSearchName(payload.tools) });
5916
- debugJson(logger$6, "provider.messages.responses.no_stream result:", anthropicResponse);
5917
- if (providerConfig.name === "codex") logger$6.debug("provider.messages.codex.no_stream.result");
5969
+ debugJson(logger$9, "provider.messages.responses.no_stream result:", anthropicResponse);
5970
+ if (providerConfig.name === "codex") logger$9.debug("provider.messages.codex.no_stream.result");
5918
5971
  return c.json(anthropicResponse);
5919
5972
  };
5920
5973
  const respondWebSearchProviderMessagesJson = (c, options) => {
5921
5974
  const { body, modelConfig, payload, pricingCurrency, provider } = options;
5922
5975
  createProviderMessagesUsageRecorder(payload, provider, modelConfig, pricingCurrency)(normalizeResponsesUsage(body.usage));
5923
5976
  const { extract, response } = reconstructWebSearchResponse(payload, body, { requestId: body.id || `${provider}:${payload.model}` });
5924
- debugJson(logger$6, `Web search via responses: ${extract.queries.length} quer(y/ies), ${extract.sources.length} source(s)`, body);
5977
+ debugJson(logger$9, `Web search via responses: ${extract.queries.length} quer(y/ies), ${extract.sources.length} source(s)`, body);
5925
5978
  if (!payload.stream) return c.json(response);
5926
5979
  return streamSSE(c, async (stream) => {
5927
5980
  for (const event of buildSyntheticStreamEvents(response)) {
5928
5981
  const data = JSON.stringify(event);
5929
- logger$6.debug(`Web search stream event`, data);
5982
+ logger$9.debug(`Web search stream event`, data);
5930
5983
  await stream.writeSSE({
5931
5984
  event: event.type,
5932
5985
  data
@@ -6285,7 +6338,7 @@ const parseSubagentMarkerFromSystemReminder = (text) => {
6285
6338
  };
6286
6339
  //#endregion
6287
6340
  //#region src/routes/messages/handler.ts
6288
- const logger$5 = createHandlerLogger("messages-handler");
6341
+ const logger$8 = createHandlerLogger("messages-handler");
6289
6342
  const messagesFlowHandlers = {
6290
6343
  handleWithChatCompletions,
6291
6344
  handleWithMessagesApi,
@@ -6297,7 +6350,7 @@ async function handleCompletion(c) {
6297
6350
  anthropicPayload.model = resolveMappedModel(anthropicPayload.model);
6298
6351
  if (anthropicPayload.model !== requestedModel) consola.debug(`Resolved model mapping: ${requestedModel} -> ${anthropicPayload.model}`);
6299
6352
  const webSearchResult = await tryHandleWebSearch(c, anthropicPayload, {
6300
- logger: logger$5,
6353
+ logger: logger$8,
6301
6354
  forwardToProvider: (ctx, payload, provider) => handleProviderMessagesForProvider(ctx, {
6302
6355
  payload,
6303
6356
  provider
@@ -6312,18 +6365,18 @@ async function handleCompletion(c) {
6312
6365
  provider: providerModelAlias.provider
6313
6366
  });
6314
6367
  }
6315
- debugJson(logger$5, "Anthropic request payload:", anthropicPayload);
6368
+ debugJson(logger$8, "Anthropic request payload:", anthropicPayload);
6316
6369
  normalizeSystemMessages(anthropicPayload);
6317
6370
  sanitizeIdeTools(anthropicPayload);
6318
6371
  const subagentMarker = parseSubagentMarkerFromFirstUser(anthropicPayload);
6319
- if (subagentMarker) debugJson(logger$5, "Detected Subagent marker:", subagentMarker);
6372
+ if (subagentMarker) debugJson(logger$8, "Detected Subagent marker:", subagentMarker);
6320
6373
  let sessionId = getRootSessionId(anthropicPayload, c);
6321
6374
  const compactType = getCompactType(anthropicPayload);
6322
6375
  const anthropicBeta = c.req.header("anthropic-beta");
6323
- logger$5.debug("Anthropic Beta header:", anthropicBeta);
6376
+ logger$8.debug("Anthropic Beta header:", anthropicBeta);
6324
6377
  const noTools = !anthropicPayload.tools || anthropicPayload.tools.length === 0;
6325
6378
  if (anthropicBeta && noTools && compactType === 0) anthropicPayload.model = getSmallModel();
6326
- if (compactType) logger$5.debug("Compact request type:", compactType);
6379
+ if (compactType) logger$8.debug("Compact request type:", compactType);
6327
6380
  if (!state.tokenBasedBilling) {
6328
6381
  const lastMessageCacheControl = getLastMessageContentCacheControl(anthropicPayload.messages.at(-1));
6329
6382
  stripToolReferenceTurnBoundary(anthropicPayload);
@@ -6331,9 +6384,9 @@ async function handleCompletion(c) {
6331
6384
  applyLastMessageCacheControl(anthropicPayload, lastMessageCacheControl);
6332
6385
  }
6333
6386
  const requestId = generateRequestIdFromPayload(anthropicPayload, sessionId);
6334
- logger$5.debug("Generated request ID:", requestId);
6387
+ logger$8.debug("Generated request ID:", requestId);
6335
6388
  if (!sessionId) sessionId = getUUID(requestId);
6336
- logger$5.debug("Extracted session ID:", sessionId);
6389
+ logger$8.debug("Extracted session ID:", sessionId);
6337
6390
  const selectedModel = findEndpointModel(anthropicPayload.model);
6338
6391
  anthropicPayload.model = selectedModel?.id ?? anthropicPayload.model;
6339
6392
  if (shouldUseMessagesApi(selectedModel)) return await messagesFlowHandlers.handleWithMessagesApi(c, anthropicPayload, {
@@ -6343,7 +6396,7 @@ async function handleCompletion(c) {
6343
6396
  requestId,
6344
6397
  sessionId,
6345
6398
  compactType,
6346
- logger: logger$5
6399
+ logger: logger$8
6347
6400
  });
6348
6401
  if (shouldUseResponsesApi(selectedModel, compactType)) return await messagesFlowHandlers.handleWithResponsesApi(c, anthropicPayload, {
6349
6402
  subagentMarker,
@@ -6351,7 +6404,7 @@ async function handleCompletion(c) {
6351
6404
  requestId,
6352
6405
  sessionId,
6353
6406
  compactType,
6354
- logger: logger$5
6407
+ logger: logger$8
6355
6408
  });
6356
6409
  return await messagesFlowHandlers.handleWithChatCompletions(c, anthropicPayload, {
6357
6410
  subagentMarker,
@@ -6359,7 +6412,7 @@ async function handleCompletion(c) {
6359
6412
  requestId,
6360
6413
  sessionId,
6361
6414
  compactType,
6362
- logger: logger$5
6415
+ logger: logger$8
6363
6416
  });
6364
6417
  }
6365
6418
  const MESSAGES_ENDPOINT = "/v1/messages";
@@ -6388,17 +6441,46 @@ messageRoutes.post("/count_tokens", async (c) => {
6388
6441
  }
6389
6442
  });
6390
6443
  //#endregion
6444
+ //#region src/routes/models/codex-models.ts
6445
+ const logger$7 = createHandlerLogger("codex-models-handler");
6446
+ const CODEX_USER_AGENT_PATTERN = /^codex/iu;
6447
+ function isCodexUserAgent(userAgent) {
6448
+ return CODEX_USER_AGENT_PATTERN.test(userAgent?.trim() ?? "");
6449
+ }
6450
+ async function logCodexModelsResponse(response) {
6451
+ try {
6452
+ const responseText = await response.clone().text();
6453
+ debugJson(logger$7, "models.codex.response", {
6454
+ statusCode: response.status,
6455
+ models: responseText
6456
+ });
6457
+ } catch (error) {
6458
+ logger$7.warn("models.codex.response_log_error", { error });
6459
+ }
6460
+ }
6461
+ /**
6462
+ * Proxies a models request to the fixed Codex upstream models endpoint.
6463
+ * Returns a 404 JSON response when the codex provider is unavailable.
6464
+ * Pass `resolvedProviderConfig` when the caller already resolved the codex
6465
+ * provider to avoid a second resolve.
6466
+ */
6467
+ async function handleCodexModelsProxy(c, resolvedProviderConfig) {
6468
+ if (!(resolvedProviderConfig ?? await resolveProviderConfig("codex"))) return c.json({ error: {
6469
+ message: "Provider 'codex' not found or disabled",
6470
+ type: "invalid_request_error"
6471
+ } }, 404);
6472
+ const upstreamResponse = await forwardCodexModels(c.req.url, c.req.raw.headers);
6473
+ await logCodexModelsResponse(upstreamResponse);
6474
+ return createProviderProxyResponse(upstreamResponse);
6475
+ }
6476
+ //#endregion
6391
6477
  //#region src/routes/models/route.ts
6392
6478
  const modelRoutes = new Hono();
6393
- const logger$4 = createHandlerLogger("models-handler");
6479
+ const logger$6 = createHandlerLogger("models-handler");
6394
6480
  const EPOCH_ISO = (/* @__PURE__ */ new Date(0)).toISOString();
6395
- const CODEX_USER_AGENT_PATTERN = /^codex/iu;
6396
6481
  function isRecord(value) {
6397
6482
  return typeof value === "object" && value !== null && !Array.isArray(value);
6398
6483
  }
6399
- function isCodexUserAgent(userAgent) {
6400
- return CODEX_USER_AGENT_PATTERN.test(userAgent?.trim() ?? "");
6401
- }
6402
6484
  function normalizeCopilotModel(model) {
6403
6485
  const contextWindow = model.capabilities?.limits?.max_context_window_tokens ?? 0;
6404
6486
  const clientId = toClientModelId(model.id);
@@ -6443,7 +6525,7 @@ async function getProviderModels(provider, requestHeaders) {
6443
6525
  if (providerConfig.name === "codex") return getModels().data.map((model) => normalizeProviderModel(providerConfig.name, model)).filter((model) => model !== null);
6444
6526
  const response = await forwardProviderModels(providerConfig, requestHeaders);
6445
6527
  if (!response.ok) {
6446
- logger$4.warn("models.provider.skip_non_ok", {
6528
+ logger$6.warn("models.provider.skip_non_ok", {
6447
6529
  provider,
6448
6530
  statusCode: response.status
6449
6531
  });
@@ -6451,12 +6533,12 @@ async function getProviderModels(provider, requestHeaders) {
6451
6533
  }
6452
6534
  const body = await response.json();
6453
6535
  if (!isRecord(body) || !Array.isArray(body.data)) {
6454
- logger$4.warn("models.provider.skip_invalid_body", { provider });
6536
+ logger$6.warn("models.provider.skip_invalid_body", { provider });
6455
6537
  return [];
6456
6538
  }
6457
6539
  return body.data.map((model) => normalizeProviderModel(providerConfig.name, model)).filter((model) => model !== null);
6458
6540
  } catch (error) {
6459
- logger$4.warn("models.provider.skip_error", {
6541
+ logger$6.warn("models.provider.skip_error", {
6460
6542
  provider,
6461
6543
  error
6462
6544
  });
@@ -6474,28 +6556,9 @@ async function getAggregatedModels(requestHeaders) {
6474
6556
  return true;
6475
6557
  });
6476
6558
  }
6477
- async function logCodexModelsResponse(response) {
6478
- try {
6479
- const responseText = await response.clone().text();
6480
- debugJson(logger$4, "models.codex.response", {
6481
- statusCode: response.status,
6482
- models: responseText
6483
- });
6484
- } catch (error) {
6485
- logger$4.warn("models.codex.response_log_error", { error });
6486
- }
6487
- }
6488
6559
  modelRoutes.get("/", async (c) => {
6489
6560
  try {
6490
- if (isCodexUserAgent(c.req.header("user-agent"))) {
6491
- if (!await resolveProviderConfig("codex")) return c.json({ error: {
6492
- message: "Provider 'codex' not found or disabled",
6493
- type: "invalid_request_error"
6494
- } }, 404);
6495
- const upstreamResponse = await forwardCodexModels(c.req.url, c.req.raw.headers);
6496
- await logCodexModelsResponse(upstreamResponse);
6497
- return createProviderProxyResponse(upstreamResponse);
6498
- }
6561
+ if (isCodexUserAgent(c.req.header("user-agent"))) return await handleCodexModelsProxy(c);
6499
6562
  const models = await getAggregatedModels(c.req.raw.headers);
6500
6563
  return c.json({
6501
6564
  object: "list",
@@ -6507,6 +6570,82 @@ modelRoutes.get("/", async (c) => {
6507
6570
  }
6508
6571
  });
6509
6572
  //#endregion
6573
+ //#region src/routes/provider/alpha-search/route.ts
6574
+ const logger$5 = createHandlerLogger("provider-alpha-search-handler");
6575
+ const providerAlphaSearchRoutes = new Hono();
6576
+ providerAlphaSearchRoutes.post("/", async (c) => {
6577
+ const provider = c.req.param("provider") ?? "";
6578
+ try {
6579
+ const providerConfig = await resolveProviderConfig(provider);
6580
+ if (!providerConfig) return c.json({ error: {
6581
+ message: `Provider '${provider}' not found or disabled`,
6582
+ type: "invalid_request_error"
6583
+ } }, 404);
6584
+ if (providerConfig.name === "codex") return await handleCodexAlphaSearch(c, providerConfig);
6585
+ await debugJsonAsync(logger$5, "provider.alpha_search.request", async () => ({
6586
+ body: await c.req.raw.clone().text(),
6587
+ provider
6588
+ }));
6589
+ const upstreamResponse = await forwardProviderAlphaSearch(providerConfig, c.req.raw);
6590
+ await debugJsonAsync(logger$5, "provider.alpha_search.response", async () => ({
6591
+ body: await upstreamResponse.clone().text(),
6592
+ provider,
6593
+ statusCode: upstreamResponse.status
6594
+ }));
6595
+ return createProviderProxyResponse(upstreamResponse);
6596
+ } catch (error) {
6597
+ logger$5.error("provider.alpha_search.error", {
6598
+ provider,
6599
+ error
6600
+ });
6601
+ return await forwardError(c, error);
6602
+ }
6603
+ });
6604
+ //#endregion
6605
+ //#region src/routes/provider/images/route.ts
6606
+ const logger$4 = createHandlerLogger("provider-images-handler");
6607
+ const providerImageRoutes = new Hono();
6608
+ function getContentMetadata(headers) {
6609
+ return {
6610
+ contentType: headers.get("content-type"),
6611
+ contentLength: headers.get("content-length")
6612
+ };
6613
+ }
6614
+ async function handleProviderImages(c, operation) {
6615
+ const provider = c.req.param("provider") ?? "";
6616
+ try {
6617
+ const providerConfig = await resolveProviderConfig(provider);
6618
+ if (!providerConfig) return c.json({ error: {
6619
+ message: `Provider '${provider}' not found or disabled`,
6620
+ type: "invalid_request_error"
6621
+ } }, 404);
6622
+ if (providerConfig.name === "codex") return await handleCodexImages(c, operation, providerConfig);
6623
+ if (operation === "generations") await debugJsonAsync(logger$4, "provider.images.generations.request", async () => ({
6624
+ body: await c.req.raw.clone().text(),
6625
+ provider
6626
+ }));
6627
+ else debugJson(logger$4, "provider.images.edits.request", {
6628
+ ...getContentMetadata(c.req.raw.headers),
6629
+ provider
6630
+ });
6631
+ const upstreamResponse = await forwardProviderImages(providerConfig, c.req.raw, operation);
6632
+ debugJson(logger$4, `provider.images.${operation}.response`, {
6633
+ ...getContentMetadata(upstreamResponse.headers),
6634
+ provider,
6635
+ statusCode: upstreamResponse.status
6636
+ });
6637
+ return createProviderProxyResponse(upstreamResponse);
6638
+ } catch (error) {
6639
+ logger$4.error(`provider.images.${operation}.error`, {
6640
+ provider,
6641
+ error
6642
+ });
6643
+ return await forwardError(c, error);
6644
+ }
6645
+ }
6646
+ providerImageRoutes.post("/generations", (c) => handleProviderImages(c, "generations"));
6647
+ providerImageRoutes.post("/edits", (c) => handleProviderImages(c, "edits"));
6648
+ //#endregion
6510
6649
  //#region src/routes/provider/messages/route.ts
6511
6650
  const providerMessageRoutes = new Hono();
6512
6651
  providerMessageRoutes.post("/", async (c) => {
@@ -6536,6 +6675,7 @@ providerModelRoutes.get("/", async (c) => {
6536
6675
  type: "invalid_request_error"
6537
6676
  } }, 404);
6538
6677
  if (providerConfig.name === "codex") {
6678
+ if (isCodexUserAgent(c.req.header("user-agent"))) return await handleCodexModelsProxy(c, providerConfig);
6539
6679
  const models = getModels();
6540
6680
  return c.json({
6541
6681
  object: "list",
@@ -6690,6 +6830,20 @@ const isResponsesStream = (value) => {
6690
6830
  return Boolean(value) && typeof value[Symbol.asyncIterator] === "function";
6691
6831
  };
6692
6832
  //#endregion
6833
+ //#region src/routes/provider/responses/route.ts
6834
+ const providerResponsesRoutes = new Hono();
6835
+ providerResponsesRoutes.post("/", async (c) => {
6836
+ try {
6837
+ const provider = c.req.param("provider") ?? "";
6838
+ return await handleProviderResponsesForProvider(c, {
6839
+ payload: await c.req.json(),
6840
+ provider
6841
+ });
6842
+ } catch (error) {
6843
+ return await forwardError(c, error);
6844
+ }
6845
+ });
6846
+ //#endregion
6693
6847
  //#region src/routes/responses/stream-id-sync.ts
6694
6848
  const createStreamIdTracker = () => ({ outputItems: /* @__PURE__ */ new Map() });
6695
6849
  const fixStreamIds = (data, event, tracker) => {
@@ -6990,7 +7144,10 @@ server.route("/v1/images", imageRoutes);
6990
7144
  server.route("/v1/messages", messageRoutes);
6991
7145
  server.route("/:provider/v1/messages", providerMessageRoutes);
6992
7146
  server.route("/:provider/v1/models", providerModelRoutes);
7147
+ server.route("/:provider/v1/responses", providerResponsesRoutes);
7148
+ server.route("/:provider/v1/alpha/search", providerAlphaSearchRoutes);
7149
+ server.route("/:provider/v1/images", providerImageRoutes);
6993
7150
  //#endregion
6994
7151
  export { server };
6995
7152
 
6996
- //# sourceMappingURL=server-CF0okzl9.js.map
7153
+ //# sourceMappingURL=server-BayMzJcy.js.map