@omnicross/core 0.1.8 → 0.1.9

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 (93) hide show
  1. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +5 -3
  2. package/dist/auth/GeminiCodeAssistProjectResolver.js +4 -2
  3. package/dist/{chunk-N5T4M4GU.js → chunk-2UTGX6FM.js} +2 -2
  4. package/dist/{chunk-32O35CIF.js → chunk-45FHEOKW.js} +22 -7
  5. package/dist/{chunk-LVUCAWMK.js → chunk-55FMGZ3L.js} +13 -5
  6. package/dist/{chunk-OF3BECU2.cjs → chunk-56QD3YW6.cjs} +18 -5
  7. package/dist/{chunk-V4TXMEJS.cjs → chunk-5LNYGCIW.cjs} +15 -7
  8. package/dist/chunk-77USGNRW.cjs +37 -0
  9. package/dist/chunk-AOFWNWLT.cjs +203 -0
  10. package/dist/{chunk-LB6EBS6Y.js → chunk-CCVRRJOX.js} +17 -4
  11. package/dist/{chunk-OVQBNVSV.cjs → chunk-CMVXX7ON.cjs} +42 -27
  12. package/dist/{chunk-QYC54PMG.js → chunk-CQIJCPMF.js} +177 -77
  13. package/dist/{chunk-PEGTIPB3.js → chunk-HKB656B4.js} +37 -43
  14. package/dist/chunk-N2EIM2XJ.js +203 -0
  15. package/dist/{chunk-MYYR3HZL.js → chunk-NGYOO5TO.js} +5 -5
  16. package/dist/{chunk-OKMJLEXX.cjs → chunk-OC6DOOFX.cjs} +5 -5
  17. package/dist/{chunk-2Z4XM3H5.cjs → chunk-P7EM6BND.cjs} +10 -10
  18. package/dist/{chunk-KBM2W6UY.cjs → chunk-RICPANBY.cjs} +41 -24
  19. package/dist/{chunk-TOVPMMHM.js → chunk-S3DYFEBE.js} +37 -20
  20. package/dist/chunk-WYVGULTQ.js +37 -0
  21. package/dist/{chunk-26K6T2YS.cjs → chunk-XELFM7KL.cjs} +301 -201
  22. package/dist/{chunk-OXHNSZ53.cjs → chunk-ZQQUD66M.cjs} +54 -60
  23. package/dist/completion/CompletionService.cjs +12 -10
  24. package/dist/completion/CompletionService.js +11 -9
  25. package/dist/completion.cjs +12 -10
  26. package/dist/completion.js +11 -9
  27. package/dist/index.cjs +12 -10
  28. package/dist/index.d.cts +2 -2
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.js +11 -9
  31. package/dist/outbound-api/routeResolver.d.cts +1 -1
  32. package/dist/outbound-api/routeResolver.d.ts +1 -1
  33. package/dist/outbound-api/types.d.cts +1 -1
  34. package/dist/outbound-api/types.d.ts +1 -1
  35. package/dist/outbound-api.cjs +12 -10
  36. package/dist/outbound-api.d.cts +1 -1
  37. package/dist/outbound-api.d.ts +1 -1
  38. package/dist/outbound-api.js +11 -9
  39. package/dist/pipeline/AccountAllowanceScheduling.d.cts +1 -1
  40. package/dist/pipeline/AccountAllowanceScheduling.d.ts +1 -1
  41. package/dist/pipeline/executeProviderCall.d.cts +2 -0
  42. package/dist/pipeline/executeProviderCall.d.ts +2 -0
  43. package/dist/pipeline/resolveProviderChain.d.cts +1 -0
  44. package/dist/pipeline/resolveProviderChain.d.ts +1 -0
  45. package/dist/pipeline/resolveSubscriptionChain.d.cts +2 -0
  46. package/dist/pipeline/resolveSubscriptionChain.d.ts +2 -0
  47. package/dist/ports/provider-config-source.d.cts +1 -0
  48. package/dist/ports/provider-config-source.d.ts +1 -0
  49. package/dist/ports.d.cts +1 -1
  50. package/dist/ports.d.ts +1 -1
  51. package/dist/provider-proxy/ProviderProxy.cjs +12 -10
  52. package/dist/provider-proxy/ProviderProxy.js +11 -9
  53. package/dist/provider-proxy/ingress/providerProxyShared.cjs +12 -10
  54. package/dist/provider-proxy/ingress/providerProxyShared.js +11 -9
  55. package/dist/provider-proxy.cjs +12 -10
  56. package/dist/provider-proxy.js +11 -9
  57. package/dist/transformer/TransformerChainExecutor.d.cts +2 -0
  58. package/dist/transformer/TransformerChainExecutor.d.ts +2 -0
  59. package/dist/transformer/TransformerService.d.cts +2 -0
  60. package/dist/transformer/TransformerService.d.ts +2 -0
  61. package/dist/transformer/transformers/AnthropicTransformer.cjs +4 -2
  62. package/dist/transformer/transformers/AnthropicTransformer.d.cts +7 -2
  63. package/dist/transformer/transformers/AnthropicTransformer.d.ts +7 -2
  64. package/dist/transformer/transformers/AnthropicTransformer.js +3 -1
  65. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +5 -3
  66. package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.cts +2 -0
  67. package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.ts +2 -0
  68. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +4 -2
  69. package/dist/transformer/transformers/GeminiTransformer.cjs +5 -3
  70. package/dist/transformer/transformers/GeminiTransformer.d.cts +4 -2
  71. package/dist/transformer/transformers/GeminiTransformer.d.ts +4 -2
  72. package/dist/transformer/transformers/GeminiTransformer.js +4 -2
  73. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -2
  74. package/dist/transformer/transformers/OpenAIResponseTransformer.d.cts +4 -2
  75. package/dist/transformer/transformers/OpenAIResponseTransformer.d.ts +4 -2
  76. package/dist/transformer/transformers/OpenAIResponseTransformer.js +2 -1
  77. package/dist/transformer/transformers/OpenAITransformer.cjs +3 -2
  78. package/dist/transformer/transformers/OpenAITransformer.d.cts +3 -1
  79. package/dist/transformer/transformers/OpenAITransformer.d.ts +3 -1
  80. package/dist/transformer/transformers/OpenAITransformer.js +2 -1
  81. package/dist/transformer/transformers.cjs +10 -8
  82. package/dist/transformer/transformers.d.cts +2 -0
  83. package/dist/transformer/transformers.d.ts +2 -0
  84. package/dist/transformer/transformers.js +9 -7
  85. package/dist/transformer/types.d.cts +16 -5
  86. package/dist/transformer/types.d.ts +16 -5
  87. package/dist/transformer.cjs +28 -9
  88. package/dist/transformer.d.cts +76 -1
  89. package/dist/transformer.d.ts +76 -1
  90. package/dist/transformer.js +28 -9
  91. package/package.json +1 -1
  92. /package/dist/{chunk-FZ46M34D.cjs → chunk-QVOB2DNX.cjs} +0 -0
  93. /package/dist/{chunk-46RLHI7D.js → chunk-WTQMX2Q6.js} +0 -0
