@dexto/core 1.6.1 → 1.6.3

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 (140) hide show
  1. package/dist/agent/DextoAgent.cjs +54 -0
  2. package/dist/agent/DextoAgent.d.ts +12 -1
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +54 -0
  5. package/dist/agent/agent-options.d.ts +6 -1
  6. package/dist/agent/agent-options.d.ts.map +1 -1
  7. package/dist/events/index.d.ts +9 -1
  8. package/dist/events/index.d.ts.map +1 -1
  9. package/dist/llm/executor/provider-options.cjs +223 -28
  10. package/dist/llm/executor/provider-options.d.ts +3 -37
  11. package/dist/llm/executor/provider-options.d.ts.map +1 -1
  12. package/dist/llm/executor/provider-options.js +227 -27
  13. package/dist/llm/executor/stream-processor.cjs +54 -31
  14. package/dist/llm/executor/stream-processor.d.ts +9 -2
  15. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  16. package/dist/llm/executor/stream-processor.js +52 -29
  17. package/dist/llm/executor/turn-executor.cjs +63 -41
  18. package/dist/llm/executor/turn-executor.d.ts +2 -2
  19. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  20. package/dist/llm/executor/turn-executor.js +53 -31
  21. package/dist/llm/formatters/vercel.cjs +15 -3
  22. package/dist/llm/formatters/vercel.d.ts +1 -0
  23. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  24. package/dist/llm/formatters/vercel.js +15 -3
  25. package/dist/llm/index.cjs +8 -0
  26. package/dist/llm/index.d.ts +2 -1
  27. package/dist/llm/index.d.ts.map +1 -1
  28. package/dist/llm/index.js +7 -0
  29. package/dist/llm/providers/local/schemas.d.ts +2 -2
  30. package/dist/llm/providers/openrouter-model-registry.cjs +66 -11
  31. package/dist/llm/providers/openrouter-model-registry.d.ts +26 -0
  32. package/dist/llm/providers/openrouter-model-registry.d.ts.map +1 -1
  33. package/dist/llm/providers/openrouter-model-registry.js +65 -11
  34. package/dist/{utils/user-info.cjs → llm/reasoning/anthropic-betas.cjs} +9 -8
  35. package/dist/llm/reasoning/anthropic-betas.d.ts +3 -0
  36. package/dist/llm/reasoning/anthropic-betas.d.ts.map +1 -0
  37. package/dist/llm/reasoning/anthropic-betas.js +7 -0
  38. package/dist/llm/reasoning/anthropic-thinking.cjs +79 -0
  39. package/dist/llm/reasoning/anthropic-thinking.d.ts +15 -0
  40. package/dist/llm/reasoning/anthropic-thinking.d.ts.map +1 -0
  41. package/dist/llm/reasoning/anthropic-thinking.js +52 -0
  42. package/dist/llm/reasoning/openai-reasoning-effort.cjs +86 -0
  43. package/dist/llm/reasoning/openai-reasoning-effort.d.ts +5 -0
  44. package/dist/llm/reasoning/openai-reasoning-effort.d.ts.map +1 -0
  45. package/dist/llm/reasoning/openai-reasoning-effort.js +61 -0
  46. package/dist/llm/reasoning/profile.cjs +113 -0
  47. package/dist/llm/reasoning/profile.d.ts +13 -0
  48. package/dist/llm/reasoning/profile.d.ts.map +1 -0
  49. package/dist/llm/reasoning/profile.js +92 -0
  50. package/dist/llm/reasoning/profiles/anthropic.cjs +61 -0
  51. package/dist/llm/reasoning/profiles/anthropic.d.ts +8 -0
  52. package/dist/llm/reasoning/profiles/anthropic.d.ts.map +1 -0
  53. package/dist/llm/reasoning/profiles/anthropic.js +45 -0
  54. package/dist/llm/reasoning/profiles/bedrock.cjs +54 -0
  55. package/dist/llm/reasoning/profiles/bedrock.d.ts +3 -0
  56. package/dist/llm/reasoning/profiles/bedrock.d.ts.map +1 -0
  57. package/dist/llm/reasoning/profiles/bedrock.js +36 -0
  58. package/dist/llm/reasoning/profiles/google.cjs +45 -0
  59. package/dist/llm/reasoning/profiles/google.d.ts +9 -0
  60. package/dist/llm/reasoning/profiles/google.d.ts.map +1 -0
  61. package/dist/llm/reasoning/profiles/google.js +21 -0
  62. package/dist/llm/reasoning/profiles/openai-compatible.cjs +39 -0
  63. package/dist/llm/reasoning/profiles/openai-compatible.d.ts +3 -0
  64. package/dist/llm/reasoning/profiles/openai-compatible.d.ts.map +1 -0
  65. package/dist/llm/reasoning/profiles/openai-compatible.js +16 -0
  66. package/dist/llm/reasoning/profiles/openai.cjs +41 -0
  67. package/dist/llm/reasoning/profiles/openai.d.ts +3 -0
  68. package/dist/llm/reasoning/profiles/openai.d.ts.map +1 -0
  69. package/dist/llm/reasoning/profiles/openai.js +18 -0
  70. package/dist/llm/reasoning/profiles/openrouter.cjs +83 -0
  71. package/dist/llm/reasoning/profiles/openrouter.d.ts +10 -0
  72. package/dist/llm/reasoning/profiles/openrouter.d.ts.map +1 -0
  73. package/dist/llm/reasoning/profiles/openrouter.js +59 -0
  74. package/dist/llm/reasoning/profiles/shared.cjs +80 -0
  75. package/dist/llm/reasoning/profiles/shared.d.ts +25 -0
  76. package/dist/llm/reasoning/profiles/shared.d.ts.map +1 -0
  77. package/dist/llm/reasoning/profiles/shared.js +53 -0
  78. package/dist/llm/reasoning/profiles/vertex.cjs +46 -0
  79. package/dist/llm/reasoning/profiles/vertex.d.ts +3 -0
  80. package/dist/llm/reasoning/profiles/vertex.d.ts.map +1 -0
  81. package/dist/llm/reasoning/profiles/vertex.js +23 -0
  82. package/dist/llm/registry/auto-update.cjs +18 -0
  83. package/dist/llm/registry/auto-update.d.ts.map +1 -1
  84. package/dist/llm/registry/auto-update.js +18 -0
  85. package/dist/llm/registry/index.cjs +126 -26
  86. package/dist/llm/registry/index.d.ts +48 -4
  87. package/dist/llm/registry/index.d.ts.map +1 -1
  88. package/dist/llm/registry/index.js +136 -28
  89. package/dist/llm/registry/models.generated.cjs +5198 -59
  90. package/dist/llm/registry/models.generated.d.ts +1893 -76
  91. package/dist/llm/registry/models.generated.d.ts.map +1 -1
  92. package/dist/llm/registry/models.generated.js +5196 -58
  93. package/dist/llm/registry/sync.cjs +72 -1
  94. package/dist/llm/registry/sync.d.ts +21 -1
  95. package/dist/llm/registry/sync.d.ts.map +1 -1
  96. package/dist/llm/registry/sync.js +72 -1
  97. package/dist/llm/resolver.cjs +13 -1
  98. package/dist/llm/resolver.d.ts.map +1 -1
  99. package/dist/llm/resolver.js +13 -1
  100. package/dist/llm/schemas.cjs +75 -14
  101. package/dist/llm/schemas.d.ts +80 -23
  102. package/dist/llm/schemas.d.ts.map +1 -1
  103. package/dist/llm/schemas.js +75 -14
  104. package/dist/llm/services/factory.cjs +55 -8
  105. package/dist/llm/services/factory.d.ts +1 -1
  106. package/dist/llm/services/factory.d.ts.map +1 -1
  107. package/dist/llm/services/factory.js +58 -8
  108. package/dist/llm/services/vercel.cjs +1 -1
  109. package/dist/llm/services/vercel.js +1 -1
  110. package/dist/llm/types.d.ts +9 -0
  111. package/dist/llm/types.d.ts.map +1 -1
  112. package/dist/prompts/index.cjs +9 -0
  113. package/dist/prompts/index.d.ts +1 -0
  114. package/dist/prompts/index.d.ts.map +1 -1
  115. package/dist/prompts/index.js +10 -0
  116. package/dist/prompts/prompt-manager.cjs +2 -0
  117. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  118. package/dist/prompts/prompt-manager.js +2 -0
  119. package/dist/prompts/providers/config-prompt-provider.cjs +11 -1
  120. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  121. package/dist/prompts/providers/config-prompt-provider.js +11 -1
  122. package/dist/prompts/schemas.cjs +2 -2
  123. package/dist/prompts/schemas.js +2 -2
  124. package/dist/prompts/types.d.ts +6 -2
  125. package/dist/prompts/types.d.ts.map +1 -1
  126. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts +1 -1
  127. package/dist/tools/tool-manager.cjs +88 -2
  128. package/dist/tools/tool-manager.d.ts +15 -1
  129. package/dist/tools/tool-manager.d.ts.map +1 -1
  130. package/dist/tools/tool-manager.js +88 -2
  131. package/dist/utils/service-initializer.d.ts +1 -0
  132. package/dist/utils/service-initializer.d.ts.map +1 -1
  133. package/package.json +7 -5
  134. package/dist/utils/schema-metadata.cjs +0 -235
  135. package/dist/utils/schema-metadata.d.ts +0 -82
  136. package/dist/utils/schema-metadata.d.ts.map +0 -1
  137. package/dist/utils/schema-metadata.js +0 -208
  138. package/dist/utils/user-info.d.ts +0 -2
  139. package/dist/utils/user-info.d.ts.map +0 -1
  140. package/dist/utils/user-info.js +0 -7
