@code-yeongyu/senpi-ai 2026.7.26 → 2026.7.28

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.
Files changed (66) hide show
  1. package/dist/api/anthropic-messages.d.ts +1 -0
  2. package/dist/api/anthropic-messages.d.ts.map +1 -1
  3. package/dist/api/anthropic-messages.js +161 -50
  4. package/dist/api/anthropic-messages.js.map +1 -1
  5. package/dist/api/azure-openai-responses.js +3 -1
  6. package/dist/api/azure-openai-responses.js.map +1 -1
  7. package/dist/api/bedrock-converse-stream.d.ts +1 -0
  8. package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  9. package/dist/api/bedrock-converse-stream.js +2 -43
  10. package/dist/api/bedrock-converse-stream.js.map +1 -1
  11. package/dist/api/openai-codex-responses/reasoning.d.ts +14 -0
  12. package/dist/api/openai-codex-responses/reasoning.d.ts.map +1 -0
  13. package/dist/api/openai-codex-responses/reasoning.js +27 -0
  14. package/dist/api/openai-codex-responses/reasoning.js.map +1 -0
  15. package/dist/api/openai-codex-responses.d.ts +2 -1
  16. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  17. package/dist/api/openai-codex-responses.js +4 -12
  18. package/dist/api/openai-codex-responses.js.map +1 -1
  19. package/dist/api/openai-completions.d.ts +3 -8
  20. package/dist/api/openai-completions.d.ts.map +1 -1
  21. package/dist/api/openai-completions.js +8 -122
  22. package/dist/api/openai-completions.js.map +1 -1
  23. package/dist/api/openai-responses.d.ts.map +1 -1
  24. package/dist/api/openai-responses.js +1 -0
  25. package/dist/api/openai-responses.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/model.d.ts +7 -0
  31. package/dist/model.d.ts.map +1 -1
  32. package/dist/model.js.map +1 -1
  33. package/dist/oauth.d.ts +2 -1
  34. package/dist/oauth.d.ts.map +1 -1
  35. package/dist/oauth.js +2 -1
  36. package/dist/oauth.js.map +1 -1
  37. package/dist/openai-responses-compat.d.ts +24 -0
  38. package/dist/openai-responses-compat.d.ts.map +1 -0
  39. package/dist/openai-responses-compat.js +2 -0
  40. package/dist/openai-responses-compat.js.map +1 -0
  41. package/dist/providers/data/.manifest.json +1 -1
  42. package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  43. package/dist/providers/data/fireworks.json +1 -1
  44. package/dist/providers/data/huggingface.json +1 -1
  45. package/dist/providers/data/nvidia.json +1 -1
  46. package/dist/providers/data/openai.json +1 -1
  47. package/dist/providers/data/opencode.json +1 -1
  48. package/dist/providers/data/openrouter.json +1 -1
  49. package/dist/providers/data/together.json +1 -1
  50. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  51. package/dist/types.d.ts +8 -22
  52. package/dist/types.d.ts.map +1 -1
  53. package/dist/types.js.map +1 -1
  54. package/dist/utils/prompt-cache-ttl.d.ts +32 -0
  55. package/dist/utils/prompt-cache-ttl.d.ts.map +1 -0
  56. package/dist/utils/prompt-cache-ttl.js +294 -0
  57. package/dist/utils/prompt-cache-ttl.js.map +1 -0
  58. package/dist/utils/provider-retry.d.ts +5 -0
  59. package/dist/utils/provider-retry.d.ts.map +1 -1
  60. package/dist/utils/provider-retry.js +46 -1
  61. package/dist/utils/provider-retry.js.map +1 -1
  62. package/dist/utils/retry.d.ts +7 -0
  63. package/dist/utils/retry.d.ts.map +1 -1
  64. package/dist/utils/retry.js +14 -1
  65. package/dist/utils/retry.js.map +1 -1
  66. package/package.json +1 -1
@@ -5,8 +5,9 @@ import { AssistantMessageEventStream } from "../utils/event-stream.js";
5
5
  import { shortHash } from "../utils/hash.js";
6
6
  import { headersToRecord } from "../utils/headers.js";
7
7
  import { parseStreamingJson } from "../utils/json-parse.js";
8
+ import { getOpenAICompletionsCompat as getCompat, } from "../utils/prompt-cache-ttl.js";
8
9
  import { getProviderEnvValue } from "../utils/provider-env.js";
9
- import { retryProviderRequest } from "../utils/provider-retry.js";
10
+ import { retryProviderStreamRequest } from "../utils/provider-retry.js";
10
11
  import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
11
12
  import { isForcedToolChoiceUnsupportedError, omitToolChoiceParam } from "../utils/tool-choice-fallback.js";