@@ -0,0 +1,203 @@
1
+ // src/reasoning/reasoning-plan.ts
2
+ import {
3
+ applyAlias,
4
+ normalizeModelId,
5
+ resolveModelCapabilities
6
+ } from "@omnicross/contracts/canonical-models";
7
+ import {
8
+ EFFORT_RATIO,
9
+ findLegacyTokenLimit
10
+ } from "@omnicross/contracts/thinking-config";
11
+ var THINK_LEVELS = [
12
+ "none",
13
+ "minimal",
14
+ "low",
15
+ "medium",
16
+ "high",
17
+ "xhigh",
18
+ "max"
19
+ ];
20
+ var THINK_LEVEL_SET = new Set(THINK_LEVELS);
21
+ var ANTHROPIC_FALLBACK_BUDGET = {
22
+ minimal: 1024,
23
+ low: 2048,
24
+ medium: 8192,
25
+ high: 32768,
26
+ xhigh: 32768,
27
+ max: 32768
28
+ };
29
+ function normalizeThinkLevel(value) {
30
+ if (typeof value !== "string") return void 0;
31
+ const normalized = value.toLowerCase();
32
+ return THINK_LEVEL_SET.has(normalized) ? normalized : void 0;
33
+ }
34
+ function extractReasoningIntent(request) {
35
+ const reasoning = request.reasoning;
36
+ if (reasoning) {
37
+ if (reasoning.enabled === false) {
38
+ return { ...reasoning, effort: "none", enabled: false };
39
+ }
40
+ const effort = normalizeThinkLevel(reasoning.effort);
41
+ if (effort) {
42
+ return { ...reasoning, effort, enabled: effort !== "none" };
43
+ }
44
+ if (reasoning.enabled === true || isPositiveFinite(reasoning.max_tokens)) {
45
+ return { ...reasoning, effort: "medium", enabled: true };
46
+ }
47
+ return void 0;
48
+ }
49
+ const nativeEffort = normalizeThinkLevel(request.reasoning_effort);
50
+ if (!nativeEffort) return void 0;
51
+ return { effort: nativeEffort, enabled: nativeEffort !== "none" };
52
+ }
53
+ function canonicalModelId(model) {
54
+ return applyAlias(normalizeModelId(model));
55
+ }
56
+ function findModelOverride(targetModel, modelConfigs) {
57
+ if (!modelConfigs) return void 0;
58
+ const targetId = canonicalModelId(targetModel);
59
+ return modelConfigs.find(
60
+ (config) => config.id === targetModel || canonicalModelId(config.id) === targetId
61
+ );
62
+ }
63
+ function resolveTargetModelCapabilities(targetModel, provider) {
64
+ const rowOverride = findModelOverride(targetModel, provider?.modelConfigs);
65
+ return resolveModelCapabilities(targetModel, void 0, rowOverride);
66
+ }
67
+ function resolveReasoningEffort(requested, targetModel, provider) {
68
+ if (requested === "none") return "none";
69
+ const capabilities = resolveTargetModelCapabilities(targetModel, provider);
70
+ const candidates = capabilities.thinkingLevels?.map(normalizeThinkLevel).filter((level) => level !== void 0 && level !== "none") ?? [];
71
+ if (candidates.includes(requested)) return requested;
72
+ if (capabilities.thinkingLevels?.length && candidates.length === 0) return "none";
73
+ if (candidates.length === 0) return requested;
74
+ const requestedRatio = EFFORT_RATIO[requested];
75
+ return candidates.reduce((best, candidate) => {
76
+ const distance = Math.abs(EFFORT_RATIO[candidate] - requestedRatio);
77
+ const bestDistance = Math.abs(EFFORT_RATIO[best] - requestedRatio);
78
+ if (distance < bestDistance - Number.EPSILON) return candidate;
79
+ if (Math.abs(distance - bestDistance) <= Number.EPSILON && EFFORT_RATIO[candidate] < EFFORT_RATIO[best]) {
80
+ return candidate;
81
+ }
82
+ return best;
83
+ });
84
+ }
85
+ function protocolFallback(model, target) {
86
+ if (target === "anthropic") return { min: 1024, max: 128e3 };
87
+ if (target === "gemini") {
88
+ return model.toLowerCase().includes("pro") ? { min: 128, max: 32768 } : { min: 0, max: 24576 };
89
+ }
90
+ return void 0;
91
+ }
92
+ function resolveTokenLimit(model, provider, target) {
93
+ const capabilities = resolveTargetModelCapabilities(model, provider);
94
+ if (capabilities.thinkingTokenLimit) {
95
+ return { limits: capabilities.thinkingTokenLimit, source: "capability" };
96
+ }
97
+ const legacy = findLegacyTokenLimit(model);
98
+ if (legacy) return { limits: legacy, source: "legacy" };
99
+ const fallback = protocolFallback(model, target);
100
+ return fallback ? { limits: fallback, source: "protocol" } : void 0;
101
+ }
102
+ function resolveReasoningTokenLimit(model, provider, target) {
103
+ return resolveTokenLimit(model, provider, target)?.limits;
104
+ }
105
+ function isPositiveFinite(value) {
106
+ return typeof value === "number" && Number.isFinite(value) && value > 0;
107
+ }
108
+ function isFiniteNumber(value) {
109
+ return typeof value === "number" && Number.isFinite(value);
110
+ }
111
+ function clampBudget(rawBudget, limits, target, effort, requestMaxTokens, explicitBudget = false) {
112
+ const protocolMin = target === "anthropic" ? 1024 : 0;
113
+ const min = Math.max(protocolMin, Math.floor(limits.min));
114
+ let max = Math.max(min, Math.floor(limits.max));
115
+ if (isPositiveFinite(requestMaxTokens)) {
116
+ const requestCeiling = target === "anthropic" ? explicitBudget ? Math.floor(requestMaxTokens) - 1 : Math.max(
117
+ min,
118
+ Math.floor(requestMaxTokens * Math.min(EFFORT_RATIO[effort], 0.75))
119
+ ) : Math.floor(requestMaxTokens);
120
+ if (requestCeiling < min) return void 0;
121
+ max = Math.min(max, requestCeiling);
122
+ }
123
+ return Math.max(min, Math.min(max, Math.floor(rawBudget)));
124
+ }
125
+ function resolveBudget(intent, effort, model, provider, target, requestMaxTokens) {
126
+ const resolved = resolveTokenLimit(model, provider, target);
127
+ if (!resolved) return void 0;
128
+ const { limits, source } = resolved;
129
+ const explicitBudget = isFiniteNumber(intent.max_tokens) ? Math.floor(intent.max_tokens) : void 0;
130
+ const interpolated = source === "protocol" && target === "anthropic" ? ANTHROPIC_FALLBACK_BUDGET[effort] : Math.floor((limits.max - limits.min) * EFFORT_RATIO[effort] + limits.min);
131
+ return clampBudget(
132
+ explicitBudget ?? interpolated,
133
+ limits,
134
+ target,
135
+ effort,
136
+ requestMaxTokens,
137
+ explicitBudget !== void 0
138
+ );
139
+ }
140
+ function resolveReasoningPlan(input) {
141
+ const normalizedIntent = input.intent ? extractReasoningIntent({ model: input.model, reasoning: input.intent }) : void 0;
142
+ if (!normalizedIntent?.effort) return void 0;
143
+ const capabilities = resolveTargetModelCapabilities(input.model, input.provider);
144
+ const nativeEffort = normalizedIntent.effort;
145
+ if (nativeEffort === "none") {
146
+ if (input.target === "gemini" && capabilities.thinkingLevels?.length && capabilities.thinkingLevels.includes("none")) {
147
+ return { kind: "level", effort: "none", enabled: false };
148
+ }
149
+ if (input.target === "gemini" && !capabilities.thinkingLevels?.length) {
150
+ const limits = resolveTokenLimit(input.model, input.provider, input.target)?.limits;
151
+ if (limits?.min === 0) {
152
+ return { kind: "budget", effort: "none", enabled: false, budgetTokens: 0 };
153
+ }
154
+ }
155
+ return { kind: "off" };
156
+ }
157
+ if (capabilities.thinkingLevels?.length && !capabilities.thinkingLevels.some((level) => level !== "none")) {
158
+ return { kind: "off" };
159
+ }
160
+ const effort = input.preserveNativeEffort ? nativeEffort : resolveReasoningEffort(nativeEffort, input.model, input.provider);
161
+ if (effort === "none") return { kind: "off" };
162
+ if (input.target === "openai-chat" || input.target === "openai-responses") {
163
+ return { kind: "level", effort, enabled: true };
164
+ }
165
+ if (capabilities.thinkingLevels?.length) {
166
+ return { kind: "level", effort, enabled: true };
167
+ }
168
+ const budgetTokens = resolveBudget(
169
+ normalizedIntent,
170
+ effort,
171
+ input.model,
172
+ input.provider,
173
+ input.target,
174
+ input.requestMaxTokens
175
+ );
176
+ if (budgetTokens === void 0) return { kind: "off" };
177
+ return { kind: "budget", effort, enabled: true, budgetTokens };
178
+ }
179
+ function resolveRequestReasoning(request, provider, options = {}) {
180
+ const intent = extractReasoningIntent(request);
181
+ if (!intent?.effort) return void 0;
182
+ const plan = resolveReasoningPlan({
183
+ intent,
184
+ model: request.model,
185
+ provider,
186
+ target: "openai-chat",
187
+ preserveNativeEffort: options.preserveNativeEffort
188
+ });
189
+ if (!plan) return void 0;
190
+ if (plan.kind === "off") return { ...intent, effort: "none", enabled: false };
191
+ return { ...intent, effort: plan.effort, enabled: plan.enabled };
192
+ }
193
+
194
+ export {
195
+ THINK_LEVELS,
196
+ normalizeThinkLevel,
197
+ extractReasoningIntent,
198
+ resolveTargetModelCapabilities,
199
+ resolveReasoningEffort,
200
+ resolveReasoningTokenLimit,
201
+ resolveReasoningPlan,
202
+ resolveRequestReasoning
203
+ };
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  AnthropicTransformer
3
- } from "./chunk-PEGTIPB3.js";
3
+ } from "./chunk-HKB656B4.js";
4
4
  import {
5
5
  GeminiTransformer
6
- } from "./chunk-LVUCAWMK.js";
6
+ } from "./chunk-55FMGZ3L.js";
7
7
  import {
8
8
  OpenAIResponseTransformer
9
- } from "./chunk-32O35CIF.js";
9
+ } from "./chunk-45FHEOKW.js";
10
10
  import {
11
11
  OpenAITransformer
12
- } from "./chunk-LB6EBS6Y.js";
12
+ } from "./chunk-CCVRRJOX.js";
13
13
  import {
14
14
  GeminiCodeAssistTransformer
15
- } from "./chunk-N5T4M4GU.js";
15
+ } from "./chunk-2UTGX6FM.js";
16
16
 
