@carlonicora/nestjs-neo4jsonapi 1.112.3 → 1.113.0

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 (39) hide show
  1. package/dist/agents/operator/services/operator.service.d.ts.map +1 -1
  2. package/dist/agents/operator/services/operator.service.js.map +1 -1
  3. package/dist/config/base.config.d.ts.map +1 -1
  4. package/dist/config/base.config.js +1 -0
  5. package/dist/config/base.config.js.map +1 -1
  6. package/dist/config/interfaces/config.ai.interface.d.ts +6 -0
  7. package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
  8. package/dist/core/llm/common/llm-raw-response.d.ts +4 -0
  9. package/dist/core/llm/common/llm-raw-response.d.ts.map +1 -1
  10. package/dist/core/llm/common/llm-raw-response.js.map +1 -1
  11. package/dist/core/llm/enums/reasoning.effort.d.ts +14 -0
  12. package/dist/core/llm/enums/reasoning.effort.d.ts.map +1 -0
  13. package/dist/core/llm/enums/reasoning.effort.js +3 -0
  14. package/dist/core/llm/enums/reasoning.effort.js.map +1 -0
  15. package/dist/core/llm/index.d.ts +1 -0
  16. package/dist/core/llm/index.d.ts.map +1 -1
  17. package/dist/core/llm/index.js +1 -0
  18. package/dist/core/llm/index.js.map +1 -1
  19. package/dist/core/llm/services/llm.service.d.ts +5 -0
  20. package/dist/core/llm/services/llm.service.d.ts.map +1 -1
  21. package/dist/core/llm/services/llm.service.js +147 -14
  22. package/dist/core/llm/services/llm.service.js.map +1 -1
  23. package/dist/core/llm/services/model.service.d.ts +37 -0
  24. package/dist/core/llm/services/model.service.d.ts.map +1 -1
  25. package/dist/core/llm/services/model.service.js +94 -5
  26. package/dist/core/llm/services/model.service.js.map +1 -1
  27. package/dist/core/llm/services/unsupported-param-fetch.d.ts +47 -0
  28. package/dist/core/llm/services/unsupported-param-fetch.d.ts.map +1 -0
  29. package/dist/core/llm/services/unsupported-param-fetch.js +195 -0
  30. package/dist/core/llm/services/unsupported-param-fetch.js.map +1 -0
  31. package/dist/core/llm/utils/schema.utils.d.ts +89 -0
  32. package/dist/core/llm/utils/schema.utils.d.ts.map +1 -1
  33. package/dist/core/llm/utils/schema.utils.js +210 -3
  34. package/dist/core/llm/utils/schema.utils.js.map +1 -1
  35. package/dist/foundations/chunker/services/types/pdf/interfaces/pdf-element.interface.d.ts.map +1 -1
  36. package/dist/foundations/rbac/dsl/types.d.ts.map +1 -1
  37. package/dist/foundations/rbac/dsl/types.js.map +1 -1
  38. package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.d.ts.map +1 -1
  39. package/package.json +67 -67
@@ -48,6 +48,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.ModelService = void 0;
49
49
  exports.writeGcpCredentials = writeGcpCredentials;
50
50
  exports.validateAiUrl = validateAiUrl;
51
+ exports.normaliseConfiguredReasoningEffort = normaliseConfiguredReasoningEffort;
51
52
  const testing_1 = require("@langchain/core/utils/testing");
52
53
  const google_vertexai_1 = require("@langchain/google-vertexai");
53
54
  const openai_1 = require("@langchain/openai");
@@ -64,6 +65,7 @@ const model_weight_1 = require("../enums/model.weight");
64
65
  const embedder_token_bucket_service_1 = require("./embedder-token-bucket.service");
65
66
  const openrouter_fetch_1 = require("./openrouter-fetch");
66
67
  const rate_limited_embedder_1 = require("./rate-limited-embedder");