12
13
  import { normalizeToolParametersForMoonshot, normalizeToolParametersForOpenAICompat, } from "../utils/tool-schema-compat.js";
@@ -15,6 +16,7 @@ import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copi
15
16
  import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js";
16
17
  import { applyExtraBody, buildBaseOptions, clampMaxForOpenAI, OPENAI_COMPLETIONS_RESERVED_BODY_KEYS, } from "./simple-options.js";
17
18
  import { transformMessages } from "./transform-messages.js";
19
+ export { getOpenAICompletionsCompat as getCompat, } from "../utils/prompt-cache-ttl.js";
18
20
  const KIMI_K3_THINKING_LEVEL_MAP = {
19
21
  off: null,
20
22
  minimal: null,
@@ -246,12 +248,11 @@ export const stream = (model, context, options) => {
246
248
  throw error;
247
249
  }
248
250
  };
249
- const { data: openaiStream, response } = await retryProviderRequest(createRequest, {
250
- maxRetries: options?.maxRetries,
251
- maxRetryDelayMs: options?.maxRetryDelayMs,
252
- signal: options?.signal,
253
- });
254
- await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
251
+ const { stream: openaiStream } = await retryProviderStreamRequest(async () => {
252
+ const { data, response } = await createRequest();
253
+ await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
254
+ return { stream: data, metadata: response };
255
+ }, { maxRetries: options?.maxRetries, maxRetryDelayMs: options?.maxRetryDelayMs, signal: options?.signal });
255
256
  stream.push({ type: "start", partial: output });
256
257
  let textBlock = null;
257
258
  let thinkingBlock = null;
@@ -1266,119 +1267,4 @@ function mapStopReason(reason) {
1266
1267
  };
1267
1268
  }
1268
1269
  }
