@langchain/core 1.2.8 → 1.2.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @langchain/core
2
2
 
3
+ ## 1.2.9
4
+
5
+ ### Patch Changes
6
+
7
+ - [#11402](https://github.com/langchain-ai/langchainjs/pull/11402) [`43e4396`](https://github.com/langchain-ai/langchainjs/commit/43e439698fa7794c10ab8d7355d4433e058e4d62) Thanks [@thushanth-bengre-langchain](https://github.com/thushanth-bengre-langchain)! - Fix ChatVertexAI/ChatGoogle content blocks: include `tool_call` blocks from `message.tool_calls` and skip spurious empty `text` blocks in `contentBlocks`.
8
+
3
9
  ## 1.2.8
4
10
 
5
11
  ### Patch Changes
@@ -139,7 +139,7 @@ var BaseLangChain = class extends require_base.Runnable {
139
139
  this.callbacks = params.callbacks;
140
140
  this.tags = params.tags ?? [];
141
141
  this.metadata = params.metadata ?? {};
142
- this._addVersion("@langchain/core", "1.2.8");
142
+ this._addVersion("@langchain/core", "1.2.9");
143
143
  }
144
144
  _addVersion(pkg, version) {
145
145
  const existing = this.metadata?.versions;
@@ -138,7 +138,7 @@ var BaseLangChain = class extends Runnable {
138
138
  this.callbacks = params.callbacks;
139
139
  this.tags = params.tags ?? [];
140
140
  this.metadata = params.metadata ?? {};
141
- this._addVersion("@langchain/core", "1.2.8");
141
+ this._addVersion("@langchain/core", "1.2.9");
142
142
  }
143
143
  _addVersion(pkg, version) {
144
144
  const existing = this.metadata?.versions;
@@ -30,6 +30,7 @@ function convertToV1FromChatVertexMessage(message) {
30
30
  };
31
31
  continue;
32
32
  } else if (require_utils._isContentBlock(block, "text") && require_utils._isString(block.text)) {
33
+ if (block.text === "") continue;
33
34
  yield {
34
35
  type: "text",
35
36
  text: block.text
@@ -65,6 +66,12 @@ function convertToV1FromChatVertexMessage(message) {
65
66
  value: block
66
67
  };
67
68
  }
69
+ for (const toolCall of message.tool_calls ?? []) yield {
70
+ type: "tool_call",
71
+ id: toolCall.id,
72
+ name: toolCall.name,
73
+ args: toolCall.args
74
+ };
68
75
  }
69
76
  return Array.from(iterateContent());
70
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"google_vertexai.cjs","names":["_isContentBlock","_isString","iife","_isArray"],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content =\n typeof message.content === \"string\"\n ? [{ type: \"text\", text: message.content }]\n : message.content;\n for (const block of content) {\n if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAIA,cAAAA,gBAAgB,OAAO,WAAW,KAAKC,cAAAA,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAYC,cAAAA,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACEC,cAAAA,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAIF,cAAAA,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,UAAU,KACjCC,cAAAA,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,MAAM,KAAKC,cAAAA,UAAU,MAAM,IAAI,GAAG;IAClE,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAIC,cAAAA,UAAU,MAAM,SAAS,GAC3B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;KAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;KAChD,IAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAG;UAE1D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD,OACE,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAU;IAGhD;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,OAAO,KAC9BC,cAAAA,UAAU,MAAM,QAAQ,KACxBA,cAAAA,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;CACF;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
1
+ {"version":3,"file":"google_vertexai.cjs","names":["_isContentBlock","_isString","iife","_isArray"],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content =\n typeof message.content === \"string\"\n ? [{ type: \"text\", text: message.content }]\n : message.content;\n for (const block of content) {\n if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n if (block.text === \"\") {\n continue;\n }\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n for (const toolCall of message.tool_calls ?? []) {\n yield {\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAIA,cAAAA,gBAAgB,OAAO,WAAW,KAAKC,cAAAA,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAYC,cAAAA,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACEC,cAAAA,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAIF,cAAAA,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,UAAU,KACjCC,cAAAA,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,MAAM,KAAKC,cAAAA,UAAU,MAAM,IAAI,GAAG;IAClE,IAAI,MAAM,SAAS,IACjB;IAEF,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAIC,cAAAA,UAAU,MAAM,SAAS,GAC3B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;KAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;KAChD,IAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAG;UAE1D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD,OACE,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAU;IAGhD;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,OAAO,KAC9BC,cAAAA,UAAU,MAAM,QAAQ,KACxBA,cAAAA,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;EACA,KAAK,MAAM,YAAY,QAAQ,cAAc,CAAC,GAC5C,MAAM;GACJ,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,MAAM,SAAS;EACjB;CAEJ;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
@@ -30,6 +30,7 @@ function convertToV1FromChatVertexMessage(message) {
30
30
  };
31
31
  continue;
32
32
  } else if (_isContentBlock(block, "text") && _isString(block.text)) {
33
+ if (block.text === "") continue;
33
34
  yield {
34
35
  type: "text",
35
36
  text: block.text
@@ -65,6 +66,12 @@ function convertToV1FromChatVertexMessage(message) {
65
66
  value: block
66
67
  };
67
68
  }
69
+ for (const toolCall of message.tool_calls ?? []) yield {
70
+ type: "tool_call",
71
+ id: toolCall.id,
72
+ name: toolCall.name,
73
+ args: toolCall.args
74
+ };
68
75
  }
69
76
  return Array.from(iterateContent());
70
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"google_vertexai.js","names":[],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content =\n typeof message.content === \"string\"\n ? [{ type: \"text\", text: message.content }]\n : message.content;\n for (const block of content) {\n if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,gBAAgB,OAAO,WAAW,KAAK,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAY,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACE,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAI,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACL,gBAAgB,OAAO,UAAU,KACjC,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAI,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,GAAG;IAClE,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAI,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAI,UAAU,MAAM,SAAS,GAC3B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;KAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;KAChD,IAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAG;UAE1D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD,OACE,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAU;IAGhD;GACF,OAAO,IACL,gBAAgB,OAAO,OAAO,KAC9B,UAAU,MAAM,QAAQ,KACxB,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;CACF;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
1
+ {"version":3,"file":"google_vertexai.js","names":[],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content =\n typeof message.content === \"string\"\n ? [{ type: \"text\", text: message.content }]\n : message.content;\n for (const block of content) {\n if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n if (block.text === \"\") {\n continue;\n }\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n for (const toolCall of message.tool_calls ?? []) {\n yield {\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,gBAAgB,OAAO,WAAW,KAAK,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAY,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACE,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAI,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACL,gBAAgB,OAAO,UAAU,KACjC,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAI,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,GAAG;IAClE,IAAI,MAAM,SAAS,IACjB;IAEF,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAI,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAI,UAAU,MAAM,SAAS,GAC3B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;KAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;KAChD,IAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAG;UAE1D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD,OACE,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAU;IAGhD;GACF,OAAO,IACL,gBAAgB,OAAO,OAAO,KAC9B,UAAU,MAAM,QAAQ,KACxB,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;EACA,KAAK,MAAM,YAAY,QAAQ,cAAc,CAAC,GAC5C,MAAM;GACJ,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,MAAM,SAAS;EACjB;CAEJ;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/core",
3
- "version": "1.2.8",
3
+ "version": "1.2.9",
4
4
  "description": "Core LangChain.js abstractions and schemas",
5
5
  "type": "module",
6
6
  "engines": {