68
+ const unsupported_param_fetch_1 = require("./unsupported-param-fetch");
67
69
  /**
68
70
  * Tracks GCP credential temp files written this process so they can be removed
69
71
  * on exit. Each path is UUID-unique (see {@link writeGcpCredentials}).
@@ -143,6 +145,32 @@ function validateAiUrl(url, provider) {
143
145
  throw new Error(`AI_URL hostname "${parsed.hostname}" not in allowlist`);
144
146
  }
145
147
  }
148
+ /** The complete set of values {@link ReasoningEffort} allows. */
149
+ const REASONING_EFFORTS = new Set(["none", "minimal", "low", "medium", "high"]);
150
+ /**
151
+ * Narrows a CONFIG-sourced reasoning effort to the allowed set.
152
+ *
153
+ * `AI_REASONING_EFFORT` reaches this code as a free-form string, and a typo
154
+ * (`AI_REASONING_EFFORT=lwo`) would otherwise be cast straight onto the wire. The
155
+ * provider answers 400 `unsupported_value`, which `unsupportedParamFetch` then
156
+ * remembers for that (parameter, value) pair — one wasted round-trip per distinct
157
+ * typo, and an effort silently degraded to the provider default for the rest of the
158
+ * process. Rejecting it here keeps the misconfiguration visible and costs nothing.
159
+ *
160
+ * Per-call values are NOT routed through this: those are typed `ReasoningEffort` at
161
+ * the call site, so the compiler already guarantees them.
162
+ *
163
+ * @returns the effort when recognised, otherwise undefined (tier default unset).
164
+ */
165
+ function normaliseConfiguredReasoningEffort(value) {
166
+ if (value === undefined || value === null || value === "")
167
+ return undefined;
168
+ if (typeof value === "string" && REASONING_EFFORTS.has(value))
169
+ return value;
170
+ console.warn(`[ModelService] ignoring unrecognised reasoning effort ${JSON.stringify(value)} — ` +
171
+ `expected one of ${[...REASONING_EFFORTS].join(", ")}`);
172
+ return undefined;
173
+ }
146
174
  let ModelService = class ModelService {
147
175
  constructor(clsService, configService, bucket, logger) {
148
176
  this.clsService = clsService;
@@ -186,6 +214,23 @@ let ModelService = class ModelService {
186
214
  return this.aiConfig.ai;
187
215
  }
188
216
  }
217
+ /**
218
+ * Whether this tier's provider honours OpenAI's STRICT structured-output mode.
219
+ *
220
+ * Only the OpenAI-compatible chat-completions family enforces `strict`.
221
+ * `ChatGoogleBase.withStructuredOutput` ignores the flag outright, so on Vertex
222
+ * a strict-shaped schema costs the model an explicit null for every optional
223
+ * field and returns no guarantee in exchange — verified against a live
224
+ * gemini-2.5-flash-lite deployment, which accepts both shapes.
225
+ *
226
+ * Answered from the tier's PROVIDER, which this service already owns, rather
227
+ * than `instanceof ChatOpenAI`: `instanceof` fails silently when two copies of
228
+ * `@langchain/openai` resolve, which is exactly the dual-instance hazard the
229
+ * July 2026 dependency sweep removed.
230
+ */
231
+ supportsStrictStructuredOutput(weight) {
232
+ return this.getResolvedConfig(weight).provider !== "vertex";
233
+ }
189
234
  /**
190
235
  * Gets a configured LLM instance based on the current config.
191
236
  *
@@ -215,12 +260,22 @@ let ModelService = class ModelService {
215
260
  const temperature = params?.temperature ?? 0.2;
216
261
  const cfg = this.getResolvedConfig(params?.modelWeight);
217
262
  const maxOutputTokens = params?.maxOutputTokens ?? cfg.maxOutputTokens;
263
+ // Precedence (Shared Contracts, plan 2026-07-31-llm-latency-and-structured-output):
264
+ // an explicit per-call `reasoningEffort` wins; failing that, the equally
265
+ // explicit per-call `disableThinking` (the older boolean spelling of "none")
266
+ // wins over the tier default — a per-call signal must never be silently
267
+ // overridden by config, matching `temperature`/`maxOutputTokens` elsewhere in
268
+ // this method. Only when the call passes neither does the tier default apply.
269
+ const resolvedReasoningEffort = params?.reasoningEffort ??
270
+ (params?.disableThinking ? "none" : undefined) ??
271
+ normaliseConfiguredReasoningEffort(cfg.reasoningEffort);
218
272
  return this.buildChatModel(cfg, {
219
273
  temperature,
220
274
  maxOutputTokens,
221
275
  frequencyPenalty: params?.frequencyPenalty,
222
276
  credentialFileTag: "llm",
223
277
  disableThinking: params?.disableThinking,
278
+ reasoningEffort: resolvedReasoningEffort,
224
279
  timeoutMs: params?.timeoutMs ?? this.aiConfig.requestTimeoutMs,
225
280
  });
226
281
  }
@@ -251,9 +306,10 @@ let ModelService = class ModelService {
251
306
  // deployments. Ignored for non-reasoning models.
252
307
  const visionModelLower = (visionConfig.model || "").toLowerCase();
253
308
  const isReasoningVisionModel = visionModelLower.includes("gpt-5") || /(^|\/)o\d/.test(visionModelLower);
254
- const modelKwargs = isReasoningVisionModel && visionConfig.reasoningEffort
255
- ? { reasoning_effort: visionConfig.reasoningEffort }
256
- : undefined;
309
+ // Config-sourced, so validated exactly like the chat tiers' effort — the vision
310
+ // block reads its own `VISION_REASONING_EFFORT` and is just as typo-prone.
311
+ const visionEffort = normaliseConfiguredReasoningEffort(visionConfig.reasoningEffort);
312
+ const modelKwargs = isReasoningVisionModel && visionEffort ? { reasoning_effort: visionEffort } : undefined;
257
313
  return this.buildChatModel(visionConfig, { temperature, credentialFileTag: "vision", modelKwargs });
258
314
  }
259
315
  /**
@@ -282,6 +338,24 @@ let ModelService = class ModelService {
282
338
  // tiers that never pass an explicit budget — an unbounded request is the
283
339
  // silent-stall bug, whatever the modality.
284
340
  const timeoutMs = opts.timeoutMs ?? this.aiConfig?.requestTimeoutMs;
341
+ // Identifies the deployment whose parameter verdicts we learn (see
342
+ // unsupportedParamFetch). Endpoint-qualified: the same model name behind two
343
+ // providers can accept two different parameter sets.
344
+ const modelKey = [cfg.provider, cfg.instance ?? cfg.url, cfg.model].filter(Boolean).join("|");
345
+ // Resolved ONCE, into `llmConfig.modelKwargs`, so every provider branch below
346
+ // picks it up from the same place.
347
+ //
348
+ // It used to be spread into the generic `new ChatOpenAI({...})` at the bottom
349
+ // of this method — which the `azure` branch never reaches, because it returns
350
+ // early. The effect was that `reasoningEffort` was silently dropped on Azure,
351
+ // i.e. on the one provider this project actually runs, while the unit tests
352
+ // (which build an `openrouter` tier) all passed. Any per-request parameter
353
+ // added here must go into `llmConfig`, never into a single branch's return.
354
+ const effort = opts.reasoningEffort ?? (opts.disableThinking ? "none" : undefined);
355
+ const modelKwargs = {
356
+ ...(opts.modelKwargs ?? {}),
357
+ ...(effort ? { reasoning_effort: effort } : {}),
358
+ };
285
359
  const llmConfig = {
286
360
  apiKey: cfg.apiKey || "not-needed",
287
361
  temperature,
@@ -289,7 +363,7 @@ let ModelService = class ModelService {
289
363
  configuration: {
290
364
  baseURL: cfg.url || "http://localhost:8033/v1",
291
365
  },
292
- ...(opts.modelKwargs ? { modelKwargs: opts.modelKwargs } : {}),
366
+ ...(Object.keys(modelKwargs).length > 0 ? { modelKwargs } : {}),
293
367
  ...(timeoutMs ? { timeout: timeoutMs } : {}),
294
368
  };
295
369
  switch (cfg.provider) {
@@ -350,10 +424,20 @@ let ModelService = class ModelService {
350
424
  azureOpenAIApiInstanceName: cfg.instance,
351
425
  azureOpenAIApiDeploymentName: cfg.model,
352
426
  azureOpenAIApiVersion: cfg.apiVersion,
427
+ // The deployment name builds the URL — it never reaches the parameter
428
+ // mapping. Without `model` LangChain falls back to its "gpt-3.5-turbo"
429
+ // default and picks the request shape from THAT, sending `max_tokens`
430
+ // to a gpt-5 deployment (400 — "Use 'max_completion_tokens' instead").
431
+ // Azure ignores the body's `model`, so this is purely a client-side
432
+ // signal about which model the deployment actually serves.
433
+ model: cfg.model,
353
434
  temperature,
354
435
  ...(timeoutMs ? { timeout: timeoutMs } : {}),
355
436
  ...(maxOutputTokens ? { maxTokens: maxOutputTokens } : {}),
356
437
  ...(llmConfig.modelKwargs ? { modelKwargs: llmConfig.modelKwargs } : {}),
438
+ // ONLY `fetch` — a `baseURL` here would override the Azure endpoint
439
+ // that azureOpenAIApiInstanceName/DeploymentName build.
440
+ configuration: { fetch: (0, unsupported_param_fetch_1.unsupportedParamFetch)(modelKey) },
357
441
  };
358
442
  return new openai_1.AzureChatOpenAI(azureParameters);
359
443
  }
@@ -371,6 +455,12 @@ let ModelService = class ModelService {
371
455
  }
372
456
  return new openai_1.ChatOpenAI({
373
457
  ...llmConfig,
458
+ configuration: {
459
+ ...llmConfig.configuration,
460
+ // Wraps whatever the provider switch installed (the OpenRouter pin
461
+ // included) rather than replacing it.
462
+ fetch: (0, unsupported_param_fetch_1.unsupportedParamFetch)(modelKey, llmConfig.configuration.fetch),
463
+ },
374
464
  // 1 hard attempt + 2 soft retries. Retries escalate the OpenRouter pin
375
465
  // (see openRouterEscalatingFetch) so a transient provider error can reroute.
376
466
  maxRetries: 2,
@@ -380,7 +470,6 @@ let ModelService = class ModelService {
380
470
  // memory extractor emitting `{op:"ADD",...}` endlessly). Maps to OpenAI's
381
471
  // `frequency_penalty`, honoured by the Ollama/llamacpp OpenAI-compatible APIs.
382
472
  ...(typeof frequencyPenalty === "number" ? { frequencyPenalty } : {}),
383
- ...(opts.disableThinking ? { modelKwargs: { ...(llmConfig.modelKwargs ?? {}), reasoning_effort: "none" } } : {}),
384
473
  });
385
474
  }
386
475
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"model.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/model.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/model.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Provider-truth-driven request repair for OpenAI-compatible endpoints.
3
+ *
4
+ * Model families disagree about which chat-completions parameters they accept:
5
+ * OpenAI's reasoning models (o-series, gpt-5 except gpt-5-chat) reject
6
+ * `max_tokens`, `frequency_penalty` and `presence_penalty` outright, and reject
7
+ * any non-default `temperature` / `top_p`. Encoding that taxonomy here would
8
+ * duplicate knowledge we do not own and would rot on every model release — and
9
+ * it cannot be complete anyway, because an Azure deployment name is chosen by
10
+ * whoever created it ("prod-llm" tells us nothing about the model behind it).
11
+ *
12
+ * So we let the provider tell us. A 400 names the offending parameter exactly:
13
+ *
14
+ * { error: { code: "unsupported_parameter", param: "max_tokens",
15
+ * message: "... Use 'max_completion_tokens' instead." } }
16
+ * { error: { code: "unsupported_value", param: "temperature",
17
+ * message: "... Only the default (1) value is supported." } }
18
+ *
19
+ * This middleware removes the named parameter, retries once per rejection, and
20
+ * REMEMBERS the verdict per model for the rest of the process, so only the first
21
+ * call to a given deployment pays the extra round-trip.
22
+ *
23
+ * The two codes are remembered at DIFFERENT scopes, because they say different
24
+ * things. `unsupported_parameter` means the deployment does not know the parameter
25
+ * at all, so it is dropped from every later request. `unsupported_value` means only
26
+ * the value sent was refused — the parameter itself is fine. Remembering the latter
27
+ * as a parameter-level drop is actively harmful: one call sending
28
+ * `reasoning_effort: "none"` to a deployment that only knows low/medium/high would
29
+ * otherwise strip `reasoning_effort` from EVERY later request, silently discarding
30
+ * the `"low"` latency win the triage/retrieval/citation-audit nodes depend on. So a
31
+ * value rejection is memoised against the (parameter, value) pair, and a later
32
+ * request carrying a different value for the same parameter is still sent.
33
+ */
34
+ /** Test seam — clears everything learned so far. */
35
+ export declare function resetLearnedUnsupportedParams(): void;
36
+ /**
37
+ * Wraps `fetch` so a rejected chat-completions parameter repairs itself.
38
+ *
39
+ * @param modelKey - Identifies the deployment the verdicts belong to. Two
40
+ * deployments of the same model name on different endpoints get separate
41
+ * entries, so one provider's rejection never suppresses a parameter another
42
+ * provider accepts.
43
+ * @param inner - The fetch to wrap. Composes with other middleware — passing
44
+ * `openRouterEscalatingFetch(...)` keeps its provider pinning intact.
45
+ */
46
+ export declare function unsupportedParamFetch(modelKey: string, inner?: typeof fetch): typeof fetch;
47
+ //# sourceMappingURL=unsupported-param-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-param-fetch.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/unsupported-param-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AA4CH,oDAAoD;AACpD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAiFD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,OAAO,KAAK,CA0C1F"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ /**
3
+ * Provider-truth-driven request repair for OpenAI-compatible endpoints.
4
+ *
5
+ * Model families disagree about which chat-completions parameters they accept:
6
+ * OpenAI's reasoning models (o-series, gpt-5 except gpt-5-chat) reject
7
+ * `max_tokens`, `frequency_penalty` and `presence_penalty` outright, and reject
8
+ * any non-default `temperature` / `top_p`. Encoding that taxonomy here would
9
+ * duplicate knowledge we do not own and would rot on every model release — and
10
+ * it cannot be complete anyway, because an Azure deployment name is chosen by
11
+ * whoever created it ("prod-llm" tells us nothing about the model behind it).
12
+ *
13
+ * So we let the provider tell us. A 400 names the offending parameter exactly:
14
+ *
15
+ * { error: { code: "unsupported_parameter", param: "max_tokens",
16
+ * message: "... Use 'max_completion_tokens' instead." } }
17
+ * { error: { code: "unsupported_value", param: "temperature",
18
+ * message: "... Only the default (1) value is supported." } }
19
+ *
20
+ * This middleware removes the named parameter, retries once per rejection, and
21
+ * REMEMBERS the verdict per model for the rest of the process, so only the first
22
+ * call to a given deployment pays the extra round-trip.
23
+ *
24
+ * The two codes are remembered at DIFFERENT scopes, because they say different
25
+ * things. `unsupported_parameter` means the deployment does not know the parameter
26
+ * at all, so it is dropped from every later request. `unsupported_value` means only
27
+ * the value sent was refused — the parameter itself is fine. Remembering the latter
28
+ * as a parameter-level drop is actively harmful: one call sending
29
+ * `reasoning_effort: "none"` to a deployment that only knows low/medium/high would
30
+ * otherwise strip `reasoning_effort` from EVERY later request, silently discarding
31
+ * the `"low"` latency win the triage/retrieval/citation-audit nodes depend on. So a
32
+ * value rejection is memoised against the (parameter, value) pair, and a later
33
+ * request carrying a different value for the same parameter is still sent.
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resetLearnedUnsupportedParams = resetLearnedUnsupportedParams;
37
+ exports.unsupportedParamFetch = unsupportedParamFetch;
38
+ /**
39
+ * Parameters that are not merely unsupported but RENAMED — dropping them would
40
+ * silently discard the caller's intent (an unbounded response instead of a
41
+ * capped one). This is parameter-level knowledge, stable across the whole
42
+ * OpenAI-compatible ecosystem, NOT a per-model taxonomy: it is only ever applied
43
+ * when the provider has already rejected the original name.
44
+ */
45
+ const PARAM_SUCCESSORS = {
46
+ max_tokens: "max_completion_tokens",
47
+ };
48
+ /** Bounds the repair loop: the API reports ONE rejected parameter per response,
49
+ * so a request carrying several needs one round-trip each. */
50
+ const MAX_REPAIRS = 6;
51
+ const UNSUPPORTED_CODES = new Set(["unsupported_parameter", "unsupported_value"]);
52
+ /** Canonical key for a parameter value, so `"none"` and `0.2` compare reliably. */
53
+ const valueKey = (value) => JSON.stringify(value ?? null);
54
+ /**
55
+ * Learned verdicts, keyed by model. Module-level on purpose: `ModelService`
56
+ * builds a fresh chat model per call, so anything held on the instance would
57
+ * re-learn (and re-pay the failed round-trip) on every request.
58
+ *
59
+ * model key → (rejected parameter → verdict)
60
+ */
61
+ const learned = new Map();
62
+ /** Test seam — clears everything learned so far. */
63
+ function resetLearnedUnsupportedParams() {
64
+ learned.clear();
65
+ }
66
+ /** Applies the verdicts learned so far for `modelKey`. Returns the body
67
+ * unchanged when nothing is known yet or the body is not JSON. */
68
+ function applyLearned(bodyStr, modelKey) {
69
+ const verdicts = learned.get(modelKey);
70
+ if (!verdicts?.size)
71
+ return bodyStr;
72
+ try {
73
+ const body = JSON.parse(bodyStr);
74
+ let changed = false;
75
+ for (const [param, verdict] of verdicts) {
76
+ if (!(param in body))
77
+ continue;
78
+ const value = body[param];
79
+ // A value-scoped verdict must not touch a request carrying a value the
80
+ // deployment has never refused — that value may well be accepted.
81
+ if (verdict.values && !verdict.values.has(valueKey(value)))
82
+ continue;
83
+ delete body[param];
84
+ if (verdict.successor)
85
+ body[verdict.successor] = value;
86
+ changed = true;
87
+ }
88
+ return changed ? JSON.stringify(body) : bodyStr;
89
+ }
90
+ catch {
91
+ return bodyStr;
92
+ }
93
+ }
94
+ /** Records a verdict, widening an existing entry rather than narrowing it: a
95
+ * parameter-level rejection always supersedes value-level ones, and a second
96
+ * rejected value joins the set instead of replacing it. */
97
+ function rememberVerdict(modelKey, param, verdict) {
98
+ const verdicts = learned.get(modelKey) ?? new Map();
99
+ const existing = verdicts.get(param);
100
+ if (existing && !verdict.values) {
101
+ // Parameter-level wins outright.
102
+ verdicts.set(param, verdict);
103
+ }
104
+ else if (existing?.values && verdict.values) {
105
+ for (const value of verdict.values)
106
+ existing.values.add(value);
107
+ }
108
+ else if (!existing) {
109
+ verdicts.set(param, verdict);
110
+ }
111
+ // existing is parameter-level and the new verdict is value-level → already covered.
112
+ learned.set(modelKey, verdicts);
113
+ }
114
+ /** Reads the rejected-parameter verdict out of a 400 payload. Returns undefined
115
+ * when the error is anything other than a rejected top-level parameter that the
116
+ * request actually carried — we only repair what we can prove we caused. */
117
+ function readVerdict(responseText, bodyStr) {
118
+ let param;
119
+ let code;
120
+ try {
121
+ const error = JSON.parse(responseText)?.error;
122
+ param = error?.param;
123
+ code = error?.code;
124
+ }
125
+ catch {
126
+ return undefined;
127
+ }
128
+ if (typeof param !== "string" || !param || typeof code !== "string" || !UNSUPPORTED_CODES.has(code))
129
+ return undefined;
130
+ let rejectedValue;
131
+ try {
132
+ const body = JSON.parse(bodyStr);
133
+ if (!(param in body))
134
+ return undefined;
135
+ rejectedValue = body[param];
136
+ }
137
+ catch {
138
+ return undefined;
139
+ }
140
+ // The successor rename applies to both codes: a rejected `max_tokens` value still
141
+ // means the cap belongs in `max_completion_tokens`, never that it should vanish.
142
+ const successor = PARAM_SUCCESSORS[param] ?? null;
143
+ return {
144
+ param,
145
+ rejectedValue,
146
+ verdict: code === "unsupported_value" ? { successor, values: new Set([valueKey(rejectedValue)]) } : { successor },
147
+ };
148
+ }
149
+ /**
150
+ * Wraps `fetch` so a rejected chat-completions parameter repairs itself.
151
+ *
152
+ * @param modelKey - Identifies the deployment the verdicts belong to. Two
153
+ * deployments of the same model name on different endpoints get separate
154
+ * entries, so one provider's rejection never suppresses a parameter another
155
+ * provider accepts.
156
+ * @param inner - The fetch to wrap. Composes with other middleware — passing
157
+ * `openRouterEscalatingFetch(...)` keeps its provider pinning intact.
158
+ */
159
+ function unsupportedParamFetch(modelKey, inner) {
160
+ // Resolved per call, never captured at construction: binding the global here
161
+ // would freeze whatever `fetch` existed when the model was built.
162
+ const send = (input, init) => (inner ?? fetch)(input, init);
163
+ return (async (input, init) => {
164
+ if (typeof init?.body !== "string")
165
+ return send(input, init);
166
+ let body = applyLearned(init.body, modelKey);
167
+ let response = await send(input, { ...init, body });
168
+ for (let repair = 0; repair < MAX_REPAIRS; repair++) {
169
+ if (response.status !== 400)
170
+ return response;
171
+ // Safe to drain: a 400 is never a stream. Anything we decide not to repair
172
+ // is handed back as an equivalent Response so the caller still sees it.
173
+ const responseText = await response.text();
174
+ const verdict = readVerdict(responseText, body);
175
+ if (!verdict) {
176
+ return new Response(responseText, {
177
+ status: response.status,
178
+ statusText: response.statusText,
179
+ headers: response.headers,
180
+ });
181
+ }
182
+ rememberVerdict(modelKey, verdict.param, verdict.verdict);
183
+ const scope = verdict.verdict.values
184
+ ? `'${verdict.param}: ${JSON.stringify(verdict.rejectedValue)}'`
185
+ : `'${verdict.param}'`;
186
+ console.warn(`[ModelService] "${modelKey}" rejected ${scope} — ` +
187
+ `${verdict.verdict.successor ? `sending '${verdict.verdict.successor}' instead` : "dropping it"} ` +
188
+ `for this and later calls${verdict.verdict.values ? " that send the same value" : ""}`);
189
+ body = applyLearned(body, modelKey);
190
+ response = await send(input, { ...init, body });
191
+ }
192
+ return response;
193
+ });
194
+ }
195
+ //# sourceMappingURL=unsupported-param-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-param-fetch.js","sourceRoot":"","sources":["../../../../src/core/llm/services/unsupported-param-fetch.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,20 @@ export interface SchemaMetadata {
24
24
  * @returns JSON Schema object
25
25
  */
26
26
  export declare function convertZodToJsonSchema(zodSchema: any): any;
27
+ /**
28
+ * Converts a Zod schema to a draft 2020-12 JSON Schema — the dialect OpenAI's
29
+ * structured outputs expect.
30
+ *
31
+ * Distinct from {@link convertZodToJsonSchema}, which targets OpenAPI 3.0 for
32
+ * Gemini. The difference matters for strict mode: OpenAPI 3.0 expresses "may be
33
+ * null" as `nullable: true`, which OpenAI ignores, whereas draft 2020-12 uses a
34
+ * real `{ type: "null" }` branch — the form {@link makeSchemaStrictCompatible}
35
+ * produces.
36
+ *
37
+ * @param zodSchema - The Zod schema to convert
38
+ * @returns JSON Schema in draft 2020-12
39
+ */
40
+ export declare function convertZodToDraftJsonSchema(zodSchema: any): any;
27
41
  /**
28
42
  * Extracts structured metadata from a Zod schema
29
43
  *
@@ -107,5 +121,80 @@ export declare function formatFieldWithDescription(fieldName: string, fieldValue
107
121
  * ```
108
122
  */
109
123
  export declare function sanitizeSchemaForGemini(schema: any): any;
124
+ /**
125
+ * Reports whether a schema can be sent through OpenAI's STRICT structured-output
126
+ * mode (`response_format: { type: "json_schema", strict: true }`).
127
+ *
128
+ * Strict mode has two rules that ordinary Zod schemas routinely break:
129
+ * 1. every key in `properties` must also appear in `required` — strict mode
130
+ * cannot express an absent field, only a null one, so `.optional()` and
131
+ * `.default()` both violate it;
132
+ * 2. `additionalProperties` must be `false` — so open records cannot qualify.
133
+ *
134
+ * This matters because LangChain hands any Zod schema to `interopZodResponseFormat`,
135
+ * which hardcodes `strict: true`; passing `strict: false` does nothing. A schema
136
+ * that fails these rules must therefore go through tool/function calling instead,
137
+ * which imposes neither rule AND keeps LangChain's Zod validation of the result.
138
+ *
139
+ * Deciding from the schema — rather than from a model or provider name — means no
140
+ * model taxonomy lives in this codebase, and any schema authored strict-clean later
141
+ * automatically earns the stronger guaranteed-conformance path.
142
+ *
143
+ * @param schema - JSON Schema object (typically from {@link convertZodToJsonSchema})
144
+ * @returns true when strict mode would accept the schema
145
+ */
146
+ export declare function isStrictStructuredOutputCompatible(schema: any): boolean;
147
+ /**
148
+ * Rewrites a JSON Schema so OpenAI's STRICT structured-output mode accepts it.
149
+ *
150
+ * Strict mode cannot express "this key may be absent" — only "this key may be
151
+ * null". So every property becomes required, and any property that was NOT
152
+ * originally required is widened to `anyOf: [<original>, { type: "null" }]`.
153
+ * `additionalProperties` is closed on every object.
154
+ *
155
+ * This is the request half of a pair: {@link stripSyntheticNulls} undoes it on the
156
+ * response, so the caller's original Zod schema still validates the result.
157
+ *
158
+ * Why bother, rather than routing non-strict schemas to tool calling: strict mode
159
+ * is the only path that GUARANTEES the payload matches the schema. Measured against
160
+ * a live gpt-5-nano deployment, tool calling returned a string where the schema
161
+ * declared `assumptions: string[]` in roughly half of all runs; strict mode cannot
162
+ * do that by construction.
163
+ *
164
+ * @param schema - JSON Schema object (draft 2020-12 shape)
165
+ * @returns A structurally equivalent schema that satisfies strict mode
166
+ */
167
+ export declare function makeSchemaStrictCompatible(schema: any): any;
168
+ /**
169
+ * Removes the nulls that {@link makeSchemaStrictCompatible} forced the model to emit,
170
+ * so a value produced under strict mode validates against the ORIGINAL schema again.
171
+ *
172
+ * Only keys the transform actually widened are stripped: a key the author declared
173
+ * `.nullable()` was already required, so its null is meaningful and is preserved.
174
+ * Stripping restores absence, which is what `.optional()` expects and what `.default()`
175
+ * needs in order to apply its default.
176
+ *
177
+ * NOT HANDLED — four node kinds this walk never reaches, where an author-intended
178
+ * null could be dropped (or a synthetic one kept). None occur in this repo today, and
179
+ * each would need BOTH this function and {@link isStrictStructuredOutputCompatible}'s
180
+ * traversal extended before it could be trusted:
181
+ *
182
+ * 1. `.nullable().optional()` — the key is absent from `required`, so its null is
183
+ * read as synthetic and stripped, even though the author declared null to be a
184
+ * legitimate value. (`.nullable()` alone is safe: it stays required.)
185
+ * 2. Nulls inside `anyOf` / `oneOf` branches — the walk descends only through
186
+ * `properties` and `items`, so a null-bearing union branch is never visited and
187
+ * its object properties are compared against no schema at all.
188
+ * 3. Nulls behind `$ref` / `$defs` — there is no ref resolution here, so a
189
+ * referenced subschema contributes no `required` set and every null under it
190
+ * survives, synthetic or not.
191
+ * 4. Tuples / `prefixItems` — only the single `items` schema is followed, so a
192
+ * positional tuple's element schemas are never applied.
193
+ *
194
+ * @param value - The parsed model output
195
+ * @param originalSchema - The schema BEFORE strictification (the source of truth for
196
+ * which keys were genuinely required)
197
+ */
198
+ export declare function stripSyntheticNulls(value: any, originalSchema: any): any;
110
199
  export {};
111
200
  //# sourceMappingURL=schema.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.utils.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/utils/schema.utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAO1D;AAqDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,GAAG,GAAG,cAAc,CAOpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB3G;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CA0ExD"}
1
+ {"version":3,"file":"schema.utils.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/utils/schema.utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAa1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAoB/D;AAqDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,GAAG,GAAG,cAAc,CAOpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB3G;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CA0ExD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CA8CvE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAmC3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,GAAG,GAAG,CAqBxE"}