1269
- /**
1270
- * Detect compatibility settings from provider and baseUrl for known providers.
1271
- * Provider takes precedence over URL-based detection since it's explicitly configured.
1272
- * Returns a fully resolved OpenAICompletionsCompat object with all fields set.
1273
- */
1274
- function detectCompat(model) {
1275
- const provider = model.provider;
1276
- const baseUrl = model.baseUrl;
1277
- const isZai = provider === "zai" ||
1278
- provider === "zai-coding-cn" ||
1279
- baseUrl.includes("api.z.ai") ||
1280
- baseUrl.includes("open.bigmodel.cn");
1281
- const isTogether = provider === "together" || baseUrl.includes("api.together.ai") || baseUrl.includes("api.together.xyz");
1282
- const isMoonshot = provider === "moonshotai" || provider === "moonshotai-cn" || baseUrl.includes("api.moonshot.");
1283
- const isOpenRouter = provider === "openrouter" || baseUrl.includes("openrouter.ai");
1284
- const isCloudflareWorkersAI = provider === "cloudflare-workers-ai" || baseUrl.includes("api.cloudflare.com");
1285
- const isCloudflareAiGateway = provider === "cloudflare-ai-gateway" || baseUrl.includes("gateway.ai.cloudflare.com");
1286
- const isNvidia = provider === "nvidia" || baseUrl.includes("integrate.api.nvidia.com");
1287
- const isAntLing = provider === "ant-ling" || baseUrl.includes("api.ant-ling.com");
1288
- const isNonStandard = isNvidia ||
1289
- provider === "cerebras" ||
1290
- baseUrl.includes("cerebras.ai") ||
1291
- provider === "xai" ||
1292
- baseUrl.includes("api.x.ai") ||
1293
- isTogether ||
1294
- baseUrl.includes("chutes.ai") ||
1295
- baseUrl.includes("deepseek.com") ||
1296
- isZai ||
1297
- isMoonshot ||
1298
- provider === "opencode" ||
1299
- baseUrl.includes("opencode.ai") ||
1300
- isCloudflareWorkersAI ||
1301
- isCloudflareAiGateway ||
1302
- isAntLing;
1303
- const useMaxTokens = baseUrl.includes("chutes.ai") || isMoonshot || isCloudflareAiGateway || isTogether || isNvidia || isAntLing;
1304
- const isGrok = provider === "xai" || baseUrl.includes("api.x.ai");
1305
- const isDeepSeek = provider === "deepseek" || baseUrl.includes("deepseek.com");
1306
- const isOpenRouterDeveloperRoleModel = isOpenRouter && (model.id.startsWith("anthropic/") || model.id.startsWith("openai/"));
1307
- const cacheControlFormat = provider === "openrouter" && model.id.startsWith("anthropic/") ? "anthropic" : undefined;
1308
- return {
1309
- supportsStore: !isNonStandard,
1310
- supportsDeveloperRole: isOpenRouterDeveloperRoleModel || (!isNonStandard && !isOpenRouter),
1311
- supportsReasoningEffort: !isGrok && !isZai && !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia && !isAntLing,
1312
- supportsUsageInStreaming: true,
1313
- maxTokensField: useMaxTokens ? "max_tokens" : "max_completion_tokens",
1314
- requiresToolResultName: false,
1315
- requiresAssistantAfterToolResult: false,
1316
- requiresThinkingAsText: false,
1317
- requiresReasoningContentOnAssistantMessages: isDeepSeek,
1318
- thinkingFormat: isDeepSeek
1319
- ? "deepseek"
1320
- : isZai
1321
- ? "zai"
1322
- : isTogether
1323
- ? "together"
1324
- : isAntLing
1325
- ? "ant-ling"
1326
- : isOpenRouter
1327
- ? "openrouter"
1328
- : "openai",
1329
- openRouterRouting: {},
1330
- vercelGatewayRouting: {},
1331
- chatTemplateKwargs: {},
1332
- zaiToolStream: false,
1333
- supportsStrictMode: !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia,
1334
- toolSchemaFlavor: isMoonshot ? "moonshot-mfjs" : undefined,
1335
- supportsDisabledThinking: true,
1336
- toolCallFormat: undefined,
1337
- supportsOpenAIGrammarTools: false,
1338
- cacheControlFormat,
1339
- sendSessionAffinityHeaders: false,
1340
- deferredToolsMode: undefined,
1341
- sessionAffinityFormat: isOpenRouter ? "openrouter" : "openai",
1342
- supportsLongCacheRetention: !(isTogether ||
1343
- isCloudflareWorkersAI ||
1344
- isCloudflareAiGateway ||
1345
- isNvidia ||
1346
- isAntLing),
1347
- };
1348
- }
1349
- /**
1350
- * Get resolved compatibility settings for a model.
1351
- * Auto-detects from provider/URL then overrides with explicit model.compat.
1352
- */
1353
- function getCompat(model) {
1354
- const detected = detectCompat(model);
1355
- if (!model.compat)
1356
- return detected;
1357
- return {
1358
- supportsStore: model.compat.supportsStore ?? detected.supportsStore,
1359
- supportsDeveloperRole: model.compat.supportsDeveloperRole ?? detected.supportsDeveloperRole,
1360
- supportsReasoningEffort: model.compat.supportsReasoningEffort ?? detected.supportsReasoningEffort,
1361
- supportsUsageInStreaming: model.compat.supportsUsageInStreaming ?? detected.supportsUsageInStreaming,
1362
- maxTokensField: model.compat.maxTokensField ?? detected.maxTokensField,
1363
- requiresToolResultName: model.compat.requiresToolResultName ?? detected.requiresToolResultName,
1364
- requiresAssistantAfterToolResult: model.compat.requiresAssistantAfterToolResult ?? detected.requiresAssistantAfterToolResult,
1365
- requiresThinkingAsText: model.compat.requiresThinkingAsText ?? detected.requiresThinkingAsText,
1366
- requiresReasoningContentOnAssistantMessages: model.compat.requiresReasoningContentOnAssistantMessages ??
1367
- detected.requiresReasoningContentOnAssistantMessages,
1368
- thinkingFormat: model.compat.thinkingFormat ?? detected.thinkingFormat,
1369
- supportsDisabledThinking: model.compat.supportsDisabledThinking ?? detected.supportsDisabledThinking,
1370
- openRouterRouting: model.compat.openRouterRouting ?? detected.openRouterRouting,
1371
- vercelGatewayRouting: model.compat.vercelGatewayRouting ?? detected.vercelGatewayRouting,
1372
- chatTemplateKwargs: model.compat.chatTemplateKwargs ?? detected.chatTemplateKwargs,
1373
- zaiToolStream: model.compat.zaiToolStream ?? detected.zaiToolStream,
1374
- supportsStrictMode: model.compat.supportsStrictMode ?? detected.supportsStrictMode,
1375
- toolCallFormat: model.compat.toolCallFormat ?? detected.toolCallFormat,
1376
- supportsOpenAIGrammarTools: model.compat.supportsOpenAIGrammarTools ?? detected.supportsOpenAIGrammarTools,
1377
- cacheControlFormat: model.compat.cacheControlFormat ?? detected.cacheControlFormat,
1378
- sendSessionAffinityHeaders: model.compat.sendSessionAffinityHeaders ?? detected.sendSessionAffinityHeaders,
1379
- deferredToolsMode: model.compat.deferredToolsMode ?? detected.deferredToolsMode,
1380
- sessionAffinityFormat: model.compat.sessionAffinityFormat ?? detected.sessionAffinityFormat,
1381
- supportsLongCacheRetention: model.compat.supportsLongCacheRetention ?? detected.supportsLongCacheRetention,
1382
- };
1383
- }
1384
1270
  //# sourceMappingURL=openai-completions.js.map