@langchain/core 1.0.0-alpha.5 → 1.0.0-alpha.7
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/LICENSE +6 -6
- package/dist/agents.d.ts.map +1 -1
- package/dist/caches/base.d.ts.map +1 -1
- package/dist/callbacks/base.d.ts.map +1 -1
- package/dist/callbacks/manager.cjs +9 -64
- package/dist/callbacks/manager.cjs.map +1 -1
- package/dist/callbacks/manager.d.cts +1 -23
- package/dist/callbacks/manager.d.cts.map +1 -1
- package/dist/callbacks/manager.d.ts +1 -23
- package/dist/callbacks/manager.d.ts.map +1 -1
- package/dist/callbacks/manager.js +10 -63
- package/dist/callbacks/manager.js.map +1 -1
- package/dist/chat_history.cjs +0 -4
- package/dist/chat_history.cjs.map +1 -1
- package/dist/chat_history.d.cts +1 -3
- package/dist/chat_history.d.cts.map +1 -1
- package/dist/chat_history.d.ts +1 -3
- package/dist/chat_history.d.ts.map +1 -1
- package/dist/chat_history.js +0 -4
- package/dist/chat_history.js.map +1 -1
- package/dist/document_loaders/base.cjs +1 -13
- package/dist/document_loaders/base.cjs.map +1 -1
- package/dist/document_loaders/base.d.cts +0 -9
- package/dist/document_loaders/base.d.cts.map +1 -1
- package/dist/document_loaders/base.d.ts +0 -9
- package/dist/document_loaders/base.d.ts.map +1 -1
- package/dist/document_loaders/base.js +1 -13
- package/dist/document_loaders/base.js.map +1 -1
- package/dist/document_loaders/langsmith.d.cts +1 -1
- package/dist/language_models/base.cjs.map +1 -1
- package/dist/language_models/base.d.cts +0 -16
- package/dist/language_models/base.d.cts.map +1 -1
- package/dist/language_models/base.d.ts +0 -16
- package/dist/language_models/base.d.ts.map +1 -1
- package/dist/language_models/base.js.map +1 -1
- package/dist/language_models/chat_models.cjs +1 -80
- package/dist/language_models/chat_models.cjs.map +1 -1
- package/dist/language_models/chat_models.d.cts +1 -53
- package/dist/language_models/chat_models.d.cts.map +1 -1
- package/dist/language_models/chat_models.d.ts +1 -53
- package/dist/language_models/chat_models.d.ts.map +1 -1
- package/dist/language_models/chat_models.js +2 -80
- package/dist/language_models/chat_models.js.map +1 -1
- package/dist/language_models/llms.cjs +0 -56
- package/dist/language_models/llms.cjs.map +1 -1
- package/dist/language_models/llms.d.cts +1 -43
- package/dist/language_models/llms.d.cts.map +1 -1
- package/dist/language_models/llms.d.ts +1 -43
- package/dist/language_models/llms.d.ts.map +1 -1
- package/dist/language_models/llms.js +0 -56
- package/dist/language_models/llms.js.map +1 -1
- package/dist/load/import_map.cjs +1 -7
- package/dist/load/import_map.cjs.map +1 -1
- package/dist/load/import_map.js +1 -7
- package/dist/load/import_map.js.map +1 -1
- package/dist/messages/ai.cjs +8 -4
- package/dist/messages/ai.cjs.map +1 -1
- package/dist/messages/ai.js +8 -4
- package/dist/messages/ai.js.map +1 -1
- package/dist/messages/base.cjs +1 -1
- package/dist/messages/base.cjs.map +1 -1
- package/dist/messages/base.d.cts +2 -2
- package/dist/messages/base.d.cts.map +1 -1
- package/dist/messages/base.d.ts +2 -2
- package/dist/messages/base.d.ts.map +1 -1
- package/dist/messages/base.js +1 -1
- package/dist/messages/base.js.map +1 -1
- package/dist/messages/block_translators/anthropic.cjs +191 -144
- package/dist/messages/block_translators/anthropic.cjs.map +1 -1
- package/dist/messages/block_translators/anthropic.js +191 -144
- package/dist/messages/block_translators/anthropic.js.map +1 -1
- package/dist/messages/block_translators/bedrock_converse.cjs +213 -0
- package/dist/messages/block_translators/bedrock_converse.cjs.map +1 -0
- package/dist/messages/block_translators/bedrock_converse.js +213 -0
- package/dist/messages/block_translators/bedrock_converse.js.map +1 -0
- package/dist/messages/block_translators/google_genai.cjs +73 -0
- package/dist/messages/block_translators/google_genai.cjs.map +1 -0
- package/dist/messages/block_translators/google_genai.js +73 -0
- package/dist/messages/block_translators/google_genai.js.map +1 -0
- package/dist/messages/block_translators/google_vertexai.cjs +74 -0
- package/dist/messages/block_translators/google_vertexai.cjs.map +1 -0
- package/dist/messages/block_translators/google_vertexai.js +74 -0
- package/dist/messages/block_translators/google_vertexai.js.map +1 -0
- package/dist/messages/block_translators/index.cjs +10 -1
- package/dist/messages/block_translators/index.cjs.map +1 -1
- package/dist/messages/block_translators/index.js +12 -3
- package/dist/messages/block_translators/index.js.map +1 -1
- package/dist/messages/block_translators/openai.cjs +78 -22
- package/dist/messages/block_translators/openai.cjs.map +1 -1
- package/dist/messages/block_translators/openai.js +78 -22
- package/dist/messages/block_translators/openai.js.map +1 -1
- package/dist/messages/block_translators/utils.cjs +4 -0
- package/dist/messages/block_translators/utils.cjs.map +1 -1
- package/dist/messages/block_translators/utils.js +4 -1
- package/dist/messages/block_translators/utils.js.map +1 -1
- package/dist/messages/content/index.cjs.map +1 -1
- package/dist/messages/content/index.d.cts +20 -1
- package/dist/messages/content/index.d.cts.map +1 -1
- package/dist/messages/content/index.d.ts +20 -1
- package/dist/messages/content/index.d.ts.map +1 -1
- package/dist/messages/content/index.js.map +1 -1
- package/dist/messages/content/tools.cjs +3 -4
- package/dist/messages/content/tools.cjs.map +1 -1
- package/dist/messages/content/tools.d.cts +22 -45
- package/dist/messages/content/tools.d.cts.map +1 -1
- package/dist/messages/content/tools.d.ts +22 -45
- package/dist/messages/content/tools.d.ts.map +1 -1
- package/dist/messages/content/tools.js +3 -4
- package/dist/messages/content/tools.js.map +1 -1
- package/dist/messages/index.cjs +4 -0
- package/dist/messages/index.cjs.map +1 -1
- package/dist/messages/index.d.cts +2 -2
- package/dist/messages/index.d.ts +2 -2
- package/dist/messages/index.js +4 -2
- package/dist/messages/index.js.map +1 -1
- package/dist/messages/message.cjs.map +1 -1
- package/dist/messages/message.d.cts +6 -6
- package/dist/messages/message.d.cts.map +1 -1
- package/dist/messages/message.d.ts +6 -6
- package/dist/messages/message.d.ts.map +1 -1
- package/dist/messages/message.js.map +1 -1
- package/dist/messages/metadata.cjs.map +1 -1
- package/dist/messages/metadata.d.cts +3 -0
- package/dist/messages/metadata.d.cts.map +1 -1
- package/dist/messages/metadata.d.ts +3 -0
- package/dist/messages/metadata.d.ts.map +1 -1
- package/dist/messages/metadata.js.map +1 -1
- package/dist/messages/tool.cjs +2 -0
- package/dist/messages/tool.cjs.map +1 -1
- package/dist/messages/tool.d.cts +5 -1
- package/dist/messages/tool.d.cts.map +1 -1
- package/dist/messages/tool.d.ts +5 -1
- package/dist/messages/tool.d.ts.map +1 -1
- package/dist/messages/tool.js +2 -0
- package/dist/messages/tool.js.map +1 -1
- package/dist/output_parsers/json.cjs +5 -0
- package/dist/output_parsers/json.cjs.map +1 -1
- package/dist/output_parsers/json.d.cts +2 -0
- package/dist/output_parsers/json.d.cts.map +1 -1
- package/dist/output_parsers/json.d.ts +2 -0
- package/dist/output_parsers/json.d.ts.map +1 -1
- package/dist/output_parsers/json.js +5 -0
- package/dist/output_parsers/json.js.map +1 -1
- package/dist/prompts/base.cjs +0 -36
- package/dist/prompts/base.cjs.map +1 -1
- package/dist/prompts/base.d.cts +0 -16
- package/dist/prompts/base.d.cts.map +1 -1
- package/dist/prompts/base.d.ts +0 -16
- package/dist/prompts/base.d.ts.map +1 -1
- package/dist/prompts/base.js +0 -36
- package/dist/prompts/base.js.map +1 -1
- package/dist/prompts/chat.cjs +1 -5
- package/dist/prompts/chat.cjs.map +1 -1
- package/dist/prompts/chat.d.cts +1 -4
- package/dist/prompts/chat.d.cts.map +1 -1
- package/dist/prompts/chat.d.ts +1 -4
- package/dist/prompts/chat.d.ts.map +1 -1
- package/dist/prompts/chat.js +1 -5
- package/dist/prompts/chat.js.map +1 -1
- package/dist/prompts/dict.d.cts +1 -1
- package/dist/prompts/dict.d.ts +1 -1
- package/dist/prompts/few_shot.d.cts +2 -2
- package/dist/prompts/few_shot.d.ts +2 -2
- package/dist/prompts/image.d.cts +1 -1
- package/dist/prompts/image.d.ts +1 -1
- package/dist/prompts/index.d.cts +2 -2
- package/dist/prompts/index.d.ts +2 -2
- package/dist/prompts/pipeline.d.cts +1 -1
- package/dist/prompts/pipeline.d.ts +1 -1
- package/dist/prompts/prompt.d.cts +2 -2
- package/dist/prompts/prompt.d.ts +2 -2
- package/dist/retrievers/index.cjs +3 -18
- package/dist/retrievers/index.cjs.map +1 -1
- package/dist/retrievers/index.d.cts +2 -27
- package/dist/retrievers/index.d.cts.map +1 -1
- package/dist/retrievers/index.d.ts +2 -27
- package/dist/retrievers/index.d.ts.map +1 -1
- package/dist/retrievers/index.js +3 -18
- package/dist/retrievers/index.js.map +1 -1
- package/dist/runnables/base.cjs +24 -63
- package/dist/runnables/base.cjs.map +1 -1
- package/dist/runnables/base.d.cts +10 -39
- package/dist/runnables/base.d.cts.map +1 -1
- package/dist/runnables/base.d.ts +10 -39
- package/dist/runnables/base.d.ts.map +1 -1
- package/dist/runnables/base.js +24 -63
- package/dist/runnables/base.js.map +1 -1
- package/dist/runnables/graph.cjs +1 -1
- package/dist/runnables/graph.cjs.map +1 -1
- package/dist/runnables/graph.js +2 -2
- package/dist/runnables/graph.js.map +1 -1
- package/dist/runnables/graph_mermaid.cjs +1 -10
- package/dist/runnables/graph_mermaid.cjs.map +1 -1
- package/dist/runnables/graph_mermaid.js +1 -10
- package/dist/runnables/graph_mermaid.js.map +1 -1
- package/dist/runnables/history.cjs +1 -1
- package/dist/runnables/history.cjs.map +1 -1
- package/dist/runnables/history.d.cts +2 -2
- package/dist/runnables/history.d.cts.map +1 -1
- package/dist/runnables/history.d.ts +2 -2
- package/dist/runnables/history.d.ts.map +1 -1
- package/dist/runnables/history.js +1 -1
- package/dist/runnables/history.js.map +1 -1
- package/dist/stores.cjs.map +1 -1
- package/dist/stores.d.cts +3 -29
- package/dist/stores.d.cts.map +1 -1
- package/dist/stores.d.ts +3 -29
- package/dist/stores.d.ts.map +1 -1
- package/dist/stores.js.map +1 -1
- package/dist/tools/index.cjs +12 -4
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +12 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.cjs.map +1 -1
- package/dist/tools/types.d.cts +4 -0
- package/dist/tools/types.d.cts.map +1 -1
- package/dist/tools/types.d.ts +4 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tracers/base.cjs +1 -1
- package/dist/tracers/base.cjs.map +1 -1
- package/dist/tracers/base.d.cts +1 -1
- package/dist/tracers/base.js +2 -2
- package/dist/tracers/base.js.map +1 -1
- package/dist/tracers/log_stream.d.cts +1 -1
- package/dist/tracers/log_stream.d.ts +1 -1
- package/dist/tracers/tracer_langchain.cjs +1 -0
- package/dist/tracers/tracer_langchain.cjs.map +1 -1
- package/dist/tracers/tracer_langchain.d.cts +2 -2
- package/dist/tracers/tracer_langchain.js +1 -0
- package/dist/tracers/tracer_langchain.js.map +1 -1
- package/dist/utils/env.cjs +1 -9
- package/dist/utils/env.cjs.map +1 -1
- package/dist/utils/env.d.cts +2 -6
- package/dist/utils/env.d.cts.map +1 -1
- package/dist/utils/env.d.ts +2 -6
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +2 -9
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/testing/message_history.cjs +1 -1
- package/dist/utils/testing/message_history.cjs.map +1 -1
- package/dist/utils/testing/message_history.d.cts +1 -1
- package/dist/utils/testing/message_history.d.cts.map +1 -1
- package/dist/utils/testing/message_history.d.ts +1 -1
- package/dist/utils/testing/message_history.d.ts.map +1 -1
- package/dist/utils/testing/message_history.js +1 -1
- package/dist/utils/testing/message_history.js.map +1 -1
- package/dist/utils/types/index.cjs +8 -0
- package/dist/utils/types/index.d.cts +2 -2
- package/dist/utils/types/index.d.ts +2 -2
- package/dist/utils/types/index.js +6 -2
- package/dist/utils/types/zod.cjs +62 -3
- package/dist/utils/types/zod.cjs.map +1 -1
- package/dist/utils/types/zod.d.cts +28 -1
- package/dist/utils/types/zod.d.cts.map +1 -1
- package/dist/utils/types/zod.d.ts +28 -1
- package/dist/utils/types/zod.d.ts.map +1 -1
- package/dist/utils/types/zod.js +59 -4
- package/dist/utils/types/zod.js.map +1 -1
- package/package.json +1 -37
- package/dist/runnables/remote.cjs +0 -399
- package/dist/runnables/remote.cjs.map +0 -1
- package/dist/runnables/remote.d.cts +0 -73
- package/dist/runnables/remote.d.cts.map +0 -1
- package/dist/runnables/remote.d.ts +0 -73
- package/dist/runnables/remote.d.ts.map +0 -1
- package/dist/runnables/remote.js +0 -393
- package/dist/runnables/remote.js.map +0 -1
- package/dist/tracers/initialize.cjs +0 -46
- package/dist/tracers/initialize.cjs.map +0 -1
- package/dist/tracers/initialize.d.cts +0 -26
- package/dist/tracers/initialize.d.cts.map +0 -1
- package/dist/tracers/initialize.d.ts +0 -26
- package/dist/tracers/initialize.d.ts.map +0 -1
- package/dist/tracers/initialize.js +0 -39
- package/dist/tracers/initialize.js.map +0 -1
- package/dist/tracers/tracer_langchain_v1.cjs +0 -168
- package/dist/tracers/tracer_langchain_v1.cjs.map +0 -1
- package/dist/tracers/tracer_langchain_v1.d.cts +0 -64
- package/dist/tracers/tracer_langchain_v1.d.cts.map +0 -1
- package/dist/tracers/tracer_langchain_v1.d.ts +0 -64
- package/dist/tracers/tracer_langchain_v1.d.ts.map +0 -1
- package/dist/tracers/tracer_langchain_v1.js +0 -162
- package/dist/tracers/tracer_langchain_v1.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google_genai.js","names":["message: AIMessage","ChatGoogleGenAITranslator: StandardContentBlockTranslator"],"sources":["../../../src/messages/block_translators/google_genai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isContentBlock, _isObject, _isString } from \"./utils.js\";\n\nfunction convertToV1FromChatGoogleMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `libs/providers/langchain-google-genai/src/utils/common.ts:mapGenerateContentResultToChatResult\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, \"text\") && _isString(block.text)) {\n yield { type: \"text\", text: block.text };\n continue;\n } else if (\n _isContentBlock(block, \"inlineData\") &&\n _isObject(block.inlineData) &&\n _isString(block.inlineData.mimeType) &&\n _isString(block.inlineData.data)\n ) {\n yield {\n type: \"file\",\n mimeType: block.inlineData.mimeType,\n data: block.inlineData.data,\n };\n continue;\n } else if (\n _isContentBlock(block, \"functionCall\") &&\n _isObject(block.functionCall) &&\n _isString(block.functionCall.name) &&\n _isObject(block.functionCall.args)\n ) {\n yield {\n type: \"tool_call\",\n id: message.id,\n name: block.functionCall.name,\n args: block.functionCall.args,\n };\n continue;\n } else if (_isContentBlock(block, \"functionResponse\")) {\n yield { type: \"non_standard\", value: block };\n continue;\n } else if (\n _isContentBlock(block, \"fileData\") &&\n _isObject(block.fileData) &&\n _isString(block.fileData.mimeType) &&\n _isString(block.fileData.fileUri)\n ) {\n yield {\n type: \"file\",\n mimeType: block.fileData.mimeType,\n fileId: block.fileData.fileUri,\n };\n continue;\n } else if (_isContentBlock(block, \"executableCode\")) {\n yield { type: \"non_standard\", value: block };\n continue;\n } else if (_isContentBlock(block, \"codeExecutionResult\")) {\n yield { type: \"non_standard\", value: block };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatGoogleGenAITranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatGoogleMessage,\n translateContentChunk: convertToV1FromChatGoogleMessage,\n};\n"],"mappings":";;;AAKA,SAAS,iCACPA,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAS,CAAC,IACzC,QAAQ;AACd,OAAK,MAAM,SAAS,SAAS;AAC3B,OAAI,gBAAgB,OAAO,OAAO,IAAI,UAAU,MAAM,KAAK,EAAE;IAC3D,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAM;AACxC;GACD,WACC,gBAAgB,OAAO,aAAa,IACpC,UAAU,MAAM,WAAW,IAC3B,UAAU,MAAM,WAAW,SAAS,IACpC,UAAU,MAAM,WAAW,KAAK,EAChC;IACA,MAAM;KACJ,MAAM;KACN,UAAU,MAAM,WAAW;KAC3B,MAAM,MAAM,WAAW;IACxB;AACD;GACD,WACC,gBAAgB,OAAO,eAAe,IACtC,UAAU,MAAM,aAAa,IAC7B,UAAU,MAAM,aAAa,KAAK,IAClC,UAAU,MAAM,aAAa,KAAK,EAClC;IACA,MAAM;KACJ,MAAM;KACN,IAAI,QAAQ;KACZ,MAAM,MAAM,aAAa;KACzB,MAAM,MAAM,aAAa;IAC1B;AACD;GACD,WAAU,gBAAgB,OAAO,mBAAmB,EAAE;IACrD,MAAM;KAAE,MAAM;KAAgB,OAAO;IAAO;AAC5C;GACD,WACC,gBAAgB,OAAO,WAAW,IAClC,UAAU,MAAM,SAAS,IACzB,UAAU,MAAM,SAAS,SAAS,IAClC,UAAU,MAAM,SAAS,QAAQ,EACjC;IACA,MAAM;KACJ,MAAM;KACN,UAAU,MAAM,SAAS;KACzB,QAAQ,MAAM,SAAS;IACxB;AACD;GACD,WAAU,gBAAgB,OAAO,iBAAiB,EAAE;IACnD,MAAM;KAAE,MAAM;KAAgB,OAAO;IAAO;AAC5C;GACD,WAAU,gBAAgB,OAAO,sBAAsB,EAAE;IACxD,MAAM;KAAE,MAAM;KAAgB,OAAO;IAAO;AAC5C;GACD;GACD,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAO;EAC7C;CACF;AACD,QAAO,MAAM,KAAK,gBAAgB,CAAC;AACpC;AAED,MAAaC,4BAA4D;CACvE,kBAAkB;CAClB,uBAAuB;AACxB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const require_utils = require('./utils.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/messages/block_translators/google_vertexai.ts
|
|
4
|
+
function convertToV1FromChatVertexMessage(message) {
|
|
5
|
+
function* iterateContent() {
|
|
6
|
+
const content = typeof message.content === "string" ? [{
|
|
7
|
+
type: "text",
|
|
8
|
+
text: message.content
|
|
9
|
+
}] : message.content;
|
|
10
|
+
for (const block of content) {
|
|
11
|
+
if (require_utils._isContentBlock(block, "reasoning") && require_utils._isString(block.reasoning)) {
|
|
12
|
+
const signature = require_utils.iife(() => {
|
|
13
|
+
const reasoningIndex = content.indexOf(block);
|
|
14
|
+
if (require_utils._isArray(message.additional_kwargs?.signatures) && reasoningIndex >= 0) return message.additional_kwargs.signatures.at(reasoningIndex);
|
|
15
|
+
return void 0;
|
|
16
|
+
});
|
|
17
|
+
if (require_utils._isString(signature)) yield {
|
|
18
|
+
type: "reasoning",
|
|
19
|
+
reasoning: block.reasoning,
|
|
20
|
+
signature
|
|
21
|
+
};
|
|
22
|
+
else yield {
|
|
23
|
+
type: "reasoning",
|
|
24
|
+
reasoning: block.reasoning
|
|
25
|
+
};
|
|
26
|
+
continue;
|
|
27
|
+
} else if (require_utils._isContentBlock(block, "text") && require_utils._isString(block.text)) {
|
|
28
|
+
yield {
|
|
29
|
+
type: "text",
|
|
30
|
+
text: block.text
|
|
31
|
+
};
|
|
32
|
+
continue;
|
|
33
|
+
} else if (require_utils._isContentBlock(block, "image_url")) {
|
|
34
|
+
if (require_utils._isString(block.image_url)) if (block.image_url.startsWith("data:")) {
|
|
35
|
+
const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;
|
|
36
|
+
const match = block.image_url.match(dataUrlRegex);
|
|
37
|
+
if (match) yield {
|
|
38
|
+
type: "image",
|
|
39
|
+
data: match[2],
|
|
40
|
+
mimeType: match[1]
|
|
41
|
+
};
|
|
42
|
+
else yield {
|
|
43
|
+
type: "image",
|
|
44
|
+
url: block.image_url
|
|
45
|
+
};
|
|
46
|
+
} else yield {
|
|
47
|
+
type: "image",
|
|
48
|
+
url: block.image_url
|
|
49
|
+
};
|
|
50
|
+
continue;
|
|
51
|
+
} else if (require_utils._isContentBlock(block, "media") && require_utils._isString(block.mimeType) && require_utils._isString(block.data)) {
|
|
52
|
+
yield {
|
|
53
|
+
type: "file",
|
|
54
|
+
mimeType: block.mimeType,
|
|
55
|
+
data: block.data
|
|
56
|
+
};
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
yield {
|
|
60
|
+
type: "non_standard",
|
|
61
|
+
value: block
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return Array.from(iterateContent());
|
|
66
|
+
}
|
|
67
|
+
const ChatVertexTranslator = {
|
|
68
|
+
translateContent: convertToV1FromChatVertexMessage,
|
|
69
|
+
translateContentChunk: convertToV1FromChatVertexMessage
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
exports.ChatVertexTranslator = ChatVertexTranslator;
|
|
74
|
+
//# sourceMappingURL=google_vertexai.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google_vertexai.cjs","names":["message: AIMessage","_isContentBlock","_isString","iife","_isArray","ChatVertexTranslator: StandardContentBlockTranslator"],"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 (_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,iCACPA,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAS,CAAC,IACzC,QAAQ;AACd,OAAK,MAAM,SAAS,SAAS;AAC3B,OAAIC,8BAAgB,OAAO,YAAY,IAAIC,wBAAU,MAAM,UAAU,EAAE;IACrE,MAAM,YAAYC,mBAAK,MAAM;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,MAAM;AAC7C,SACEC,uBAAS,QAAQ,mBAAmB,WAAW,IAC/C,kBAAkB,EAElB,QAAO,QAAQ,kBAAkB,WAAW,GAAG,eAAe;AAEhE,YAAO;IACR,EAAC;AACF,QAAIF,wBAAU,UAAU,EACtB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACD;SAED,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IAClB;AAEH;GACD,WAAUD,8BAAgB,OAAO,OAAO,IAAIC,wBAAU,MAAM,KAAK,EAAE;IAClE,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAM;AACxC;GACD,WAAUD,8BAAgB,OAAO,YAAY,EAAE;AAC9C,QAAIC,wBAAU,MAAM,UAAU,CAC5B,KAAI,MAAM,UAAU,WAAW,QAAQ,EAAE;KACvC,MAAM,eAAe;KACrB,MAAM,QAAQ,MAAM,UAAU,MAAM,aAAa;AACjD,SAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAI;UAE3D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAW;IAEhD,OACC,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAW;AAGjD;GACD,WACCD,8BAAgB,OAAO,QAAQ,IAC/BC,wBAAU,MAAM,SAAS,IACzBA,wBAAU,MAAM,KAAK,EACrB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAM;AAClE;GACD;GACD,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAO;EAC7C;CACF;AACD,QAAO,MAAM,KAAK,gBAAgB,CAAC;AACpC;AAED,MAAaG,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACxB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { _isArray, _isContentBlock, _isString, iife } from "./utils.js";
|
|
2
|
+
|
|
3
|
+
//#region src/messages/block_translators/google_vertexai.ts
|
|
4
|
+
function convertToV1FromChatVertexMessage(message) {
|
|
5
|
+
function* iterateContent() {
|
|
6
|
+
const content = typeof message.content === "string" ? [{
|
|
7
|
+
type: "text",
|
|
8
|
+
text: message.content
|
|
9
|
+
}] : message.content;
|
|
10
|
+
for (const block of content) {
|
|
11
|
+
if (_isContentBlock(block, "reasoning") && _isString(block.reasoning)) {
|
|
12
|
+
const signature = iife(() => {
|
|
13
|
+
const reasoningIndex = content.indexOf(block);
|
|
14
|
+
if (_isArray(message.additional_kwargs?.signatures) && reasoningIndex >= 0) return message.additional_kwargs.signatures.at(reasoningIndex);
|
|
15
|
+
return void 0;
|
|
16
|
+
});
|
|
17
|
+
if (_isString(signature)) yield {
|
|
18
|
+
type: "reasoning",
|
|
19
|
+
reasoning: block.reasoning,
|
|
20
|
+
signature
|
|
21
|
+
};
|
|
22
|
+
else yield {
|
|
23
|
+
type: "reasoning",
|
|
24
|
+
reasoning: block.reasoning
|
|
25
|
+
};
|
|
26
|
+
continue;
|
|
27
|
+
} else if (_isContentBlock(block, "text") && _isString(block.text)) {
|
|
28
|
+
yield {
|
|
29
|
+
type: "text",
|
|
30
|
+
text: block.text
|
|
31
|
+
};
|
|
32
|
+
continue;
|
|
33
|
+
} else if (_isContentBlock(block, "image_url")) {
|
|
34
|
+
if (_isString(block.image_url)) if (block.image_url.startsWith("data:")) {
|
|
35
|
+
const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;
|
|
36
|
+
const match = block.image_url.match(dataUrlRegex);
|
|
37
|
+
if (match) yield {
|
|
38
|
+
type: "image",
|
|
39
|
+
data: match[2],
|
|
40
|
+
mimeType: match[1]
|
|
41
|
+
};
|
|
42
|
+
else yield {
|
|
43
|
+
type: "image",
|
|
44
|
+
url: block.image_url
|
|
45
|
+
};
|
|
46
|
+
} else yield {
|
|
47
|
+
type: "image",
|
|
48
|
+
url: block.image_url
|
|
49
|
+
};
|
|
50
|
+
continue;
|
|
51
|
+
} else if (_isContentBlock(block, "media") && _isString(block.mimeType) && _isString(block.data)) {
|
|
52
|
+
yield {
|
|
53
|
+
type: "file",
|
|
54
|
+
mimeType: block.mimeType,
|
|
55
|
+
data: block.data
|
|
56
|
+
};
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
yield {
|
|
60
|
+
type: "non_standard",
|
|
61
|
+
value: block
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return Array.from(iterateContent());
|
|
66
|
+
}
|
|
67
|
+
const ChatVertexTranslator = {
|
|
68
|
+
translateContent: convertToV1FromChatVertexMessage,
|
|
69
|
+
translateContentChunk: convertToV1FromChatVertexMessage
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { ChatVertexTranslator };
|
|
74
|
+
//# sourceMappingURL=google_vertexai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google_vertexai.js","names":["message: AIMessage","ChatVertexTranslator: StandardContentBlockTranslator"],"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 (_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,iCACPA,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAS,CAAC,IACzC,QAAQ;AACd,OAAK,MAAM,SAAS,SAAS;AAC3B,OAAI,gBAAgB,OAAO,YAAY,IAAI,UAAU,MAAM,UAAU,EAAE;IACrE,MAAM,YAAY,KAAK,MAAM;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,MAAM;AAC7C,SACE,SAAS,QAAQ,mBAAmB,WAAW,IAC/C,kBAAkB,EAElB,QAAO,QAAQ,kBAAkB,WAAW,GAAG,eAAe;AAEhE,YAAO;IACR,EAAC;AACF,QAAI,UAAU,UAAU,EACtB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACD;SAED,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IAClB;AAEH;GACD,WAAU,gBAAgB,OAAO,OAAO,IAAI,UAAU,MAAM,KAAK,EAAE;IAClE,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAM;AACxC;GACD,WAAU,gBAAgB,OAAO,YAAY,EAAE;AAC9C,QAAI,UAAU,MAAM,UAAU,CAC5B,KAAI,MAAM,UAAU,WAAW,QAAQ,EAAE;KACvC,MAAM,eAAe;KACrB,MAAM,QAAQ,MAAM,UAAU,MAAM,aAAa;AACjD,SAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAI;UAE3D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAW;IAEhD,OACC,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAW;AAGjD;GACD,WACC,gBAAgB,OAAO,QAAQ,IAC/B,UAAU,MAAM,SAAS,IACzB,UAAU,MAAM,KAAK,EACrB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAM;AAClE;GACD;GACD,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAO;EAC7C;CACF;AACD,QAAO,MAAM,KAAK,gBAAgB,CAAC;AACpC;AAED,MAAaC,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACxB"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
const require_anthropic = require('./anthropic.cjs');
|
|
2
2
|
const require_openai = require('./openai.cjs');
|
|
3
|
+
const require_bedrock_converse = require('./bedrock_converse.cjs');
|
|
4
|
+
const require_google_genai = require('./google_genai.cjs');
|
|
5
|
+
const require_google_vertexai = require('./google_vertexai.cjs');
|
|
3
6
|
|
|
4
7
|
//#region src/messages/block_translators/index.ts
|
|
5
|
-
globalThis.lc_block_translators_registry ??= new Map([
|
|
8
|
+
globalThis.lc_block_translators_registry ??= new Map([
|
|
9
|
+
["anthropic", require_anthropic.ChatAnthropicTranslator],
|
|
10
|
+
["bedrock-converse", require_bedrock_converse.ChatBedrockConverseTranslator],
|
|
11
|
+
["google-genai", require_google_genai.ChatGoogleGenAITranslator],
|
|
12
|
+
["google-vertexai", require_google_vertexai.ChatVertexTranslator],
|
|
13
|
+
["openai", require_openai.ChatOpenAITranslator]
|
|
14
|
+
]);
|
|
6
15
|
function getTranslator(modelProvider) {
|
|
7
16
|
return globalThis.lc_block_translators_registry.get(modelProvider);
|
|
8
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["ChatAnthropicTranslator","ChatBedrockConverseTranslator","ChatGoogleGenAITranslator","ChatVertexTranslator","ChatOpenAITranslator","modelProvider: string"],"sources":["../../../src/messages/block_translators/index.ts"],"sourcesContent":["import type { AIMessage, AIMessageChunk } from \"../ai.js\";\nimport type { ContentBlock } from \"../content/index.js\";\n\nimport { ChatAnthropicTranslator } from \"./anthropic.js\";\nimport { ChatBedrockConverseTranslator } from \"./bedrock_converse.js\";\nimport { ChatGoogleGenAITranslator } from \"./google_genai.js\";\nimport { ChatVertexTranslator } from \"./google_vertexai.js\";\nimport { ChatOpenAITranslator } from \"./openai.js\";\n\nexport interface StandardContentBlockTranslator {\n translateContent(message: AIMessage): Array<ContentBlock.Standard>;\n translateContentChunk(chunk: AIMessageChunk): Array<ContentBlock.Standard>;\n}\n\ntype TranslatorRegistry = Map<string, StandardContentBlockTranslator>;\n\ndeclare global {\n var lc_block_translators_registry: TranslatorRegistry;\n}\n\nglobalThis.lc_block_translators_registry ??= new Map([\n [\"anthropic\", ChatAnthropicTranslator],\n [\"bedrock-converse\", ChatBedrockConverseTranslator],\n [\"google-genai\", ChatGoogleGenAITranslator],\n [\"google-vertexai\", ChatVertexTranslator],\n [\"openai\", ChatOpenAITranslator],\n]);\n\nexport function registerTranslator(\n modelProvider: string,\n translator: StandardContentBlockTranslator\n) {\n globalThis.lc_block_translators_registry.set(modelProvider, translator);\n}\n\nexport function getTranslator(\n modelProvider: string\n): StandardContentBlockTranslator | undefined {\n return globalThis.lc_block_translators_registry.get(modelProvider);\n}\n"],"mappings":";;;;;;;AAoBA,WAAW,kCAAkC,IAAI,IAAI;CACnD,CAAC,aAAaA,yCAAwB;CACtC,CAAC,oBAAoBC,sDAA8B;CACnD,CAAC,gBAAgBC,8CAA0B;CAC3C,CAAC,mBAAmBC,4CAAqB;CACzC,CAAC,UAAUC,mCAAqB;AACjC;AASD,SAAgB,cACdC,eAC4C;AAC5C,QAAO,WAAW,8BAA8B,IAAI,cAAc;AACnE"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ChatAnthropicTranslator } from "./anthropic.js";
|
|
2
|
+
import { ChatOpenAITranslator } from "./openai.js";
|
|
3
|
+
import { ChatBedrockConverseTranslator } from "./bedrock_converse.js";
|
|
4
|
+
import { ChatGoogleGenAITranslator } from "./google_genai.js";
|
|
5
|
+
import { ChatVertexTranslator } from "./google_vertexai.js";
|
|
3
6
|
|
|
4
7
|
//#region src/messages/block_translators/index.ts
|
|
5
|
-
globalThis.lc_block_translators_registry ??= new Map([
|
|
8
|
+
globalThis.lc_block_translators_registry ??= new Map([
|
|
9
|
+
["anthropic", ChatAnthropicTranslator],
|
|
10
|
+
["bedrock-converse", ChatBedrockConverseTranslator],
|
|
11
|
+
["google-genai", ChatGoogleGenAITranslator],
|
|
12
|
+
["google-vertexai", ChatVertexTranslator],
|
|
13
|
+
["openai", ChatOpenAITranslator]
|
|
14
|
+
]);
|
|
6
15
|
function getTranslator(modelProvider) {
|
|
7
16
|
return globalThis.lc_block_translators_registry.get(modelProvider);
|
|
8
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["modelProvider: string"],"sources":["../../../src/messages/block_translators/index.ts"],"sourcesContent":["import type { AIMessage, AIMessageChunk } from \"../ai.js\";\nimport type { ContentBlock } from \"../content/index.js\";\n\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","names":["modelProvider: string"],"sources":["../../../src/messages/block_translators/index.ts"],"sourcesContent":["import type { AIMessage, AIMessageChunk } from \"../ai.js\";\nimport type { ContentBlock } from \"../content/index.js\";\n\nimport { ChatAnthropicTranslator } from \"./anthropic.js\";\nimport { ChatBedrockConverseTranslator } from \"./bedrock_converse.js\";\nimport { ChatGoogleGenAITranslator } from \"./google_genai.js\";\nimport { ChatVertexTranslator } from \"./google_vertexai.js\";\nimport { ChatOpenAITranslator } from \"./openai.js\";\n\nexport interface StandardContentBlockTranslator {\n translateContent(message: AIMessage): Array<ContentBlock.Standard>;\n translateContentChunk(chunk: AIMessageChunk): Array<ContentBlock.Standard>;\n}\n\ntype TranslatorRegistry = Map<string, StandardContentBlockTranslator>;\n\ndeclare global {\n var lc_block_translators_registry: TranslatorRegistry;\n}\n\nglobalThis.lc_block_translators_registry ??= new Map([\n [\"anthropic\", ChatAnthropicTranslator],\n [\"bedrock-converse\", ChatBedrockConverseTranslator],\n [\"google-genai\", ChatGoogleGenAITranslator],\n [\"google-vertexai\", ChatVertexTranslator],\n [\"openai\", ChatOpenAITranslator],\n]);\n\nexport function registerTranslator(\n modelProvider: string,\n translator: StandardContentBlockTranslator\n) {\n globalThis.lc_block_translators_registry.set(modelProvider, translator);\n}\n\nexport function getTranslator(\n modelProvider: string\n): StandardContentBlockTranslator | undefined {\n return globalThis.lc_block_translators_registry.get(modelProvider);\n}\n"],"mappings":";;;;;;;AAoBA,WAAW,kCAAkC,IAAI,IAAI;CACnD,CAAC,aAAa,uBAAwB;CACtC,CAAC,oBAAoB,6BAA8B;CACnD,CAAC,gBAAgB,yBAA0B;CAC3C,CAAC,mBAAmB,oBAAqB;CACzC,CAAC,UAAU,oBAAqB;AACjC;AASD,SAAgB,cACdA,eAC4C;AAC5C,QAAO,WAAW,8BAA8B,IAAI,cAAc;AACnE"}
|
|
@@ -232,14 +232,35 @@ function convertToV1FromResponses(message) {
|
|
|
232
232
|
name: toolCall.name,
|
|
233
233
|
args: toolCall.args
|
|
234
234
|
};
|
|
235
|
-
if (require_utils._isObject(message.additional_kwargs) && require_utils._isArray(message.additional_kwargs.tool_outputs)) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
235
|
+
if (require_utils._isObject(message.additional_kwargs) && require_utils._isArray(message.additional_kwargs.tool_outputs)) for (const toolOutput of message.additional_kwargs.tool_outputs) {
|
|
236
|
+
if (require_utils._isContentBlock(toolOutput, "web_search_call")) {
|
|
237
|
+
yield {
|
|
238
|
+
id: toolOutput.id,
|
|
239
|
+
type: "server_tool_call",
|
|
240
|
+
name: "web_search",
|
|
241
|
+
args: { query: toolOutput.query }
|
|
242
|
+
};
|
|
243
|
+
continue;
|
|
244
|
+
} else if (require_utils._isContentBlock(toolOutput, "file_search_call")) {
|
|
245
|
+
yield {
|
|
246
|
+
id: toolOutput.id,
|
|
247
|
+
type: "server_tool_call",
|
|
248
|
+
name: "file_search",
|
|
249
|
+
args: { query: toolOutput.query }
|
|
250
|
+
};
|
|
251
|
+
continue;
|
|
252
|
+
} else if (require_utils._isContentBlock(toolOutput, "computer_call")) {
|
|
253
|
+
yield {
|
|
254
|
+
type: "non_standard",
|
|
255
|
+
value: toolOutput
|
|
256
|
+
};
|
|
257
|
+
continue;
|
|
258
|
+
} else if (require_utils._isContentBlock(toolOutput, "code_interpreter_call")) {
|
|
240
259
|
if (require_utils._isString(toolOutput.code)) yield {
|
|
241
|
-
|
|
242
|
-
|
|
260
|
+
id: toolOutput.id,
|
|
261
|
+
type: "server_tool_call",
|
|
262
|
+
name: "code_interpreter",
|
|
263
|
+
args: { code: toolOutput.code }
|
|
243
264
|
};
|
|
244
265
|
if (require_utils._isArray(toolOutput.outputs)) {
|
|
245
266
|
const returnCode = require_utils.iife(() => {
|
|
@@ -250,20 +271,55 @@ function convertToV1FromResponses(message) {
|
|
|
250
271
|
if (toolOutput.status === "failed") return 1;
|
|
251
272
|
return void 0;
|
|
252
273
|
});
|
|
253
|
-
for (const output of toolOutput.outputs) if (require_utils._isContentBlock(output, "logs"))
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
274
|
+
for (const output of toolOutput.outputs) if (require_utils._isContentBlock(output, "logs")) {
|
|
275
|
+
yield {
|
|
276
|
+
type: "server_tool_call_result",
|
|
277
|
+
toolCallId: toolOutput.id ?? "",
|
|
278
|
+
status: "success",
|
|
279
|
+
output: {
|
|
280
|
+
type: "code_interpreter_output",
|
|
281
|
+
returnCode: returnCode ?? 0,
|
|
282
|
+
stderr: [0, void 0].includes(returnCode) ? void 0 : String(output.logs),
|
|
283
|
+
stdout: [0, void 0].includes(returnCode) ? String(output.logs) : void 0
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
262
288
|
}
|
|
263
|
-
|
|
264
|
-
else if (require_utils._isContentBlock(toolOutput, "
|
|
265
|
-
|
|
266
|
-
|
|
289
|
+
continue;
|
|
290
|
+
} else if (require_utils._isContentBlock(toolOutput, "mcp_call")) {
|
|
291
|
+
yield {
|
|
292
|
+
id: toolOutput.id,
|
|
293
|
+
type: "server_tool_call",
|
|
294
|
+
name: "mcp_call",
|
|
295
|
+
args: toolOutput.input
|
|
296
|
+
};
|
|
297
|
+
continue;
|
|
298
|
+
} else if (require_utils._isContentBlock(toolOutput, "mcp_list_tools")) {
|
|
299
|
+
yield {
|
|
300
|
+
id: toolOutput.id,
|
|
301
|
+
type: "server_tool_call",
|
|
302
|
+
name: "mcp_list_tools",
|
|
303
|
+
args: toolOutput.input
|
|
304
|
+
};
|
|
305
|
+
continue;
|
|
306
|
+
} else if (require_utils._isContentBlock(toolOutput, "mcp_approval_request")) {
|
|
307
|
+
yield {
|
|
308
|
+
type: "non_standard",
|
|
309
|
+
value: toolOutput
|
|
310
|
+
};
|
|
311
|
+
continue;
|
|
312
|
+
} else if (require_utils._isContentBlock(toolOutput, "image_generation_call")) {
|
|
313
|
+
yield {
|
|
314
|
+
type: "non_standard",
|
|
315
|
+
value: toolOutput
|
|
316
|
+
};
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
if (require_utils._isObject(toolOutput)) yield {
|
|
320
|
+
type: "non_standard",
|
|
321
|
+
value: toolOutput
|
|
322
|
+
};
|
|
267
323
|
}
|
|
268
324
|
}
|
|
269
325
|
return Array.from(iterateContent());
|
|
@@ -307,7 +363,7 @@ function convertToV1FromResponsesChunk(message) {
|
|
|
307
363
|
}
|
|
308
364
|
return Array.from(iterateContent());
|
|
309
365
|
}
|
|
310
|
-
const
|
|
366
|
+
const ChatOpenAITranslator = {
|
|
311
367
|
translateContent: (message) => {
|
|
312
368
|
if (typeof message.content === "string") return convertToV1FromChatCompletions(message);
|
|
313
369
|
return convertToV1FromResponses(message);
|
|
@@ -319,6 +375,6 @@ const openaiTranslator = {
|
|
|
319
375
|
};
|
|
320
376
|
|
|
321
377
|
//#endregion
|
|
378
|
+
exports.ChatOpenAITranslator = ChatOpenAITranslator;
|
|
322
379
|
exports.convertToV1FromChatCompletionsInput = convertToV1FromChatCompletionsInput;
|
|
323
|
-
exports.openaiTranslator = openaiTranslator;
|
|
324
380
|
//# sourceMappingURL=openai.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.cjs","names":["message: AIMessage","blocks: Array<ContentBlock.Standard>","blocks: Array<ContentBlock>","convertedBlocks: Array<ContentBlock.Standard>","isOpenAIDataBlock","convertToV1FromOpenAIDataBlock","annotation: ContentBlock","_isObject","_isArray","_isString","_isContentBlock","iife","message: AIMessageChunk","openaiTranslator: StandardContentBlockTranslator"],"sources":["../../../src/messages/block_translators/openai.ts"],"sourcesContent":["import type { ContentBlock } from \"../content/index.js\";\nimport type { AIMessageChunk, AIMessage } from \"../ai.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { convertToV1FromOpenAIDataBlock, isOpenAIDataBlock } from \"./data.js\";\nimport {\n _isArray,\n _isContentBlock,\n _isObject,\n _isString,\n iife,\n} from \"./utils.js\";\n\n/**\n * Converts a ChatOpenAICompletions message to an array of v1 standard content blocks.\n *\n * This function processes an AI message from ChatOpenAICompletions API format\n * and converts it to the standardized v1 content block format. It handles both\n * string content and structured content blocks, as well as tool calls.\n *\n * @param message - The AI message containing ChatOpenAICompletions formatted content\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const message = new AIMessage(\"Hello world\");\n * const standardBlocks = convertToV1FromChatCompletions(message);\n * // Returns: [{ type: \"text\", text: \"Hello world\" }]\n * ```\n *\n * @example\n * ```typescript\n * const message = new AIMessage([\n * { type: \"text\", text: \"Hello\" },\n * { type: \"image_url\", image_url: { url: \"https://example.com/image.png\" } }\n * ]);\n * message.tool_calls = [\n * { id: \"call_123\", name: \"calculator\", args: { a: 1, b: 2 } }\n * ];\n *\n * const standardBlocks = convertToV1FromChatCompletions(message);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello\" },\n * // { type: \"image\", url: \"https://example.com/image.png\" },\n * // { type: \"tool_call\", id: \"call_123\", name: \"calculator\", args: { a: 1, b: 2 } }\n * // ]\n * ```\n */\nexport function convertToV1FromChatCompletions(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n const blocks: Array<ContentBlock.Standard> = [];\n if (typeof message.content === \"string\") {\n blocks.push({\n type: \"text\",\n text: message.content,\n });\n } else {\n blocks.push(...convertToV1FromChatCompletionsInput(message.content));\n }\n for (const toolCall of message.tool_calls ?? []) {\n blocks.push({\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n return blocks;\n}\n\n/**\n * Converts a ChatOpenAICompletions message chunk to an array of v1 standard content blocks.\n *\n * This function processes an AI message chunk from OpenAI's chat completions API and converts\n * it to the standardized v1 content block format. It handles both string and array content,\n * as well as tool calls that may be present in the chunk.\n *\n * @param message - The AI message chunk containing OpenAI-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const chunk = new AIMessage(\"Hello\");\n * const standardBlocks = convertToV1FromChatCompletionsChunk(chunk);\n * // Returns: [{ type: \"text\", text: \"Hello\" }]\n * ```\n *\n * @example\n * ```typescript\n * const chunk = new AIMessage([\n * { type: \"text\", text: \"Processing...\" }\n * ]);\n * chunk.tool_calls = [\n * { id: \"call_456\", name: \"search\", args: { query: \"test\" } }\n * ];\n *\n * const standardBlocks = convertToV1FromChatCompletionsChunk(chunk);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Processing...\" },\n * // { type: \"tool_call\", id: \"call_456\", name: \"search\", args: { query: \"test\" } }\n * // ]\n * ```\n */\nexport function convertToV1FromChatCompletionsChunk(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n const blocks: Array<ContentBlock.Standard> = [];\n if (typeof message.content === \"string\") {\n blocks.push({\n type: \"text\",\n text: message.content,\n });\n } else {\n blocks.push(...convertToV1FromChatCompletionsInput(message.content));\n }\n\n // TODO: parse chunk position information\n for (const toolCall of message.tool_calls ?? []) {\n blocks.push({\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n return blocks;\n}\n\n/**\n * Converts an array of ChatOpenAICompletions content blocks to v1 standard content blocks.\n *\n * This function processes content blocks from OpenAI's Chat Completions API format\n * and converts them to the standardized v1 content block format. It handles both\n * OpenAI-specific data blocks (which require conversion) and standard blocks\n * (which are passed through with type assertion).\n *\n * @param blocks - Array of content blocks in ChatOpenAICompletions format\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const openaiBlocks = [\n * { type: \"text\", text: \"Hello world\" },\n * { type: \"image_url\", image_url: { url: \"https://example.com/image.png\" } }\n * ];\n *\n * const standardBlocks = convertToV1FromChatCompletionsInput(openaiBlocks);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello world\" },\n * // { type: \"image\", url: \"https://example.com/image.png\" }\n * // ]\n * ```\n */\nexport function convertToV1FromChatCompletionsInput(\n blocks: Array<ContentBlock>\n): Array<ContentBlock.Standard> {\n const convertedBlocks: Array<ContentBlock.Standard> = [];\n for (const block of blocks) {\n if (isOpenAIDataBlock(block)) {\n convertedBlocks.push(convertToV1FromOpenAIDataBlock(block));\n } else {\n convertedBlocks.push(block as ContentBlock.Standard);\n }\n }\n return convertedBlocks;\n}\n\nfunction convertResponsesAnnotation(\n annotation: ContentBlock\n): ContentBlock | ContentBlock.Citation {\n if (annotation.type === \"url_citation\") {\n const { url, title, start_index, end_index } = annotation;\n return {\n type: \"citation\",\n url,\n title,\n startIndex: start_index,\n endIndex: end_index,\n };\n }\n if (annotation.type === \"file_citation\") {\n const { file_id, filename, index } = annotation;\n return {\n type: \"citation\",\n title: filename,\n startIndex: index,\n endIndex: index,\n fileId: file_id,\n };\n }\n return annotation;\n}\n\n/**\n * Converts a ChatOpenAIResponses message to an array of v1 standard content blocks.\n *\n * This function processes an AI message containing OpenAI Responses-specific content blocks\n * and converts them to the standardized v1 content block format. It handles reasoning summaries,\n * text content with annotations, tool calls, and various tool outputs including code interpreter,\n * web search, file search, computer calls, and MCP-related blocks.\n *\n * @param message - The AI message containing OpenAI Responses-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const message = new AIMessage({\n * content: [{ type: \"text\", text: \"Hello world\", annotations: [] }],\n * tool_calls: [{ id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } }],\n * additional_kwargs: {\n * reasoning: { summary: [{ text: \"Let me calculate this...\" }] },\n * tool_outputs: [\n * {\n * type: \"code_interpreter_call\",\n * code: \"print('hello')\",\n * outputs: [{ type: \"logs\", logs: \"hello\" }]\n * }\n * ]\n * }\n * });\n *\n * const standardBlocks = convertToV1FromResponses(message);\n * // Returns:\n * // [\n * // { type: \"reasoning\", reasoning: \"Let me calculate this...\" },\n * // { type: \"text\", text: \"Hello world\", annotations: [] },\n * // { type: \"tool_call\", id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } },\n * // { type: \"code_interpreter_call\", code: \"print('hello')\" },\n * // { type: \"code_interpreter_result\", output: [{ type: \"code_interpreter_output\", returnCode: 0, stdout: \"hello\" }] }\n * // ]\n * ```\n */\nexport function convertToV1FromResponses(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n if (\n _isObject(message.additional_kwargs?.reasoning) &&\n _isArray(message.additional_kwargs.reasoning.summary)\n ) {\n const summary =\n message.additional_kwargs.reasoning.summary.reduce<string>(\n (acc, item) => {\n if (_isObject(item) && _isString(item.text)) {\n return `${acc}${item.text}`;\n }\n return acc;\n },\n \"\"\n );\n yield {\n type: \"reasoning\",\n reasoning: summary,\n };\n }\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, \"text\")) {\n const { text, annotations, ...rest } = block;\n if (Array.isArray(annotations)) {\n yield {\n ...rest,\n type: \"text\",\n text: String(text),\n annotations: annotations.map(convertResponsesAnnotation),\n };\n } else {\n yield {\n ...rest,\n type: \"text\",\n text: String(text),\n };\n }\n }\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 if (\n _isObject(message.additional_kwargs) &&\n _isArray(message.additional_kwargs.tool_outputs)\n ) {\n for (const toolOutput of message.additional_kwargs.tool_outputs) {\n if (_isContentBlock(toolOutput, \"web_search_call\")) {\n continue;\n } else if (_isContentBlock(toolOutput, \"file_search_call\")) {\n continue;\n } else if (_isContentBlock(toolOutput, \"computer_call\")) {\n continue;\n } else if (_isContentBlock(toolOutput, \"code_interpreter_call\")) {\n if (_isString(toolOutput.code)) {\n yield {\n type: \"code_interpreter_call\",\n code: toolOutput.code,\n };\n }\n if (_isArray(toolOutput.outputs)) {\n const returnCode = iife(() => {\n if (toolOutput.status === \"in_progress\") return undefined;\n if (toolOutput.status === \"completed\") return 0;\n if (toolOutput.status === \"incomplete\") return 127;\n if (toolOutput.status === \"interpreting\") return undefined;\n if (toolOutput.status === \"failed\") return 1;\n return undefined;\n });\n for (const output of toolOutput.outputs) {\n if (_isContentBlock(output, \"logs\")) {\n yield {\n type: \"code_interpreter_result\",\n output: [\n {\n type: \"code_interpreter_output\",\n returnCode,\n stderr: [0, undefined].includes(returnCode)\n ? undefined\n : String(output.logs),\n stdout: [0, undefined].includes(returnCode)\n ? String(output.logs)\n : undefined,\n },\n ],\n };\n }\n }\n }\n } else if (_isContentBlock(toolOutput, \"mcp_call\")) {\n continue;\n } else if (_isContentBlock(toolOutput, \"mcp_list_tools\")) {\n continue;\n } else if (_isContentBlock(toolOutput, \"mcp_approval_request\")) {\n continue;\n } else if (_isContentBlock(toolOutput, \"image_generation_call\")) {\n continue;\n }\n }\n }\n }\n return Array.from(iterateContent());\n}\n\n/**\n * Converts a ChatOpenAIResponses message chunk to an array of v1 standard content blocks.\n *\n * This function processes an AI message chunk containing OpenAI-specific content blocks\n * and converts them to the standardized v1 content block format. It handles both the\n * regular message content and tool call chunks that are specific to streaming responses.\n *\n * @param message - The AI message chunk containing OpenAI-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const messageChunk = new AIMessageChunk({\n * content: [{ type: \"text\", text: \"Hello\" }],\n * tool_call_chunks: [\n * { id: \"call_123\", name: \"calculator\", args: '{\"a\": 1' }\n * ]\n * });\n *\n * const standardBlocks = convertToV1FromResponsesChunk(messageChunk);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello\" },\n * // { type: \"tool_call_chunk\", id: \"call_123\", name: \"calculator\", args: '{\"a\": 1' }\n * // ]\n * ```\n */\nexport function convertToV1FromResponsesChunk(\n message: AIMessageChunk\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n yield* convertToV1FromResponses(message);\n for (const toolCallChunk of message.tool_call_chunks ?? []) {\n yield {\n type: \"tool_call_chunk\",\n id: toolCallChunk.id,\n name: toolCallChunk.name,\n args: toolCallChunk.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const openaiTranslator: StandardContentBlockTranslator = {\n translateContent: (message) => {\n if (typeof message.content === \"string\") {\n return convertToV1FromChatCompletions(message);\n }\n return convertToV1FromResponses(message);\n },\n translateContentChunk: (message) => {\n if (typeof message.content === \"string\") {\n return convertToV1FromChatCompletionsChunk(message);\n }\n return convertToV1FromResponsesChunk(message);\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openai.cjs","names":["message: AIMessage","blocks: Array<ContentBlock.Standard>","blocks: Array<ContentBlock>","convertedBlocks: Array<ContentBlock.Standard>","isOpenAIDataBlock","convertToV1FromOpenAIDataBlock","annotation: ContentBlock","_isObject","_isArray","_isString","_isContentBlock","iife","message: AIMessageChunk","ChatOpenAITranslator: StandardContentBlockTranslator"],"sources":["../../../src/messages/block_translators/openai.ts"],"sourcesContent":["import type { ContentBlock } from \"../content/index.js\";\nimport type { AIMessageChunk, AIMessage } from \"../ai.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { convertToV1FromOpenAIDataBlock, isOpenAIDataBlock } from \"./data.js\";\nimport {\n _isArray,\n _isContentBlock,\n _isObject,\n _isString,\n iife,\n} from \"./utils.js\";\n\n/**\n * Converts a ChatOpenAICompletions message to an array of v1 standard content blocks.\n *\n * This function processes an AI message from ChatOpenAICompletions API format\n * and converts it to the standardized v1 content block format. It handles both\n * string content and structured content blocks, as well as tool calls.\n *\n * @param message - The AI message containing ChatOpenAICompletions formatted content\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const message = new AIMessage(\"Hello world\");\n * const standardBlocks = convertToV1FromChatCompletions(message);\n * // Returns: [{ type: \"text\", text: \"Hello world\" }]\n * ```\n *\n * @example\n * ```typescript\n * const message = new AIMessage([\n * { type: \"text\", text: \"Hello\" },\n * { type: \"image_url\", image_url: { url: \"https://example.com/image.png\" } }\n * ]);\n * message.tool_calls = [\n * { id: \"call_123\", name: \"calculator\", args: { a: 1, b: 2 } }\n * ];\n *\n * const standardBlocks = convertToV1FromChatCompletions(message);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello\" },\n * // { type: \"image\", url: \"https://example.com/image.png\" },\n * // { type: \"tool_call\", id: \"call_123\", name: \"calculator\", args: { a: 1, b: 2 } }\n * // ]\n * ```\n */\nexport function convertToV1FromChatCompletions(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n const blocks: Array<ContentBlock.Standard> = [];\n if (typeof message.content === \"string\") {\n blocks.push({\n type: \"text\",\n text: message.content,\n });\n } else {\n blocks.push(...convertToV1FromChatCompletionsInput(message.content));\n }\n for (const toolCall of message.tool_calls ?? []) {\n blocks.push({\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n return blocks;\n}\n\n/**\n * Converts a ChatOpenAICompletions message chunk to an array of v1 standard content blocks.\n *\n * This function processes an AI message chunk from OpenAI's chat completions API and converts\n * it to the standardized v1 content block format. It handles both string and array content,\n * as well as tool calls that may be present in the chunk.\n *\n * @param message - The AI message chunk containing OpenAI-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const chunk = new AIMessage(\"Hello\");\n * const standardBlocks = convertToV1FromChatCompletionsChunk(chunk);\n * // Returns: [{ type: \"text\", text: \"Hello\" }]\n * ```\n *\n * @example\n * ```typescript\n * const chunk = new AIMessage([\n * { type: \"text\", text: \"Processing...\" }\n * ]);\n * chunk.tool_calls = [\n * { id: \"call_456\", name: \"search\", args: { query: \"test\" } }\n * ];\n *\n * const standardBlocks = convertToV1FromChatCompletionsChunk(chunk);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Processing...\" },\n * // { type: \"tool_call\", id: \"call_456\", name: \"search\", args: { query: \"test\" } }\n * // ]\n * ```\n */\nexport function convertToV1FromChatCompletionsChunk(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n const blocks: Array<ContentBlock.Standard> = [];\n if (typeof message.content === \"string\") {\n blocks.push({\n type: \"text\",\n text: message.content,\n });\n } else {\n blocks.push(...convertToV1FromChatCompletionsInput(message.content));\n }\n\n // TODO: parse chunk position information\n for (const toolCall of message.tool_calls ?? []) {\n blocks.push({\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n return blocks;\n}\n\n/**\n * Converts an array of ChatOpenAICompletions content blocks to v1 standard content blocks.\n *\n * This function processes content blocks from OpenAI's Chat Completions API format\n * and converts them to the standardized v1 content block format. It handles both\n * OpenAI-specific data blocks (which require conversion) and standard blocks\n * (which are passed through with type assertion).\n *\n * @param blocks - Array of content blocks in ChatOpenAICompletions format\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const openaiBlocks = [\n * { type: \"text\", text: \"Hello world\" },\n * { type: \"image_url\", image_url: { url: \"https://example.com/image.png\" } }\n * ];\n *\n * const standardBlocks = convertToV1FromChatCompletionsInput(openaiBlocks);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello world\" },\n * // { type: \"image\", url: \"https://example.com/image.png\" }\n * // ]\n * ```\n */\nexport function convertToV1FromChatCompletionsInput(\n blocks: Array<ContentBlock>\n): Array<ContentBlock.Standard> {\n const convertedBlocks: Array<ContentBlock.Standard> = [];\n for (const block of blocks) {\n if (isOpenAIDataBlock(block)) {\n convertedBlocks.push(convertToV1FromOpenAIDataBlock(block));\n } else {\n convertedBlocks.push(block as ContentBlock.Standard);\n }\n }\n return convertedBlocks;\n}\n\nfunction convertResponsesAnnotation(\n annotation: ContentBlock\n): ContentBlock | ContentBlock.Citation {\n if (annotation.type === \"url_citation\") {\n const { url, title, start_index, end_index } = annotation;\n return {\n type: \"citation\",\n url,\n title,\n startIndex: start_index,\n endIndex: end_index,\n };\n }\n if (annotation.type === \"file_citation\") {\n const { file_id, filename, index } = annotation;\n return {\n type: \"citation\",\n title: filename,\n startIndex: index,\n endIndex: index,\n fileId: file_id,\n };\n }\n return annotation;\n}\n\n/**\n * Converts a ChatOpenAIResponses message to an array of v1 standard content blocks.\n *\n * This function processes an AI message containing OpenAI Responses-specific content blocks\n * and converts them to the standardized v1 content block format. It handles reasoning summaries,\n * text content with annotations, tool calls, and various tool outputs including code interpreter,\n * web search, file search, computer calls, and MCP-related blocks.\n *\n * @param message - The AI message containing OpenAI Responses-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const message = new AIMessage({\n * content: [{ type: \"text\", text: \"Hello world\", annotations: [] }],\n * tool_calls: [{ id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } }],\n * additional_kwargs: {\n * reasoning: { summary: [{ text: \"Let me calculate this...\" }] },\n * tool_outputs: [\n * {\n * type: \"code_interpreter_call\",\n * code: \"print('hello')\",\n * outputs: [{ type: \"logs\", logs: \"hello\" }]\n * }\n * ]\n * }\n * });\n *\n * const standardBlocks = convertToV1FromResponses(message);\n * // Returns:\n * // [\n * // { type: \"reasoning\", reasoning: \"Let me calculate this...\" },\n * // { type: \"text\", text: \"Hello world\", annotations: [] },\n * // { type: \"tool_call\", id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } },\n * // { type: \"code_interpreter_call\", code: \"print('hello')\" },\n * // { type: \"code_interpreter_result\", output: [{ type: \"code_interpreter_output\", returnCode: 0, stdout: \"hello\" }] }\n * // ]\n * ```\n */\nexport function convertToV1FromResponses(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n if (\n _isObject(message.additional_kwargs?.reasoning) &&\n _isArray(message.additional_kwargs.reasoning.summary)\n ) {\n const summary =\n message.additional_kwargs.reasoning.summary.reduce<string>(\n (acc, item) => {\n if (_isObject(item) && _isString(item.text)) {\n return `${acc}${item.text}`;\n }\n return acc;\n },\n \"\"\n );\n yield {\n type: \"reasoning\",\n reasoning: summary,\n };\n }\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, \"text\")) {\n const { text, annotations, ...rest } = block;\n if (Array.isArray(annotations)) {\n yield {\n ...rest,\n type: \"text\",\n text: String(text),\n annotations: annotations.map(convertResponsesAnnotation),\n };\n } else {\n yield {\n ...rest,\n type: \"text\",\n text: String(text),\n };\n }\n }\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 if (\n _isObject(message.additional_kwargs) &&\n _isArray(message.additional_kwargs.tool_outputs)\n ) {\n for (const toolOutput of message.additional_kwargs.tool_outputs) {\n if (_isContentBlock(toolOutput, \"web_search_call\")) {\n yield {\n id: toolOutput.id,\n type: \"server_tool_call\",\n name: \"web_search\",\n args: { query: toolOutput.query },\n };\n continue;\n } else if (_isContentBlock(toolOutput, \"file_search_call\")) {\n yield {\n id: toolOutput.id,\n type: \"server_tool_call\",\n name: \"file_search\",\n args: { query: toolOutput.query },\n };\n continue;\n } else if (_isContentBlock(toolOutput, \"computer_call\")) {\n yield { type: \"non_standard\", value: toolOutput };\n continue;\n } else if (_isContentBlock(toolOutput, \"code_interpreter_call\")) {\n if (_isString(toolOutput.code)) {\n yield {\n id: toolOutput.id,\n type: \"server_tool_call\",\n name: \"code_interpreter\",\n args: { code: toolOutput.code },\n };\n }\n if (_isArray(toolOutput.outputs)) {\n const returnCode = iife(() => {\n if (toolOutput.status === \"in_progress\") return undefined;\n if (toolOutput.status === \"completed\") return 0;\n if (toolOutput.status === \"incomplete\") return 127;\n if (toolOutput.status === \"interpreting\") return undefined;\n if (toolOutput.status === \"failed\") return 1;\n return undefined;\n });\n for (const output of toolOutput.outputs) {\n if (_isContentBlock(output, \"logs\")) {\n yield {\n type: \"server_tool_call_result\",\n toolCallId: toolOutput.id ?? \"\",\n status: \"success\",\n output: {\n type: \"code_interpreter_output\",\n returnCode: returnCode ?? 0,\n stderr: [0, undefined].includes(returnCode)\n ? undefined\n : String(output.logs),\n stdout: [0, undefined].includes(returnCode)\n ? String(output.logs)\n : undefined,\n },\n };\n continue;\n }\n }\n }\n continue;\n } else if (_isContentBlock(toolOutput, \"mcp_call\")) {\n yield {\n id: toolOutput.id,\n type: \"server_tool_call\",\n name: \"mcp_call\",\n args: toolOutput.input,\n };\n continue;\n } else if (_isContentBlock(toolOutput, \"mcp_list_tools\")) {\n yield {\n id: toolOutput.id,\n type: \"server_tool_call\",\n name: \"mcp_list_tools\",\n args: toolOutput.input,\n };\n continue;\n } else if (_isContentBlock(toolOutput, \"mcp_approval_request\")) {\n yield { type: \"non_standard\", value: toolOutput };\n continue;\n } else if (_isContentBlock(toolOutput, \"image_generation_call\")) {\n yield { type: \"non_standard\", value: toolOutput };\n continue;\n }\n if (_isObject(toolOutput)) {\n yield { type: \"non_standard\", value: toolOutput };\n }\n }\n }\n }\n return Array.from(iterateContent());\n}\n\n/**\n * Converts a ChatOpenAIResponses message chunk to an array of v1 standard content blocks.\n *\n * This function processes an AI message chunk containing OpenAI-specific content blocks\n * and converts them to the standardized v1 content block format. It handles both the\n * regular message content and tool call chunks that are specific to streaming responses.\n *\n * @param message - The AI message chunk containing OpenAI-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const messageChunk = new AIMessageChunk({\n * content: [{ type: \"text\", text: \"Hello\" }],\n * tool_call_chunks: [\n * { id: \"call_123\", name: \"calculator\", args: '{\"a\": 1' }\n * ]\n * });\n *\n * const standardBlocks = convertToV1FromResponsesChunk(messageChunk);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello\" },\n * // { type: \"tool_call_chunk\", id: \"call_123\", name: \"calculator\", args: '{\"a\": 1' }\n * // ]\n * ```\n */\nexport function convertToV1FromResponsesChunk(\n message: AIMessageChunk\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n yield* convertToV1FromResponses(message);\n for (const toolCallChunk of message.tool_call_chunks ?? []) {\n yield {\n type: \"tool_call_chunk\",\n id: toolCallChunk.id,\n name: toolCallChunk.name,\n args: toolCallChunk.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatOpenAITranslator: StandardContentBlockTranslator = {\n translateContent: (message) => {\n if (typeof message.content === \"string\") {\n return convertToV1FromChatCompletions(message);\n }\n return convertToV1FromResponses(message);\n },\n translateContentChunk: (message) => {\n if (typeof message.content === \"string\") {\n return convertToV1FromChatCompletionsChunk(message);\n }\n return convertToV1FromResponsesChunk(message);\n },\n};\n"],"mappings":"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"}
|
|
@@ -232,14 +232,35 @@ function convertToV1FromResponses(message) {
|
|
|
232
232
|
name: toolCall.name,
|
|
233
233
|
args: toolCall.args
|
|
234
234
|
};
|
|
235
|
-
if (_isObject(message.additional_kwargs) && _isArray(message.additional_kwargs.tool_outputs)) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
235
|
+
if (_isObject(message.additional_kwargs) && _isArray(message.additional_kwargs.tool_outputs)) for (const toolOutput of message.additional_kwargs.tool_outputs) {
|
|
236
|
+
if (_isContentBlock(toolOutput, "web_search_call")) {
|
|
237
|
+
yield {
|
|
238
|
+
id: toolOutput.id,
|
|
239
|
+
type: "server_tool_call",
|
|
240
|
+
name: "web_search",
|
|
241
|
+
args: { query: toolOutput.query }
|
|
242
|
+
};
|
|
243
|
+
continue;
|
|
244
|
+
} else if (_isContentBlock(toolOutput, "file_search_call")) {
|
|
245
|
+
yield {
|
|
246
|
+
id: toolOutput.id,
|
|
247
|
+
type: "server_tool_call",
|
|
248
|
+
name: "file_search",
|
|
249
|
+
args: { query: toolOutput.query }
|
|
250
|
+
};
|
|
251
|
+
continue;
|
|
252
|
+
} else if (_isContentBlock(toolOutput, "computer_call")) {
|
|
253
|
+
yield {
|
|
254
|
+
type: "non_standard",
|
|
255
|
+
value: toolOutput
|
|
256
|
+
};
|
|
257
|
+
continue;
|
|
258
|
+
} else if (_isContentBlock(toolOutput, "code_interpreter_call")) {
|
|
240
259
|
if (_isString(toolOutput.code)) yield {
|
|
241
|
-
|
|
242
|
-
|
|
260
|
+
id: toolOutput.id,
|
|
261
|
+
type: "server_tool_call",
|
|
262
|
+
name: "code_interpreter",
|
|
263
|
+
args: { code: toolOutput.code }
|
|
243
264
|
};
|
|
244
265
|
if (_isArray(toolOutput.outputs)) {
|
|
245
266
|
const returnCode = iife(() => {
|
|
@@ -250,20 +271,55 @@ function convertToV1FromResponses(message) {
|
|
|
250
271
|
if (toolOutput.status === "failed") return 1;
|
|
251
272
|
return void 0;
|
|
252
273
|
});
|
|
253
|
-
for (const output of toolOutput.outputs) if (_isContentBlock(output, "logs"))
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
274
|
+
for (const output of toolOutput.outputs) if (_isContentBlock(output, "logs")) {
|
|
275
|
+
yield {
|
|
276
|
+
type: "server_tool_call_result",
|
|
277
|
+
toolCallId: toolOutput.id ?? "",
|
|
278
|
+
status: "success",
|
|
279
|
+
output: {
|
|
280
|
+
type: "code_interpreter_output",
|
|
281
|
+
returnCode: returnCode ?? 0,
|
|
282
|
+
stderr: [0, void 0].includes(returnCode) ? void 0 : String(output.logs),
|
|
283
|
+
stdout: [0, void 0].includes(returnCode) ? String(output.logs) : void 0
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
262
288
|
}
|
|
263
|
-
|
|
264
|
-
else if (_isContentBlock(toolOutput, "
|
|
265
|
-
|
|
266
|
-
|
|
289
|
+
continue;
|
|
290
|
+
} else if (_isContentBlock(toolOutput, "mcp_call")) {
|
|
291
|
+
yield {
|
|
292
|
+
id: toolOutput.id,
|
|
293
|
+
type: "server_tool_call",
|
|
294
|
+
name: "mcp_call",
|
|
295
|
+
args: toolOutput.input
|
|
296
|
+
};
|
|
297
|
+
continue;
|
|
298
|
+
} else if (_isContentBlock(toolOutput, "mcp_list_tools")) {
|
|
299
|
+
yield {
|
|
300
|
+
id: toolOutput.id,
|
|
301
|
+
type: "server_tool_call",
|
|
302
|
+
name: "mcp_list_tools",
|
|
303
|
+
args: toolOutput.input
|
|
304
|
+
};
|
|
305
|
+
continue;
|
|
306
|
+
} else if (_isContentBlock(toolOutput, "mcp_approval_request")) {
|
|
307
|
+
yield {
|
|
308
|
+
type: "non_standard",
|
|
309
|
+
value: toolOutput
|
|
310
|
+
};
|
|
311
|
+
continue;
|
|
312
|
+
} else if (_isContentBlock(toolOutput, "image_generation_call")) {
|
|
313
|
+
yield {
|
|
314
|
+
type: "non_standard",
|
|
315
|
+
value: toolOutput
|
|
316
|
+
};
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
if (_isObject(toolOutput)) yield {
|
|
320
|
+
type: "non_standard",
|
|
321
|
+
value: toolOutput
|
|
322
|
+
};
|
|
267
323
|
}
|
|
268
324
|
}
|
|
269
325
|
return Array.from(iterateContent());
|
|
@@ -307,7 +363,7 @@ function convertToV1FromResponsesChunk(message) {
|
|
|
307
363
|
}
|
|
308
364
|
return Array.from(iterateContent());
|
|
309
365
|
}
|
|
310
|
-
const
|
|
366
|
+
const ChatOpenAITranslator = {
|
|
311
367
|
translateContent: (message) => {
|
|
312
368
|
if (typeof message.content === "string") return convertToV1FromChatCompletions(message);
|
|
313
369
|
return convertToV1FromResponses(message);
|
|
@@ -319,5 +375,5 @@ const openaiTranslator = {
|
|
|
319
375
|
};
|
|
320
376
|
|
|
321
377
|
//#endregion
|
|
322
|
-
export {
|
|
378
|
+
export { ChatOpenAITranslator, convertToV1FromChatCompletionsInput };
|
|
323
379
|
//# sourceMappingURL=openai.js.map
|