@@ -105,7 +105,7 @@ class StreamProcessor {
105
105
  case "reasoning-delta":
106
106
  this.reasoningText += event.text;
107
107
  if (event.providerMetadata) {
108
- this.reasoningMetadata = event.providerMetadata;
108
+ this.mergeReasoningMetadata(event.providerMetadata);
109
109
  }
110
110
  if (this.streaming) {
111
111
  this.eventBus.emit("llm:chunk", {
@@ -262,10 +262,8 @@ class StreamProcessor {
262
262
  this.logger.info("LLM response complete", {
263
263
  finishReason: event.finishReason,
264
264
  contentLength: this.accumulatedText.length,
265
- content: this.accumulatedText,
266
265
  ...this.reasoningText && {
267
- reasoningLength: this.reasoningText.length,
268
- reasoning: this.reasoningText
266
+ reasoningLength: this.reasoningText.length
269
267
  },
270
268
  usage,
271
269
  provider: this.config.provider,
@@ -286,15 +284,8 @@ class StreamProcessor {
286
284
  }
287
285
  const hasContent = this.accumulatedText || this.reasoningText;
288
286
  if (this.finishReason !== "tool-calls" || hasContent) {
289
- this.eventBus.emit("llm:response", {
290
- content: this.accumulatedText,
291
- ...this.reasoningText && { reasoning: this.reasoningText },
292
- provider: this.config.provider,
293
- model: this.config.model,
287
+ this.emitLLMResponse({
294
288
  tokenUsage: usage,
295
- ...this.config.estimatedInputTokens !== void 0 && {
296
- estimatedInputTokens: this.config.estimatedInputTokens
297
- },
298
289
  finishReason: this.finishReason
299
290
  });
300
291
  }
@@ -341,7 +332,7 @@ class StreamProcessor {
341
332
  }
342
333
  case "error": {
343
334
  const err = event.error instanceof Error ? event.error : new Error(String(event.error));
344
- this.logger.error(`LLM error: ${err.toString()}}`);
335
+ this.logger.error("LLM error", { error: err });
345
336
  this.eventBus.emit("llm:error", {
346
337
  error: err
347
338
  });
@@ -351,15 +342,8 @@ class StreamProcessor {
351
342
  this.logger.debug("Stream aborted, emitting partial response");
352
343
  this.finishReason = "cancelled";
353
344
  await this.persistCancelledToolResults();
354
- this.eventBus.emit("llm:response", {
355
- content: this.accumulatedText,
356
- ...this.reasoningText && { reasoning: this.reasoningText },
357
- provider: this.config.provider,
358
- model: this.config.model,
345
+ this.emitLLMResponse({
359
346
  tokenUsage: this.actualTokens,
360
- ...this.config.estimatedInputTokens !== void 0 && {
361
- estimatedInputTokens: this.config.estimatedInputTokens
362
- },
363
347
  finishReason: "cancelled"
364
348
  });
365
349
  return {
@@ -375,15 +359,8 @@ class StreamProcessor {
375
359
  this.logger.debug("Stream cancelled, emitting partial response");
376
360
  this.finishReason = "cancelled";
377
361
  await this.persistCancelledToolResults();
378
- this.eventBus.emit("llm:response", {
379
- content: this.accumulatedText,
380
- ...this.reasoningText && { reasoning: this.reasoningText },
381
- provider: this.config.provider,
382
- model: this.config.model,
362
+ this.emitLLMResponse({
383
363
  tokenUsage: this.actualTokens,
384
- ...this.config.estimatedInputTokens !== void 0 && {
385
- estimatedInputTokens: this.config.estimatedInputTokens
386
- },
387
364
  finishReason: "cancelled"
388
365
  });
389
366
  return {
@@ -441,6 +418,52 @@ class StreamProcessor {
441
418
  }
442
419
  return metadata;
443
420
  }
421
+ getReasoningResponseFields() {
422
+ return {
423
+ ...this.config.reasoningVariant !== void 0 && {
424
+ reasoningVariant: this.config.reasoningVariant
425
+ },
426
+ ...this.config.reasoningBudgetTokens !== void 0 && {
427
+ reasoningBudgetTokens: this.config.reasoningBudgetTokens
428
+ }
429
+ };
430
+ }
431
+ emitLLMResponse(config) {
432
+ this.eventBus.emit("llm:response", {
433
+ content: this.accumulatedText,
434
+ ...this.reasoningText && { reasoning: this.reasoningText },
435
+ provider: this.config.provider,
436
+ model: this.config.model,
437
+ ...this.getReasoningResponseFields(),
438
+ tokenUsage: config.tokenUsage,
439
+ ...this.config.estimatedInputTokens !== void 0 && {
440
+ estimatedInputTokens: this.config.estimatedInputTokens
441
+ },
442
+ finishReason: config.finishReason
443
+ });
444
+ }
445
+ mergeReasoningMetadata(providerMetadata) {
446
+ if (!this.reasoningMetadata) {
447
+ this.reasoningMetadata = providerMetadata;
448
+ return;
449
+ }
450
+ const isRecord = (value) => !!value && typeof value === "object" && !Array.isArray(value);
451
+ const previous = this.reasoningMetadata;
452
+ const merged = { ...previous, ...providerMetadata };
453
+ const previousOpenRouter = previous["openrouter"];
454
+ const nextOpenRouter = providerMetadata["openrouter"];
455
+ if (isRecord(previousOpenRouter) && isRecord(nextOpenRouter)) {
456
+ const previousDetails = previousOpenRouter["reasoning_details"];
457
+ const nextDetails = nextOpenRouter["reasoning_details"];
458
+ const combinedDetails = Array.isArray(previousDetails) && Array.isArray(nextDetails) ? [...previousDetails, ...nextDetails] : Array.isArray(nextDetails) ? nextDetails : Array.isArray(previousDetails) ? previousDetails : void 0;
459
+ merged["openrouter"] = {
460
+ ...previousOpenRouter,
461
+ ...nextOpenRouter,
462
+ ...combinedDetails ? { reasoning_details: combinedDetails } : {}
463
+ };
464
+ }
465
+ this.reasoningMetadata = merged;
466
+ }
444
467
  async createAssistantMessage() {
445
468
  await this.contextManager.addAssistantMessage("", [], {});
446
469
  return this.getLastMessageId();
@@ -80,10 +80,10 @@ var import_ai = require("ai");
80
80
  var import_api = require("@opentelemetry/api");
81
81
  var import_stream_processor = require("./stream-processor.js");
82
82
  var import_provider_options = require("./provider-options.js");
83
- var import_types4 = require("../../logger/v2/types.js");
83
+ var import_types3 = require("../../logger/v2/types.js");
84
84
  var import_defer = require("../../utils/defer.js");
85
85
  var import_DextoRuntimeError = require("../../errors/DextoRuntimeError.js");
86
- var import_types7 = require("../../errors/types.js");
86
+ var import_types5 = require("../../errors/types.js");
87
87
  var import_error_codes = require("../error-codes.js");
88
88
  var import_error_conversion = require("../../utils/error-conversion.js");
89
89
  const toolSupportCache = /* @__PURE__ */ new Map();
@@ -101,7 +101,7 @@ class TurnExecutor {
101
101
  this.messageQueue = messageQueue;
102
102
  this.modelLimits = modelLimits;
103
103
  this.externalSignal = externalSignal;
104
- this.logger = logger.createChild(import_types4.DextoLogComponent.EXECUTOR);
104
+ this.logger = logger.createChild(import_types3.DextoLogComponent.EXECUTOR);
105
105
  this.stepAbortController = new AbortController();
106
106
  this.compactionStrategy = compactionStrategy;
107
107
  }
@@ -121,11 +121,17 @@ class TurnExecutor {
121
121
  * Get StreamProcessor config from TurnExecutor state.
122
122
  * @param estimatedInputTokens Optional estimated input tokens for analytics
123
123
  */
124
- getStreamProcessorConfig(estimatedInputTokens) {
124
+ getStreamProcessorConfig(estimatedInputTokens, reasoning) {
125
125
  return {
126
126
  provider: this.llmContext.provider,
127
127
  model: this.llmContext.model,
128
- ...estimatedInputTokens !== void 0 && { estimatedInputTokens }
128
+ ...estimatedInputTokens !== void 0 && { estimatedInputTokens },
129
+ ...reasoning?.reasoningVariant !== void 0 && {
130
+ reasoningVariant: reasoning.reasoningVariant
131
+ },
132
+ ...reasoning?.reasoningBudgetTokens !== void 0 && {
133
+ reasoningBudgetTokens: reasoning.reasoningBudgetTokens
134
+ }
129
135
  };
130
136
  }
131
137
  /**
@@ -221,43 +227,59 @@ class TurnExecutor {
221
227
  }
222
228
  this.logger.debug(`Step ${stepCount}: Starting`);
223
229
  const tools = supportsTools ? await this.createTools() : {};
230
+ const providerOptions = (0, import_provider_options.buildProviderOptions)({
231
+ provider: this.llmContext.provider,
232
+ model: this.llmContext.model,
233
+ reasoning: this.config.reasoning
234
+ });
235
+ this.logger.debug("LLM request options", {
236
+ provider: this.llmContext.provider,
237
+ model: this.llmContext.model,
238
+ requestedReasoning: {
239
+ variant: this.config.reasoning?.variant,
240
+ budgetTokens: this.config.reasoning?.budgetTokens
241
+ },
242
+ providerOptions
243
+ });
244
+ const reasoningVariant = this.config.reasoning?.variant;
245
+ const reasoningBudgetTokens = (0, import_provider_options.getEffectiveReasoningBudgetTokens)(providerOptions);
246
+ const reasoningForStream = reasoningVariant !== void 0 || reasoningBudgetTokens !== void 0 ? {
247
+ ...reasoningVariant !== void 0 && { reasoningVariant },
248
+ ...reasoningBudgetTokens !== void 0 && { reasoningBudgetTokens }
249
+ } : void 0;
224
250
  const streamProcessor = new import_stream_processor.StreamProcessor(
225
251
  this.contextManager,
226
252
  this.eventBus,
227
253
  this.resourceManager,
228
254
  this.stepAbortController.signal,
229
- this.getStreamProcessorConfig(estimatedTokens),
255
+ this.getStreamProcessorConfig(estimatedTokens, reasoningForStream),
230
256
  this.logger,
231
257
  streaming,
232
258
  this.toolCallMetadata
233
259
  );
234
- const providerOptions = (0, import_provider_options.buildProviderOptions)({
235
- provider: this.llmContext.provider,
236
- model: this.llmContext.model,
237
- reasoningEffort: this.config.reasoningEffort
238
- });
239
- const streamOptions = {
240
- model: this.model,
241
- stopWhen: (0, import_ai.stepCountIs)(1),
242
- tools,
243
- abortSignal: this.stepAbortController.signal,
244
- messages: prepared.formattedMessages,
245
- ...this.config.maxOutputTokens !== void 0 && {
246
- maxOutputTokens: this.config.maxOutputTokens
247
- },
248
- ...this.config.temperature !== void 0 && {
249
- temperature: this.config.temperature
250
- },
251
- // Provider-specific options (caching, reasoning, etc.)
252
- ...providerOptions !== void 0 && {
253
- providerOptions
254
- },
255
- // Log stream-level errors (tool errors, API errors during streaming)
256
- onError: (error) => {
257
- this.logger.error("Stream error", { error });
258
- }
259
- };
260
- const result = await streamProcessor.process(() => (0, import_ai.streamText)(streamOptions));
260
+ const result = await streamProcessor.process(
261
+ () => (0, import_ai.streamText)({
262
+ model: this.model,
263
+ stopWhen: (0, import_ai.stepCountIs)(1),
264
+ tools,
265
+ abortSignal: this.stepAbortController.signal,
266
+ messages: prepared.formattedMessages,
267
+ ...this.config.maxOutputTokens !== void 0 && {
268
+ maxOutputTokens: this.config.maxOutputTokens
269
+ },
270
+ ...this.config.temperature !== void 0 && {
271
+ temperature: this.config.temperature
272
+ },
273
+ // Provider-specific options (caching, reasoning, etc.)
274
+ ...providerOptions !== void 0 && {
275
+ providerOptions
276
+ },
277
+ // Log stream-level errors (tool errors, API errors during streaming)
278
+ onError: (error) => {
279
+ this.logger.error("Stream error", { error });
280
+ }
281
+ })
282
+ );
261
283
  lastStepTokens = result.usage;
262
284
  lastFinishReason = result.finishReason;
263
285
  lastText = result.text;
@@ -868,8 +890,8 @@ class TurnExecutor {
868
890
  }
869
891
  return new import_DextoRuntimeError.DextoRuntimeError(
870
892
  import_error_codes.LLMErrorCode.INSUFFICIENT_CREDITS,
871
- import_types7.ErrorScope.LLM,
872
- import_types7.ErrorType.PAYMENT_REQUIRED,
893
+ import_types5.ErrorScope.LLM,
894
+ import_types5.ErrorType.PAYMENT_REQUIRED,
873
895
  `Insufficient Dexto credits${balance !== void 0 ? `. Balance: $${balance.toFixed(2)}` : ""}`,
874
896
  {
875
897
  sessionId: this.sessionId,
@@ -885,8 +907,8 @@ class TurnExecutor {
885
907
  if (status === 429) {
886
908
  return new import_DextoRuntimeError.DextoRuntimeError(
887
909
  import_error_codes.LLMErrorCode.RATE_LIMIT_EXCEEDED,
888
- import_types7.ErrorScope.LLM,
889
- import_types7.ErrorType.RATE_LIMIT,
910
+ import_types5.ErrorScope.LLM,
911
+ import_types5.ErrorType.RATE_LIMIT,
890
912
  `Rate limit exceeded${body ? ` - ${body}` : ""}`,
891
913
  {
892
914
  sessionId: this.sessionId,
@@ -901,8 +923,8 @@ class TurnExecutor {
901
923
  if (status === 408) {
902
924
  return new import_DextoRuntimeError.DextoRuntimeError(
903
925
  import_error_codes.LLMErrorCode.GENERATION_FAILED,
904
- import_types7.ErrorScope.LLM,
905
- import_types7.ErrorType.TIMEOUT,
926
+ import_types5.ErrorScope.LLM,
927
+ import_types5.ErrorType.TIMEOUT,
906
928
  `Provider timed out${body ? ` - ${body}` : ""}`,
907
929
  {
908
930
  sessionId: this.sessionId,
@@ -915,8 +937,8 @@ class TurnExecutor {
915
937
  }
916
938
  return new import_DextoRuntimeError.DextoRuntimeError(
917
939
  import_error_codes.LLMErrorCode.GENERATION_FAILED,
918
- import_types7.ErrorScope.LLM,
919
- import_types7.ErrorType.THIRD_PARTY,
940
+ import_types5.ErrorScope.LLM,
941
+ import_types5.ErrorType.THIRD_PARTY,
920
942
  `Provider error ${status}${body ? ` - ${body}` : ""}`,
921
943
  {
922
944
  sessionId: this.sessionId,
@@ -2,11 +2,11 @@ import { LanguageModel, type ModelMessage } from 'ai';
2
2
  import { ContextManager } from '../../context/manager.js';
3
3
  import { ToolManager } from '../../tools/tool-manager.js';
4
4
  import { ExecutorResult } from './types.js';
5
+ import type { LLMReasoningConfig, LLMContext } from '../types.js';
5
6
  import type { Logger } from '../../logger/v2/types.js';
6
7
  import type { SessionEventBus } from '../../events/index.js';
7
8
  import type { ResourceManager } from '../../resources/index.js';
8
9
  import { DynamicContributorContext } from '../../systemPrompt/types.js';
9
- import { LLMContext } from '../types.js';
10
10
  import type { MessageQueueService } from '../../session/message-queue.js';
11
11
  import type { CompactionStrategy } from '../../context/compaction/types.js';
12
12
  import type { ModelLimits } from '../../context/compaction/overflow.js';
@@ -51,7 +51,7 @@ export declare class TurnExecutor {
51
51
  maxOutputTokens?: number | undefined;
52
52
  temperature?: number | undefined;
53
53
  baseURL?: string | undefined;
54
- reasoningEffort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | undefined;
54
+ reasoning?: LLMReasoningConfig | undefined;
55
55
  }, llmContext: LLMContext, logger: Logger, messageQueue: MessageQueueService, modelLimits?: ModelLimits | undefined, externalSignal?: AbortSignal | undefined, compactionStrategy?: CompactionStrategy | null);
56
56
  /**
57
57
  * Get StreamProcessor config from TurnExecutor state.
@@ -1 +1 @@
1
- {"version":3,"file":"turn-executor.d.ts","sourceRoot":"","sources":["../../../src/llm/executor/turn-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn-executor.d.ts","sourceRoot":"","sources":["../../../src/llm/executor/turn-executor.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import {
11
11
  } from "ai";
12
12
  import { trace } from "@opentelemetry/api";
13
13
  import { StreamProcessor } from "./stream-processor.js";
14
- import { buildProviderOptions } from "./provider-options.js";
14
+ import { buildProviderOptions, getEffectiveReasoningBudgetTokens } from "./provider-options.js";
15
15
  import { DextoLogComponent } from "../../logger/v2/types.js";
16
16
  import { defer } from "../../utils/defer.js";
17
17
  import { DextoRuntimeError } from "../../errors/DextoRuntimeError.js";
@@ -53,11 +53,17 @@ class TurnExecutor {
53
53
  * Get StreamProcessor config from TurnExecutor state.
54
54
  * @param estimatedInputTokens Optional estimated input tokens for analytics
55
55
  */
56
- getStreamProcessorConfig(estimatedInputTokens) {
56
+ getStreamProcessorConfig(estimatedInputTokens, reasoning) {
57
57
  return {
58
58
  provider: this.llmContext.provider,
59
59
  model: this.llmContext.model,
60
- ...estimatedInputTokens !== void 0 && { estimatedInputTokens }
60
+ ...estimatedInputTokens !== void 0 && { estimatedInputTokens },
61
+ ...reasoning?.reasoningVariant !== void 0 && {
62
+ reasoningVariant: reasoning.reasoningVariant
63
+ },
64
+ ...reasoning?.reasoningBudgetTokens !== void 0 && {
65
+ reasoningBudgetTokens: reasoning.reasoningBudgetTokens
66
+ }
61
67
  };
62
68
  }
63
69
  /**
@@ -153,43 +159,59 @@ class TurnExecutor {
153
159
  }
154
160
  this.logger.debug(`Step ${stepCount}: Starting`);
155
161
  const tools = supportsTools ? await this.createTools() : {};
162
+ const providerOptions = buildProviderOptions({
163
+ provider: this.llmContext.provider,
164
+ model: this.llmContext.model,
165
+ reasoning: this.config.reasoning
166
+ });
167
+ this.logger.debug("LLM request options", {
168
+ provider: this.llmContext.provider,
169
+ model: this.llmContext.model,
170
+ requestedReasoning: {
171
+ variant: this.config.reasoning?.variant,
172
+ budgetTokens: this.config.reasoning?.budgetTokens
173
+ },
174
+ providerOptions
175
+ });
176
+ const reasoningVariant = this.config.reasoning?.variant;
177
+ const reasoningBudgetTokens = getEffectiveReasoningBudgetTokens(providerOptions);
178
+ const reasoningForStream = reasoningVariant !== void 0 || reasoningBudgetTokens !== void 0 ? {
179
+ ...reasoningVariant !== void 0 && { reasoningVariant },
180
+ ...reasoningBudgetTokens !== void 0 && { reasoningBudgetTokens }
181
+ } : void 0;
156
182
  const streamProcessor = new StreamProcessor(
157
183
  this.contextManager,
158
184
  this.eventBus,
159
185
  this.resourceManager,
160
186
  this.stepAbortController.signal,
161
- this.getStreamProcessorConfig(estimatedTokens),
187
+ this.getStreamProcessorConfig(estimatedTokens, reasoningForStream),
162
188
  this.logger,
163
189
  streaming,
164
190
  this.toolCallMetadata
165
191
  );
166
- const providerOptions = buildProviderOptions({
167
- provider: this.llmContext.provider,
168
- model: this.llmContext.model,
169
- reasoningEffort: this.config.reasoningEffort
170
- });
171
- const streamOptions = {
172
- model: this.model,
173
- stopWhen: stepCountIs(1),
174
- tools,
175
- abortSignal: this.stepAbortController.signal,
176
- messages: prepared.formattedMessages,
177
- ...this.config.maxOutputTokens !== void 0 && {
178
- maxOutputTokens: this.config.maxOutputTokens
179
- },
180
- ...this.config.temperature !== void 0 && {
181
- temperature: this.config.temperature
182
- },
183
- // Provider-specific options (caching, reasoning, etc.)
184
- ...providerOptions !== void 0 && {
185
- providerOptions
186
- },
187
- // Log stream-level errors (tool errors, API errors during streaming)
188
- onError: (error) => {
189
- this.logger.error("Stream error", { error });
190
- }
191
- };
192
- const result = await streamProcessor.process(() => streamText(streamOptions));
192
+ const result = await streamProcessor.process(
193
+ () => streamText({
194
+ model: this.model,
195
+ stopWhen: stepCountIs(1),
196
+ tools,
197
+ abortSignal: this.stepAbortController.signal,
198
+ messages: prepared.formattedMessages,
199
+ ...this.config.maxOutputTokens !== void 0 && {
200
+ maxOutputTokens: this.config.maxOutputTokens
201
+ },
202
+ ...this.config.temperature !== void 0 && {
203
+ temperature: this.config.temperature
204
+ },
205
+ // Provider-specific options (caching, reasoning, etc.)
206
+ ...providerOptions !== void 0 && {
207
+ providerOptions
208
+ },
209
+ // Log stream-level errors (tool errors, API errors during streaming)
210
+ onError: (error) => {
211
+ this.logger.error("Stream error", { error });
212
+ }
213
+ })
214
+ );
193
215
  lastStepTokens = result.usage;
194
216
  lastFinishReason = result.finishReason;
195
217
  lastText = result.text;
@@ -113,7 +113,15 @@ class VercelMessageFormatter {
113
113
  }
114
114
  break;
115
115
  case "assistant":
116
- formatted.push({ role: "assistant", ...this.formatAssistantMessage(msg) });
116
+ formatted.push({
117
+ role: "assistant",
118
+ ...this.formatAssistantMessage(msg, {
119
+ // OpenAI/OpenRouter reasoning items can require strict output-item replay.
120
+ // Keep those providers on "no reasoning replay" to avoid invalid_request errors.
121
+ // For other providers we continue to round-trip reasoning where available.
122
+ includeReasoning: this.shouldRoundTripReasoning(context)
123
+ })
124
+ });
117
125
  if (msg.toolCalls && msg.toolCalls.length > 0) {
118
126
  for (const toolCall of msg.toolCalls) {
119
127
  pendingToolCalls.set(toolCall.id, toolCall.function.name);
@@ -166,10 +174,14 @@ class VercelMessageFormatter {
166
174
  formatSystemPrompt() {
167
175
  return null;
168
176
  }
177
+ shouldRoundTripReasoning(context) {
178
+ return context.provider !== "openai" && context.provider !== "openai-compatible" && context.provider !== "openrouter" && context.provider !== "dexto-nova";
179
+ }
169
180
  // Helper to format Assistant messages (with optional tool calls and reasoning)
170
- formatAssistantMessage(msg) {
181
+ formatAssistantMessage(msg, config) {
171
182
  const contentParts = [];
172
- if (msg.reasoning) {
183
+ const includeReasoning = config?.includeReasoning ?? false;
184
+ if (includeReasoning && msg.reasoning) {
173
185
  const reasoningPart = {
174
186
  type: "reasoning",
175
187
  text: msg.reasoning,
@@ -32,6 +32,7 @@ export declare class VercelMessageFormatter {
32
32
  * @returns null as Vercel doesn't need a separate system prompt
33
33
  */
34
34
  formatSystemPrompt(): null;
35
+ private shouldRoundTripReasoning;
35
36
  private formatAssistantMessage;
36
37
  private formatToolMessage;
37
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/formatters/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiD,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAE7F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAmBvD;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAG1B;;;;;;OAMG;IACH,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,EACpC,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC5B,YAAY,EAAE;IAsJjB;;;;;;OAMG;IACH,kBAAkB,IAAI,IAAI;IAK1B,OAAO,CAAC,sBAAsB;IA0F9B,OAAO,CAAC,iBAAiB;CAoE5B"}
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/formatters/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiD,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAE7F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAmBvD;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAG1B;;;;;;OAMG;IACH,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,EACpC,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC5B,YAAY,EAAE;IA8JjB;;;;;;OAMG;IACH,kBAAkB,IAAI,IAAI;IAI1B,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,sBAAsB;IAmG9B,OAAO,CAAC,iBAAiB;CAoE5B"}
@@ -91,7 +91,15 @@ class VercelMessageFormatter {
91
91
  }
92
92
  break;
93
93
  case "assistant":
94
- formatted.push({ role: "assistant", ...this.formatAssistantMessage(msg) });
94
+ formatted.push({
95
+ role: "assistant",
96
+ ...this.formatAssistantMessage(msg, {
97
+ // OpenAI/OpenRouter reasoning items can require strict output-item replay.
98
+ // Keep those providers on "no reasoning replay" to avoid invalid_request errors.
99
+ // For other providers we continue to round-trip reasoning where available.
100
+ includeReasoning: this.shouldRoundTripReasoning(context)
101
+ })
102
+ });
95
103
  if (msg.toolCalls && msg.toolCalls.length > 0) {
96
104
  for (const toolCall of msg.toolCalls) {
97
105
  pendingToolCalls.set(toolCall.id, toolCall.function.name);
@@ -144,10 +152,14 @@ class VercelMessageFormatter {
144
152
  formatSystemPrompt() {
145
153
  return null;
146
154
  }
155
+ shouldRoundTripReasoning(context) {
156
+ return context.provider !== "openai" && context.provider !== "openai-compatible" && context.provider !== "openrouter" && context.provider !== "dexto-nova";
157
+ }
147
158
  // Helper to format Assistant messages (with optional tool calls and reasoning)
148
- formatAssistantMessage(msg) {
159
+ formatAssistantMessage(msg, config) {
149
160
  const contentParts = [];
150
- if (msg.reasoning) {
161
+ const includeReasoning = config?.includeReasoning ?? false;
162
+ if (includeReasoning && msg.reasoning) {
151
163
  const reasoningPart = {
152
164
  type: "reasoning",
153
165
  text: msg.reasoning,
@@ -19,13 +19,16 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
20
  var llm_exports = {};
21
21
  __export(llm_exports, {
22
+ getCachedOpenRouterModelsWithInfo: () => import_openrouter_model_registry.getCachedOpenRouterModelsWithInfo,
22
23
  getLlmRegistryAutoUpdateStatus: () => import_auto_update.getLlmRegistryAutoUpdateStatus,
24
+ getOpenRouterModelCacheInfo: () => import_openrouter_model_registry.getOpenRouterModelCacheInfo,
23
25
  getOpenRouterModelContextLength: () => import_openrouter_model_registry.getOpenRouterModelContextLength,
24
26
  getOpenRouterModelInfo: () => import_openrouter_model_registry.getOpenRouterModelInfo,
25
27
  loadLlmRegistryCache: () => import_auto_update.loadLlmRegistryCache,
26
28
  lookupOpenRouterModel: () => import_openrouter_model_registry.lookupOpenRouterModel,
27
29
  refreshLlmRegistryCache: () => import_auto_update.refreshLlmRegistryCache,
28
30
  refreshOpenRouterModelCache: () => import_openrouter_model_registry.refreshOpenRouterModelCache,
31
+ scheduleOpenRouterModelRefresh: () => import_openrouter_model_registry.scheduleOpenRouterModelRefresh,
29
32
  startLlmRegistryAutoUpdate: () => import_auto_update.startLlmRegistryAutoUpdate
30
33
  });
31
34
  module.exports = __toCommonJS(llm_exports);
@@ -35,6 +38,7 @@ __reExport(llm_exports, require("./registry/index.js"), module.exports);
35
38
  __reExport(llm_exports, require("./curation.js"), module.exports);
36
39
  __reExport(llm_exports, require("./validation.js"), module.exports);
37
40
  __reExport(llm_exports, require("./types.js"), module.exports);
41
+ __reExport(llm_exports, require("./reasoning/profile.js"), module.exports);
38
42
  __reExport(llm_exports, require("./services/index.js"), module.exports);
39
43
  __reExport(llm_exports, require("./schemas.js"), module.exports);
40
44
  var import_openrouter_model_registry = require("./providers/openrouter-model-registry.js");
@@ -42,13 +46,16 @@ var import_auto_update = require("./registry/auto-update.js");
42
46
  __reExport(llm_exports, require("./providers/local/index.js"), module.exports);
43
47
  // Annotate the CommonJS export names for ESM import in node:
44
48
  0 && (module.exports = {
49
+ getCachedOpenRouterModelsWithInfo,
45
50
  getLlmRegistryAutoUpdateStatus,
51
+ getOpenRouterModelCacheInfo,
46
52
  getOpenRouterModelContextLength,
47
53
  getOpenRouterModelInfo,
48
54
  loadLlmRegistryCache,
49
55
  lookupOpenRouterModel,
50
56
  refreshLlmRegistryCache,
51
57
  refreshOpenRouterModelCache,
58
+ scheduleOpenRouterModelRefresh,
52
59
  startLlmRegistryAutoUpdate,
53
60
  ...require("./errors.js"),
54
61
  ...require("./error-codes.js"),
@@ -56,6 +63,7 @@ __reExport(llm_exports, require("./providers/local/index.js"), module.exports);
56
63
  ...require("./curation.js"),
57
64
  ...require("./validation.js"),
58
65
  ...require("./types.js"),
66
+ ...require("./reasoning/profile.js"),
59
67
  ...require("./services/index.js"),
60
68
  ...require("./schemas.js"),
61
69
  ...require("./providers/local/index.js")
@@ -4,9 +4,10 @@ export * from './registry/index.js';
4
4
  export * from './curation.js';
5
5
  export * from './validation.js';
6
6
  export * from './types.js';
7
+ export * from './reasoning/profile.js';
7
8
  export * from './services/index.js';
8
9
  export * from './schemas.js';
9
- export { lookupOpenRouterModel, refreshOpenRouterModelCache, getOpenRouterModelContextLength, getOpenRouterModelInfo, type LookupStatus, type OpenRouterModelInfo, } from './providers/openrouter-model-registry.js';
10
+ export { getCachedOpenRouterModelsWithInfo, lookupOpenRouterModel, scheduleOpenRouterModelRefresh, refreshOpenRouterModelCache, getOpenRouterModelCacheInfo, getOpenRouterModelContextLength, getOpenRouterModelInfo, type LookupStatus, type OpenRouterModelInfo, } from './providers/openrouter-model-registry.js';
10
11
  export { startLlmRegistryAutoUpdate, refreshLlmRegistryCache, loadLlmRegistryCache, getLlmRegistryAutoUpdateStatus, type LlmRegistryAutoUpdateStatus, } from './registry/auto-update.js';
11
12
  export * from './providers/local/index.js';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACH,qBAAqB,EACrB,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GAC3B,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EACH,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACH,iCAAiC,EACjC,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GAC3B,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EACH,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,4BAA4B,CAAC"}
package/dist/llm/index.js CHANGED
@@ -5,11 +5,15 @@ export * from "./registry/index.js";
5
5
  export * from "./curation.js";
6
6
  export * from "./validation.js";
7
7
  export * from "./types.js";
8
+ export * from "./reasoning/profile.js";
8
9
  export * from "./services/index.js";
9
10
  export * from "./schemas.js";
10
11
  import {
12
+ getCachedOpenRouterModelsWithInfo,
11
13
  lookupOpenRouterModel,
14
+ scheduleOpenRouterModelRefresh,
12
15
  refreshOpenRouterModelCache,
16
+ getOpenRouterModelCacheInfo,
13
17
  getOpenRouterModelContextLength,
14
18
  getOpenRouterModelInfo
15
19
  } from "./providers/openrouter-model-registry.js";
@@ -21,12 +25,15 @@ import {
21
25
  } from "./registry/auto-update.js";
22
26
  export * from "./providers/local/index.js";
23
27
  export {
28
+ getCachedOpenRouterModelsWithInfo,
24
29
  getLlmRegistryAutoUpdateStatus,
30
+ getOpenRouterModelCacheInfo,
25
31
  getOpenRouterModelContextLength,
26
32
  getOpenRouterModelInfo,
27
33
  loadLlmRegistryCache,
28
34
  lookupOpenRouterModel,
29
35
  refreshLlmRegistryCache,
30
36
  refreshOpenRouterModelCache,
37
+ scheduleOpenRouterModelRefresh,
31
38
  startLlmRegistryAutoUpdate
32
39
  };