@voltagent/core 2.3.1 → 2.3.2

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.
package/dist/index.js CHANGED
@@ -12788,6 +12788,34 @@ var bytesToBase64 = /* @__PURE__ */ __name((bytes) => {
12788
12788
  }, "bytesToBase64");
12789
12789
 
12790
12790
  // src/utils/message-converter.ts
12791
+ var hasOpenAIReasoningProviderOptions = /* @__PURE__ */ __name((providerOptions) => {
12792
+ if (!providerOptions || typeof providerOptions !== "object") {
12793
+ return false;
12794
+ }
12795
+ const openai = providerOptions.openai;
12796
+ if (!openai || typeof openai !== "object") {
12797
+ return false;
12798
+ }
12799
+ const itemId = typeof openai.itemId === "string" ? openai.itemId.trim() : "";
12800
+ if (itemId) {
12801
+ return true;
12802
+ }
12803
+ const reasoningTraceId = typeof openai.reasoning_trace_id === "string" ? openai.reasoning_trace_id.trim() : "";
12804
+ if (reasoningTraceId) {
12805
+ return true;
12806
+ }
12807
+ const reasoning = openai.reasoning;
12808
+ if (reasoning && typeof reasoning === "object") {
12809
+ const reasoningId = typeof reasoning.id === "string" ? reasoning.id.trim() : "";
12810
+ if (reasoningId) {
12811
+ return true;
12812
+ }
12813
+ }
12814
+ if (typeof openai.reasoningEncryptedContent === "string" && openai.reasoningEncryptedContent) {
12815
+ return true;
12816
+ }
12817
+ return false;
12818
+ }, "hasOpenAIReasoningProviderOptions");
12791
12819
  function findExistingToolPart(parts, toolCallId) {
12792
12820
  for (let i = parts.length - 1; i >= 0; i--) {
12793
12821
  const part = parts[i];
@@ -12936,10 +12964,13 @@ function convertModelMessagesToUIMessages(messages) {
12936
12964
  break;
12937
12965
  }
12938
12966
  case "reasoning": {
12939
- if (contentPart.text && contentPart.text.length > 0) {
12967
+ const reasoningText = typeof contentPart.text === "string" ? contentPart.text : "";
12968
+ const hasReasoningId = typeof contentPart.id === "string" && contentPart.id.trim().length > 0;
12969
+ const shouldKeep = reasoningText.length > 0 || hasReasoningId || hasOpenAIReasoningProviderOptions(contentPart.providerOptions);
12970
+ if (shouldKeep) {
12940
12971
  ui.parts.push({
12941
12972
  type: "reasoning",
12942
- text: contentPart.text,
12973
+ text: reasoningText,
12943
12974
  ...contentPart.providerOptions ? { providerMetadata: contentPart.providerOptions } : {},
12944
12975
  ...contentPart.id ? { reasoningId: contentPart.id } : {},
12945
12976
  ...contentPart.confidence ? { reasoningConfidence: contentPart.confidence } : {}
@@ -19698,7 +19729,9 @@ var WORKING_MEMORY_TOOL_NAMES = /* @__PURE__ */ new Set([
19698
19729
  "get_working_memory",
19699
19730
  "clear_working_memory"
19700
19731
  ]);
19732
+ var OPENAI_REASONING_ID_PREFIX = "rs_";
19701
19733
  var isObject = /* @__PURE__ */ __name((value) => typeof value === "object" && value !== null, "isObject");
19734
+ var isOpenAIReasoningId = /* @__PURE__ */ __name((value) => value.trim().startsWith(OPENAI_REASONING_ID_PREFIX), "isOpenAIReasoningId");
19702
19735
  var safeClone = /* @__PURE__ */ __name((value) => {
19703
19736
  if (!isObject(value) && !Array.isArray(value)) {
19704
19737
  return value;
@@ -19743,7 +19776,54 @@ var sanitizeReasoningProviderMetadata = /* @__PURE__ */ __name((providerMetadata
19743
19776
  }
19744
19777
  return cloned;
19745
19778
  }, "sanitizeReasoningProviderMetadata");
19779
+ var extractOpenAIReasoningId = /* @__PURE__ */ __name((metadata) => {
19780
+ const openai = metadata.openai;
19781
+ if (!isObject(openai)) {
19782
+ return void 0;
19783
+ }
19784
+ if (typeof openai.itemId === "string") {
19785
+ const itemId = openai.itemId.trim();
19786
+ if (itemId) {
19787
+ return itemId;
19788
+ }
19789
+ }
19790
+ if (typeof openai.reasoning_trace_id === "string") {
19791
+ const traceId = openai.reasoning_trace_id.trim();
19792
+ if (traceId) {
19793
+ return traceId;
19794
+ }
19795
+ }
19796
+ const reasoning = openai.reasoning;
19797
+ if (isObject(reasoning)) {
19798
+ const reasoningId = typeof reasoning.id === "string" ? reasoning.id.trim() : "";
19799
+ if (reasoningId) {
19800
+ return reasoningId;
19801
+ }
19802
+ }
19803
+ return void 0;
19804
+ }, "extractOpenAIReasoningId");
19805
+ var buildOpenAIReasoningProviderMetadata = /* @__PURE__ */ __name((providerMetadata, reasoningId) => {
19806
+ const openai = providerMetadata && isObject(providerMetadata.openai) ? providerMetadata.openai : void 0;
19807
+ const openaiMeta = isObject(openai) ? openai : void 0;
19808
+ const itemId = typeof openaiMeta?.itemId === "string" ? openaiMeta.itemId.trim() : isOpenAIReasoningId(reasoningId) ? reasoningId : "";
19809
+ const reasoningEncryptedContent = typeof openaiMeta?.reasoningEncryptedContent === "string" ? openaiMeta.reasoningEncryptedContent : void 0;
19810
+ if (!itemId && !reasoningEncryptedContent) {
19811
+ return void 0;
19812
+ }
19813
+ const openaiPayload = {};
19814
+ if (itemId) {
19815
+ openaiPayload.itemId = itemId;
19816
+ }
19817
+ if (reasoningEncryptedContent) {
19818
+ openaiPayload.reasoningEncryptedContent = reasoningEncryptedContent;
19819
+ }
19820
+ return { openai: openaiPayload };
19821
+ }, "buildOpenAIReasoningProviderMetadata");
19746
19822
  var extractReasoningIdFromMetadata = /* @__PURE__ */ __name((metadata) => {
19823
+ const openaiReasoningId = extractOpenAIReasoningId(metadata);
19824
+ if (openaiReasoningId) {
19825
+ return openaiReasoningId;
19826
+ }
19747
19827
  const visit = /* @__PURE__ */ __name((value, hasReasoningContext) => {
19748
19828
  if (Array.isArray(value)) {
19749
19829
  for (const element of value) {
@@ -19789,6 +19869,10 @@ var normalizeReasoning = /* @__PURE__ */ __name((part) => {
19789
19869
  if (reasoningId) {
19790
19870
  normalized.reasoningId = reasoningId;
19791
19871
  }
19872
+ const openaiMetadata = buildOpenAIReasoningProviderMetadata(providerMetadata, reasoningId);
19873
+ if (openaiMetadata) {
19874
+ normalized.providerMetadata = openaiMetadata;
19875
+ }
19792
19876
  if (part.reasoningConfidence !== void 0) {
19793
19877
  normalized.reasoningConfidence = part.reasoningConfidence;
19794
19878
  }
@@ -20036,9 +20120,31 @@ var removeProviderExecutedToolsWithoutReasoning = /* @__PURE__ */ __name((parts)
20036
20120
  (part) => !(typeof part.type === "string" && part.type.startsWith("tool-") && part.providerExecuted === true)
20037
20121
  );
20038
20122
  }, "removeProviderExecutedToolsWithoutReasoning");
20123
+ var hasOpenAIReasoningContext = /* @__PURE__ */ __name((parts) => {
20124
+ for (const part of parts) {
20125
+ if (part.type !== "reasoning") {
20126
+ continue;
20127
+ }
20128
+ const reasoningId = typeof part.reasoningId === "string" ? part.reasoningId.trim() : "";
20129
+ if (reasoningId && isOpenAIReasoningId(reasoningId)) {
20130
+ return true;
20131
+ }
20132
+ const providerMetadata = part.providerMetadata;
20133
+ if (isObject(providerMetadata)) {
20134
+ const openai = providerMetadata.openai;
20135
+ if (isObject(openai)) {
20136
+ const itemId = typeof openai.itemId === "string" ? openai.itemId.trim() : "";
20137
+ if (itemId) {
20138
+ return true;
20139
+ }
20140
+ }
20141
+ }
20142
+ }
20143
+ return false;
20144
+ }, "hasOpenAIReasoningContext");
20039
20145
  var stripReasoningLinkedProviderMetadata = /* @__PURE__ */ __name((parts) => {
20040
- const hasReasoning = parts.some((part) => part.type === "reasoning");
20041
- if (hasReasoning) {
20146
+ const hasOpenAIReasoning = hasOpenAIReasoningContext(parts);
20147
+ if (hasOpenAIReasoning) {
20042
20148
  return parts;
20043
20149
  }
20044
20150
  const stripMetadata = /* @__PURE__ */ __name((metadata) => {