17
17
  // src/transformer/transformers/index.ts
18
18
  var BuiltinTransformers = {
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkKBM2W6UYcjs = require('./chunk-KBM2W6UY.cjs');
6
+ var _chunkRICPANBYcjs = require('./chunk-RICPANBY.cjs');
7
7
 
8
8
  // src/transformer/transformers/GeminiCodeAssistTransformer.ts
9
9
  var DEFAULT_CODE_ASSIST_ENDPOINT = "https://cloudcode-pa.googleapis.com";
@@ -117,7 +117,7 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
117
117
  * openaiResponsesIngress). `undefined` is the valid fresh free-tier value.
118
118
  */
119
119
  async transformRequestIn(request, provider, _context) {
120
- const inner = _chunkKBM2W6UYcjs.buildRequestBody.call(void 0, request);
120
+ const inner = _chunkRICPANBYcjs.buildRequestBody.call(void 0, request, provider);
121
121
  const envelope = {
122
122
  model: request.model,
123
123
  project: provider.geminiProject,
@@ -147,7 +147,7 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
147
147
  if (inner && typeof inner === "object" && !("model" in inner) && "model" in r) {
148
148
  inner.model = r.model;
149
149
  }
150
- return _chunkKBM2W6UYcjs.transformRequestOut.call(void 0, inner);
150
+ return _chunkRICPANBYcjs.transformRequestOut.call(void 0, inner);
151
151
  }
152
152
  /**
153
153
  * Code Assist response → OpenAI-compatible. PEEL the `.response` envelope from
@@ -155,7 +155,7 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
155
155
  */
156
156
  async transformResponseOut(response, _context) {
157
157
  const unwrapped = await unwrapCodeAssistResponse(response);
158
- return _chunkKBM2W6UYcjs.transformResponseOut.call(void 0, unwrapped, this.name, this.logger);
158
+ return _chunkRICPANBYcjs.transformResponseOut.call(void 0, unwrapped, this.name, this.logger);
159
159
  }
160
160
  /**
161
161
  * OpenAI-compatible response → Code Assist (endpoint-encode parity). Re-wraps
@@ -164,7 +164,7 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
164
164
  * `transformResponseOut`'s peel.
165
165
  */
166
166
  async transformResponseIn(response, _context) {
167
- const geminiResponse = await _chunkKBM2W6UYcjs.transformResponseIn.call(void 0, response, this.logger);
167
+ const geminiResponse = await _chunkRICPANBYcjs.transformResponseIn.call(void 0, response, this.logger);
168
168
  const contentType = _nullishCoalesce(geminiResponse.headers.get("Content-Type"), () => ( ""));
169
169
  if (contentType.includes("text/event-stream")) {
170
170
  return geminiResponse;
@@ -1,26 +1,26 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkOXHNSZ53cjs = require('./chunk-OXHNSZ53.cjs');
3
+ var _chunkZQQUD66Mcjs = require('./chunk-ZQQUD66M.cjs');
4
4
 
5
5
 
6
- var _chunkV4TXMEJScjs = require('./chunk-V4TXMEJS.cjs');
6
+ var _chunk5LNYGCIWcjs = require('./chunk-5LNYGCIW.cjs');
7
7
 
8
8
 
9
- var _chunkOVQBNVSVcjs = require('./chunk-OVQBNVSV.cjs');
9
+ var _chunkCMVXX7ONcjs = require('./chunk-CMVXX7ON.cjs');
10
10
 
11
11
 
12
- var _chunkOF3BECU2cjs = require('./chunk-OF3BECU2.cjs');
12
+ var _chunk56QD3YW6cjs = require('./chunk-56QD3YW6.cjs');
13
13
 
14
14
 
15
- var _chunkOKMJLEXXcjs = require('./chunk-OKMJLEXX.cjs');
15
+ var _chunkOC6DOOFXcjs = require('./chunk-OC6DOOFX.cjs');
16
16
 
17
17
  // src/transformer/transformers/index.ts
18
18
  var BuiltinTransformers = {
19
- OpenAITransformer: _chunkOF3BECU2cjs.OpenAITransformer,
20
- GeminiTransformer: _chunkV4TXMEJScjs.GeminiTransformer,
21
- GeminiCodeAssistTransformer: _chunkOKMJLEXXcjs.GeminiCodeAssistTransformer,
22
- AnthropicTransformer: _chunkOXHNSZ53cjs.AnthropicTransformer,
23
- OpenAIResponseTransformer: _chunkOVQBNVSVcjs.OpenAIResponseTransformer
19
+ OpenAITransformer: _chunk56QD3YW6cjs.OpenAITransformer,
20
+ GeminiTransformer: _chunk5LNYGCIWcjs.GeminiTransformer,
21
+ GeminiCodeAssistTransformer: _chunkOC6DOOFXcjs.GeminiCodeAssistTransformer,
22
+ AnthropicTransformer: _chunkZQQUD66Mcjs.AnthropicTransformer,
23
+ OpenAIResponseTransformer: _chunkCMVXX7ONcjs.OpenAIResponseTransformer
24
24
  };
25
25
  function getBuiltinTransformers() {
26
26
  return BuiltinTransformers;
@@ -1,4 +1,13 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/transformer/transformers/utils/gemini.response-in.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunk77USGNRWcjs = require('./chunk-77USGNRW.cjs');
4
+
5
+
6
+
7
+
8
+ var _chunkAOFWNWLTcjs = require('./chunk-AOFWNWLT.cjs');
9
+
10
+ // src/transformer/transformers/utils/gemini.response-in.ts
2
11
  var FINISH_REASON_TO_GEMINI = {
3
12
  stop: "STOP",
4
13
  length: "MAX_TOKENS",
@@ -685,7 +694,7 @@ function transformTool(tool) {
685
694
  }
686
695
 
687
696
  // src/transformer/transformers/utils/gemini.util.ts
688
- function buildRequestBody(request) {
697
+ function buildRequestBody(request, provider, preserveNativeEffort = false) {
689
698
  const tools = [];
690
699
  const functionDeclarations = _optionalChain([request, 'access', _99 => _99.tools, 'optionalAccess', _100 => _100.filter, 'call', _101 => _101((tool) => tool.function.name !== "web_search"), 'optionalAccess', _102 => _102.map, 'call', _103 => _103((tool) => ({
691
700
  name: tool.function.name,
@@ -795,27 +804,24 @@ function buildRequestBody(request) {
795
804
  if (request.max_tokens !== void 0) {
796
805
  generationConfig.maxOutputTokens = request.max_tokens;
797
806
  }
798
- if (_optionalChain([request, 'access', _117 => _117.reasoning, 'optionalAccess', _118 => _118.effort]) && request.reasoning.effort !== "none") {
807
+ const reasoningPlan = _chunkAOFWNWLTcjs.resolveReasoningPlan.call(void 0, {
808
+ intent: _chunkAOFWNWLTcjs.extractReasoningIntent.call(void 0, request),
809
+ model: request.model,
810
+ provider,
811
+ target: "gemini",
812
+ requestMaxTokens: request.max_tokens,
813
+ preserveNativeEffort
814
+ });
815
+ if (_optionalChain([reasoningPlan, 'optionalAccess', _117 => _117.kind]) === "level") {
799
816
  generationConfig.thinkingConfig = {
800
- includeThoughts: true
817
+ includeThoughts: reasoningPlan.enabled,
818
+ thinkingLevel: reasoningPlan.effort
819
+ };
820
+ } else if (_optionalChain([reasoningPlan, 'optionalAccess', _118 => _118.kind]) === "budget") {
821
+ generationConfig.thinkingConfig = {
822
+ includeThoughts: reasoningPlan.enabled,
823
+ thinkingBudget: reasoningPlan.budgetTokens
801
824
  };
802
- if (request.model.includes("gemini-3")) {
803
- generationConfig.thinkingConfig.thinkingLevel = request.reasoning.effort;
804
- } else {
805
- const thinkingBudgets = request.model.includes("pro") ? [128, 32768] : [0, 24576];
806
- const maxTokens = request.reasoning.max_tokens;
807
- if (typeof maxTokens !== "undefined") {
808
- let thinkingBudget;
809
- if (maxTokens >= thinkingBudgets[0] && maxTokens <= thinkingBudgets[1]) {
810
- thinkingBudget = maxTokens;
811
- } else if (maxTokens < thinkingBudgets[0]) {
812
- thinkingBudget = thinkingBudgets[0];
813
- } else {
814
- thinkingBudget = thinkingBudgets[1];
815
- }
816
- generationConfig.thinkingConfig.thinkingBudget = thinkingBudget;
817
- }
818
- }
819
825
  }
820
826
  const body = {
821
827
  contents,
@@ -859,6 +865,17 @@ function transformRequestOut(request) {
859
865
  stream,
860
866
  tool_choice: toolChoice
861
867
  };
868
+ const thinkingConfig = _optionalChain([generationConfig, 'optionalAccess', _123 => _123.thinkingConfig]);
869
+ const discreteEffort = _chunkAOFWNWLTcjs.normalizeThinkLevel.call(void 0, _optionalChain([thinkingConfig, 'optionalAccess', _124 => _124.thinkingLevel]));
870
+ if (discreteEffort) {
871
+ unifiedRequest.reasoning = {
872
+ effort: discreteEffort,
873
+ enabled: discreteEffort !== "none"
874
+ };
875
+ } else if (typeof _optionalChain([thinkingConfig, 'optionalAccess', _125 => _125.thinkingBudget]) === "number" && Number.isFinite(thinkingConfig.thinkingBudget) && thinkingConfig.thinkingBudget >= 0) {
876
+ const budget = thinkingConfig.thinkingBudget;
877
+ unifiedRequest.reasoning = budget === 0 ? { effort: "none", enabled: false, max_tokens: 0 } : { effort: _chunk77USGNRWcjs.getThinkLevel.call(void 0, budget), enabled: true, max_tokens: budget };
878
+ }
862
879
  if (Array.isArray(contents)) {
863
880
  const toolCallIdsByName = /* @__PURE__ */ new Map();
864
881
  for (const content of contents) {
@@ -897,14 +914,14 @@ function transformRequestOut(request) {
897
914
  } else if ("inlineData" in part || "file_data" in part) {
898
915
  const inline = part.inlineData;
899
916
  const fileData = part.file_data;
900
- if (_optionalChain([inline, 'optionalAccess', _123 => _123.data])) {
917
+ if (_optionalChain([inline, 'optionalAccess', _126 => _126.data])) {
901
918
  const mime = inline.mime_type || "image/png";
902
919
  contentParts.push({
903
920
  type: "image_url",
904
921
  image_url: { url: `data:${mime};base64,${inline.data}` },
905
922
  media_type: mime
906
923
  });
907
- } else if (_optionalChain([fileData, 'optionalAccess', _124 => _124.file_uri])) {
924
+ } else if (_optionalChain([fileData, 'optionalAccess', _127 => _127.file_uri])) {
908
925
  contentParts.push({
909
926
  type: "image_url",
910
927
  image_url: { url: fileData.file_uri },
@@ -924,7 +941,7 @@ function transformRequestOut(request) {
924
941
  const queue = toolCallIdsByName.get(fnName);
925
942
  const id = queue && queue.length > 0 ? queue.shift() : `tool_${Math.random().toString(36).substring(2, 15)}`;
926
943
  const response = fr.functionResponse.response;
927
- const result = _optionalChain([response, 'optionalAccess', _125 => _125.result]);
944
+ const result = _optionalChain([response, 'optionalAccess', _128 => _128.result]);
928
945
  const toolContent = typeof result === "string" ? result : result !== void 0 ? JSON.stringify(result) : response !== void 0 ? JSON.stringify(response) : "";
929
946
  unifiedRequest.messages.push({
930
947
  role: "tool",
@@ -1,3 +1,12 @@
1
+ import {
2
+ getThinkLevel
3
+ } from "./chunk-WYVGULTQ.js";
4
+ import {
5
+ extractReasoningIntent,
6
+ normalizeThinkLevel,
7
+ resolveReasoningPlan
8
+ } from "./chunk-N2EIM2XJ.js";
9
+
1
10
  // src/transformer/transformers/utils/gemini.response-in.ts
2
11
  var FINISH_REASON_TO_GEMINI = {
3
12
  stop: "STOP",
@@ -685,7 +694,7 @@ function transformTool(tool) {
685
694
  }
686
695
 
687
696
  // src/transformer/transformers/utils/gemini.util.ts
688
- function buildRequestBody(request) {
697
+ function buildRequestBody(request, provider, preserveNativeEffort = false) {
689
698
  const tools = [];
690
699
  const functionDeclarations = request.tools?.filter((tool) => tool.function.name !== "web_search")?.map((tool) => ({
691
700
  name: tool.function.name,
@@ -795,27 +804,24 @@ function buildRequestBody(request) {
795
804
  if (request.max_tokens !== void 0) {
796
805
  generationConfig.maxOutputTokens = request.max_tokens;
797
806
  }
798
- if (request.reasoning?.effort && request.reasoning.effort !== "none") {
807
+ const reasoningPlan = resolveReasoningPlan({
808
+ intent: extractReasoningIntent(request),
809
+ model: request.model,
810
+ provider,
811
+ target: "gemini",
812
+ requestMaxTokens: request.max_tokens,
813
+ preserveNativeEffort
814
+ });
815
+ if (reasoningPlan?.kind === "level") {
799
816
  generationConfig.thinkingConfig = {
800
- includeThoughts: true
817
+ includeThoughts: reasoningPlan.enabled,
818
+ thinkingLevel: reasoningPlan.effort
819
+ };
820
+ } else if (reasoningPlan?.kind === "budget") {
821
+ generationConfig.thinkingConfig = {
822
+ includeThoughts: reasoningPlan.enabled,
823
+ thinkingBudget: reasoningPlan.budgetTokens
801
824
  };
802
- if (request.model.includes("gemini-3")) {
803
- generationConfig.thinkingConfig.thinkingLevel = request.reasoning.effort;
804
- } else {
805
- const thinkingBudgets = request.model.includes("pro") ? [128, 32768] : [0, 24576];
806
- const maxTokens = request.reasoning.max_tokens;
807
- if (typeof maxTokens !== "undefined") {
808
- let thinkingBudget;
809
- if (maxTokens >= thinkingBudgets[0] && maxTokens <= thinkingBudgets[1]) {
810
- thinkingBudget = maxTokens;
811
- } else if (maxTokens < thinkingBudgets[0]) {
812
- thinkingBudget = thinkingBudgets[0];
813
- } else {
814
- thinkingBudget = thinkingBudgets[1];
815
- }
816
- generationConfig.thinkingConfig.thinkingBudget = thinkingBudget;
817
- }
818
- }
819
825
  }
820
826
  const body = {
821
827
  contents,
@@ -859,6 +865,17 @@ function transformRequestOut(request) {
859
865
  stream,
860
866
  tool_choice: toolChoice
861
867
  };
868
+ const thinkingConfig = generationConfig?.thinkingConfig;
869
+ const discreteEffort = normalizeThinkLevel(thinkingConfig?.thinkingLevel);
870
+ if (discreteEffort) {
871
+ unifiedRequest.reasoning = {
872
+ effort: discreteEffort,
873
+ enabled: discreteEffort !== "none"
874
+ };
875
+ } else if (typeof thinkingConfig?.thinkingBudget === "number" && Number.isFinite(thinkingConfig.thinkingBudget) && thinkingConfig.thinkingBudget >= 0) {
876
+ const budget = thinkingConfig.thinkingBudget;
877
+ unifiedRequest.reasoning = budget === 0 ? { effort: "none", enabled: false, max_tokens: 0 } : { effort: getThinkLevel(budget), enabled: true, max_tokens: budget };
878
+ }
862
879
  if (Array.isArray(contents)) {
863
880
  const toolCallIdsByName = /* @__PURE__ */ new Map();
864
881
  for (const content of contents) {
@@ -0,0 +1,37 @@
1
+ // src/transformer/transformers/AnthropicTypes.ts
2
+ function getThinkLevel(budgetTokens) {
3
+ if (!budgetTokens || budgetTokens <= 0) return "none";
4
+ if (budgetTokens < 4096) return "low";
5
+ if (budgetTokens < 16384) return "medium";
6
+ return "high";
7
+ }
8
+ function formatBase64(data, mediaType) {
9
+ if (data.startsWith("data:")) return data;
10
+ return `data:${mediaType || "image/png"};base64,${data}`;
11
+ }
12
+ function flattenToolResultContent(content) {
13
+ if (typeof content === "string") return content;
14
+ if (content == null) return "";
15
+ if (!Array.isArray(content)) return JSON.stringify(content);
16
+ const parts = [];
17
+ for (const block of content) {
18
+ if (typeof block === "string") {
19
+ parts.push(block);
20
+ continue;
21
+ }
22
+ if (!block || typeof block !== "object") continue;
23
+ const typed = block;
24
+ if (typed.type === "image" || typed.type === "image_url") {
25
+ parts.push("[image omitted]");
26
+ } else if (typeof typed.text === "string") {
27
+ parts.push(typed.text);
28
+ }
29
+ }
30
+ return parts.filter((text) => text !== "").join("\n");
31
+ }
32
+
33
+ export {
34
+ getThinkLevel,
35
+ formatBase64,
36
+ flattenToolResultContent
37
+ };