@langchain/google 0.2.12 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/chat_models/api_types/generate_content.d.cts +0 -2
  3. package/dist/chat_models/api_types/generate_content.d.ts +0 -2
  4. package/dist/chat_models/api_types/interactions.d.cts +1423 -0
  5. package/dist/chat_models/api_types/interactions.d.ts +1423 -0
  6. package/dist/chat_models/base.cjs +12 -11
  7. package/dist/chat_models/base.cjs.map +1 -1
  8. package/dist/chat_models/base.d.cts +3 -5
  9. package/dist/chat_models/base.d.ts +3 -5
  10. package/dist/chat_models/base.js +12 -11
  11. package/dist/chat_models/base.js.map +1 -1
  12. package/dist/chat_models/handlers/base.cjs +1 -2
  13. package/dist/chat_models/handlers/base.d.cts +0 -2
  14. package/dist/chat_models/handlers/base.d.ts +0 -2
  15. package/dist/chat_models/handlers/base.js +1 -2
  16. package/dist/chat_models/handlers/generate_content.cjs +5 -6
  17. package/dist/chat_models/handlers/generate_content.d.cts +0 -2
  18. package/dist/chat_models/handlers/generate_content.d.ts +0 -2
  19. package/dist/chat_models/handlers/generate_content.js +5 -6
  20. package/dist/chat_models/handlers/index.cjs +2 -0
  21. package/dist/chat_models/handlers/index.d.cts +2 -1
  22. package/dist/chat_models/handlers/index.d.ts +2 -1
  23. package/dist/chat_models/handlers/index.js +2 -1
  24. package/dist/chat_models/handlers/interactions.cjs +303 -0
  25. package/dist/chat_models/handlers/interactions.cjs.map +1 -0
  26. package/dist/chat_models/handlers/interactions.d.cts +33 -0
  27. package/dist/chat_models/handlers/interactions.d.ts +33 -0
  28. package/dist/chat_models/handlers/interactions.js +303 -0
  29. package/dist/chat_models/handlers/interactions.js.map +1 -0
  30. package/dist/chat_models/index.cjs +5 -4
  31. package/dist/chat_models/index.cjs.map +1 -1
  32. package/dist/chat_models/index.d.cts +4 -5
  33. package/dist/chat_models/index.d.ts +4 -5
  34. package/dist/chat_models/index.js +5 -5
  35. package/dist/chat_models/index.js.map +1 -1
  36. package/dist/chat_models/node.cjs +3 -4
  37. package/dist/chat_models/node.d.cts +1 -3
  38. package/dist/chat_models/node.d.ts +1 -3
  39. package/dist/chat_models/node.js +3 -4
  40. package/dist/chat_models/profiles.cjs +1 -2
  41. package/dist/chat_models/profiles.js +1 -2
  42. package/dist/chat_models/types.cjs +1 -2
  43. package/dist/chat_models/types.cjs.map +1 -1
  44. package/dist/chat_models/types.d.cts +524 -23
  45. package/dist/chat_models/types.d.ts +524 -23
  46. package/dist/chat_models/types.js +1 -2
  47. package/dist/chat_models/types.js.map +1 -1
  48. package/dist/clients/index.cjs +3 -4
  49. package/dist/clients/index.d.cts +0 -2
  50. package/dist/clients/index.d.ts +0 -2
  51. package/dist/clients/index.js +3 -4
  52. package/dist/clients/node.cjs +4 -5
  53. package/dist/clients/node.d.cts +0 -2
  54. package/dist/clients/node.d.ts +0 -2
  55. package/dist/clients/node.js +4 -5
  56. package/dist/const.cjs +1 -2
  57. package/dist/const.js +1 -2
  58. package/dist/converters/generate_content/messages.cjs +1 -2
  59. package/dist/converters/generate_content/messages.js +1 -2
  60. package/dist/converters/generate_content/params.cjs +1 -2
  61. package/dist/converters/generate_content/params.js +1 -2
  62. package/dist/converters/generate_content/stream_events.cjs +1 -2
  63. package/dist/converters/generate_content/stream_events.js +1 -2
  64. package/dist/converters/generate_content/tools.cjs +1 -2
  65. package/dist/converters/generate_content/tools.js +1 -2
  66. package/dist/converters/interactions/messages.cjs +766 -0
  67. package/dist/converters/interactions/messages.cjs.map +1 -0
  68. package/dist/converters/interactions/messages.js +759 -0
  69. package/dist/converters/interactions/messages.js.map +1 -0
  70. package/dist/converters/interactions/params.cjs +244 -0
  71. package/dist/converters/interactions/params.cjs.map +1 -0
  72. package/dist/converters/interactions/params.js +237 -0
  73. package/dist/converters/interactions/params.js.map +1 -0
  74. package/dist/converters/interactions/stream_events.cjs +769 -0
  75. package/dist/converters/interactions/stream_events.cjs.map +1 -0
  76. package/dist/converters/interactions/stream_events.js +768 -0
  77. package/dist/converters/interactions/stream_events.js.map +1 -0
  78. package/dist/converters/interactions/tools.cjs +229 -0
  79. package/dist/converters/interactions/tools.cjs.map +1 -0
  80. package/dist/converters/interactions/tools.js +228 -0
  81. package/dist/converters/interactions/tools.js.map +1 -0
  82. package/dist/converters/shared/params.cjs +1 -2
  83. package/dist/converters/shared/params.js +1 -2
  84. package/dist/index.cjs +2 -0
  85. package/dist/index.d.cts +3 -2
  86. package/dist/index.d.ts +3 -2
  87. package/dist/index.js +2 -1
  88. package/dist/node.cjs +1 -1
  89. package/dist/node.d.cts +1 -1
  90. package/dist/node.d.ts +1 -1
  91. package/dist/node.js +1 -1
  92. package/dist/utils/errors.cjs +1 -2
  93. package/dist/utils/errors.js +1 -2
  94. package/dist/utils/gcp-auth.cjs +3 -4
  95. package/dist/utils/gcp-auth.d.cts +0 -2
  96. package/dist/utils/gcp-auth.d.ts +0 -2
  97. package/dist/utils/gcp-auth.js +3 -4
  98. package/dist/utils/handler.cjs +1 -2
  99. package/dist/utils/handler.d.cts +0 -2
  100. package/dist/utils/handler.d.ts +0 -2
  101. package/dist/utils/handler.js +1 -2
  102. package/dist/utils/metadata.cjs +1 -2
  103. package/dist/utils/metadata.js +1 -2
  104. package/dist/utils/misc.cjs +1 -2
  105. package/dist/utils/misc.d.cts +0 -2
  106. package/dist/utils/misc.d.ts +0 -2
  107. package/dist/utils/misc.js +1 -2
  108. package/dist/utils/stream.cjs +1 -2
  109. package/dist/utils/stream.js +1 -2
  110. package/package.json +11 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream_events.cjs","names":["convertGeminiPartToContentBlock","ChatGenerationChunk","AIMessageChunk","normalizeInteractionStep","uuidv4","convertInteractionsContentToGeminiPart","convertGeminiPartsToToolCalls","GoogleError","convertInteractionsUsageToUsageMetadata","synthesizeMetadataFromInteractions","finalizeContentBlock"],"sources":["../../../src/converters/interactions/stream_events.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { finalizeContentBlock } from \"@langchain/core/language_models/compat\";\nimport type {\n ChatModelStreamEvent,\n FinishReason,\n} from \"@langchain/core/language_models/event\";\nimport {\n AIMessageChunk,\n type ContentBlock,\n type UsageMetadata,\n} from \"@langchain/core/messages\";\nimport type { ToolCall, ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { ChatGenerationChunk } from \"@langchain/core/outputs\";\nimport { v4 as uuidv4 } from \"@langchain/core/utils/uuid\";\nimport type { Gemini } from \"../../chat_models/types.js\";\nimport { GoogleError } from \"../../utils/errors.js\";\nimport {\n convertGeminiPartToContentBlock,\n convertGeminiPartsToToolCalls,\n} from \"../generate_content/messages.js\";\nimport {\n convertInteractionsContentToGeminiPart,\n convertInteractionsUsageToUsageMetadata,\n normalizeInteractionStep,\n synthesizeMetadataFromInteractions,\n} from \"./messages.js\";\n\nexport interface ConvertInteractionsStreamOptions {\n streamUsage?: boolean;\n model?: string;\n runManager?: CallbackManagerForLLMRun;\n}\n\ninterface TrackedFunctionCallState {\n id: string;\n name: string;\n argsText: string;\n argsObject?: Record<string, unknown>;\n thoughtSignature?: string;\n toolIndex: number;\n emittedToolCall: boolean;\n}\n\ninterface TrackedStepState {\n stepType?: string;\n hasThoughtSummary?: boolean;\n thoughtSignature?: string;\n textIndex?: number;\n functionCall?: TrackedFunctionCallState;\n}\n\n/**\n * Converts a stream of Interactions API SSE events (`InteractionSseEvent`) into\n * LangChain `ChatGenerationChunk` instances for `streamResponseChunks`.\n *\n * ### ThoughtStep & `thoughtSignature` Streaming Design\n *\n * During SSE streaming, a `ThoughtStep` arrives as a sequence of `step.delta` events:\n * - `{ type: \"thought_summary\", content: { type: \"text\", text: \"...\" } }`\n * - `{ type: \"thought_signature\", signature: \"...\" }`\n *\n * Matching `convertInteractionToAIMessage`:\n * 1. If a `ThoughtStep` emits one or more `thought_summary` deltas, we emit `AIMessageChunk`s\n * containing `{ type: \"text\", thought: true, text }` and attach `thoughtSignature` when\n * `thought_signature` arrives for that step. When concatenated via `concat()`, this forms\n * a reasoning block with its `thoughtSignature`.\n * 2. If a `ThoughtStep` only emits `thought_signature` (no `thought_summary`), we do NOT emit\n * a `{ thought: true }` block (which would prevent single-text responses from collapsing to\n * a string on `concat()`). Instead, we store `pendingThoughtSignature` and attach it to the\n * subsequent `function_call` or `model_output` chunk (or as a metadata-only\n * `{ type: \"text\", text: \"\", thoughtSignature }` chunk at the end of the stream).\n */\nexport async function* convertInteractionsStreamToChunks(\n source: AsyncIterable<Gemini.Interactions.InteractionSseEvent>,\n options: ConvertInteractionsStreamOptions = {}\n): AsyncGenerator<ChatGenerationChunk> {\n const shouldStreamUsage = options.streamUsage ?? true;\n const runManager = options.runManager;\n\n const stepStates = new Map<number, TrackedStepState>();\n const textSegments: Array<{\n text: string;\n annotations?: Gemini.Interactions.Annotation[];\n }> = [];\n const builtInToolSteps: Gemini.Interactions.Step[] = [];\n\n let interactionId: string | undefined;\n let interactionStatus: string | undefined;\n let interactionRole: string | undefined;\n let previousInteractionId: string | undefined;\n let modelName: string | undefined = options.model;\n let latestUsage: Gemini.Interactions.Usage | undefined;\n let pendingThoughtSignature: string | undefined;\n let pendingFunctionCallSignature: string | undefined;\n let hasEmittedStepDelta = false;\n let nextToolIndex = 0;\n\n const getOrCreateStepState = (index: number): TrackedStepState => {\n let state = stepStates.get(index);\n if (!state) {\n state = {};\n stepStates.set(index, state);\n }\n return state;\n };\n\n const emitFunctionCallChunk = (\n fcState: TrackedFunctionCallState\n ): ChatGenerationChunk => {\n let parsedArgs: Record<string, unknown> = fcState.argsObject ?? {};\n if (!fcState.argsObject && fcState.argsText.trim().length > 0) {\n try {\n const parsed = JSON.parse(fcState.argsText);\n if (typeof parsed === \"object\" && parsed !== null) {\n parsedArgs = parsed as Record<string, unknown>;\n }\n } catch {\n parsedArgs = {};\n }\n }\n\n const argsString =\n fcState.argsText.length > 0\n ? fcState.argsText\n : JSON.stringify(parsedArgs);\n\n const toolCall: ToolCall & { thoughtSignature?: string } = {\n type: \"tool_call\",\n id: fcState.id,\n name: fcState.name,\n args: parsedArgs,\n ...(fcState.thoughtSignature\n ? { thoughtSignature: fcState.thoughtSignature }\n : {}),\n };\n\n const toolCallChunk: ToolCallChunk = {\n type: \"tool_call_chunk\",\n id: fcState.id,\n name: fcState.name,\n args: argsString,\n index: fcState.toolIndex,\n };\n\n const part: Gemini.Part = {\n functionCall: {\n id: fcState.id,\n name: fcState.name,\n args: parsedArgs,\n },\n ...(fcState.thoughtSignature\n ? { thoughtSignature: fcState.thoughtSignature }\n : {}),\n };\n const block = convertGeminiPartToContentBlock(part);\n\n fcState.emittedToolCall = true;\n\n return new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({\n content: block ? [block] : \"\",\n tool_calls: [toolCall],\n tool_call_chunks: [toolCallChunk],\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n };\n\n for await (const event of source) {\n switch (event.event_type) {\n case \"interaction.created\":\n case \"interaction.start\": {\n if (event.interaction) {\n interactionId = event.interaction.id ?? interactionId;\n interactionStatus = event.interaction.status ?? interactionStatus;\n interactionRole = event.interaction.role ?? interactionRole;\n previousInteractionId =\n event.interaction.previous_interaction_id ?? previousInteractionId;\n modelName = event.interaction.model ?? modelName;\n if (event.interaction.usage) {\n latestUsage = event.interaction.usage;\n }\n }\n break;\n }\n\n case \"step.start\":\n case \"content.start\": {\n const state = getOrCreateStepState(event.index);\n const rawStep = event.step ?? event.content;\n if (rawStep) {\n const step = normalizeInteractionStep(rawStep);\n state.stepType = step.type;\n if (step.type === \"function_call\") {\n const sig = pendingThoughtSignature ?? pendingFunctionCallSignature;\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n const hasInitialArgs =\n step.arguments && Object.keys(step.arguments).length > 0;\n state.functionCall = {\n id: step.id || `lc-tool-call-${uuidv4().replace(/-/g, \"\")}`,\n name: step.name || \"\",\n argsText: hasInitialArgs ? JSON.stringify(step.arguments) : \"\",\n argsObject: hasInitialArgs ? step.arguments : undefined,\n thoughtSignature: sig,\n toolIndex: nextToolIndex++,\n emittedToolCall: false,\n };\n } else if (step.type === \"thought\" && step.signature) {\n state.thoughtSignature = step.signature;\n pendingFunctionCallSignature = step.signature;\n }\n }\n break;\n }\n\n case \"step.delta\":\n case \"content.delta\": {\n const state = getOrCreateStepState(event.index);\n if (event.metadata?.total_usage) {\n latestUsage = event.metadata.total_usage;\n }\n\n const delta = event.delta;\n if (!delta) break;\n\n switch (delta.type) {\n case \"text\": {\n hasEmittedStepDelta = true;\n if (state.textIndex === undefined) {\n state.textIndex = textSegments.length;\n textSegments.push({ text: \"\", annotations: [] });\n }\n const seg = textSegments[state.textIndex];\n seg.text += delta.text;\n\n const sig = pendingThoughtSignature;\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n\n const part: Gemini.Part = {\n text: delta.text,\n ...(sig ? { thoughtSignature: sig } : {}),\n };\n const textBlock = convertGeminiPartToContentBlock(part)!;\n\n const chunk = new ChatGenerationChunk({\n text: delta.text,\n message: new AIMessageChunk({\n content: delta.text,\n additional_kwargs: {\n originalTextContentBlock: textBlock,\n },\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n yield chunk;\n await runManager?.handleLLMNewToken(delta.text);\n break;\n }\n\n case \"text_annotation_delta\":\n case \"text_annotation\": {\n if (state.textIndex === undefined) {\n state.textIndex = textSegments.length;\n textSegments.push({ text: \"\", annotations: [] });\n }\n const seg = textSegments[state.textIndex];\n seg.annotations = [\n ...(seg.annotations ?? []),\n ...(delta.annotations ?? []),\n ];\n break;\n }\n\n case \"thought_summary\": {\n hasEmittedStepDelta = true;\n state.hasThoughtSummary = true;\n const summaryText =\n delta.content?.type === \"text\" ? delta.content.text : \"\";\n if (summaryText) {\n const part: Gemini.Part = {\n text: summaryText,\n thought: true,\n ...(state.thoughtSignature\n ? { thoughtSignature: state.thoughtSignature }\n : {}),\n };\n const block = convertGeminiPartToContentBlock(part)!;\n state.thoughtSignature = undefined;\n\n const chunk = new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({\n content: [block],\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n yield chunk;\n await runManager?.handleLLMNewToken(summaryText);\n }\n break;\n }\n\n case \"thought_signature\": {\n if (delta.signature) {\n pendingFunctionCallSignature = delta.signature;\n if (state.hasThoughtSummary) {\n hasEmittedStepDelta = true;\n const part: Gemini.Part = {\n text: \"\",\n thought: true,\n thoughtSignature: delta.signature,\n };\n const block = convertGeminiPartToContentBlock(part)!;\n yield new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({\n content: [block],\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n } else {\n pendingThoughtSignature = delta.signature;\n state.thoughtSignature = delta.signature;\n }\n }\n break;\n }\n\n case \"arguments_delta\":\n case \"function_call\": {\n hasEmittedStepDelta = true;\n const fcSig =\n pendingThoughtSignature ?? pendingFunctionCallSignature;\n if (!state.functionCall) {\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n state.functionCall = {\n id: delta.id || `lc-tool-call-${uuidv4().replace(/-/g, \"\")}`,\n name: delta.name || \"\",\n argsText: \"\",\n thoughtSignature: fcSig,\n toolIndex: nextToolIndex++,\n emittedToolCall: false,\n };\n } else {\n if (delta.id) state.functionCall.id = delta.id;\n if (delta.name) state.functionCall.name = delta.name;\n if (fcSig && !state.functionCall.thoughtSignature) {\n state.functionCall.thoughtSignature = fcSig;\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n }\n }\n\n if (typeof delta.arguments === \"string\") {\n state.functionCall.argsText += delta.arguments;\n } else if (\n typeof delta.arguments === \"object\" &&\n delta.arguments !== null\n ) {\n state.functionCall.argsObject = delta.arguments;\n state.functionCall.argsText = JSON.stringify(delta.arguments);\n yield emitFunctionCallChunk(state.functionCall);\n await runManager?.handleLLMNewToken(\"\");\n }\n break;\n }\n\n case \"image\":\n case \"audio\":\n case \"document\":\n case \"video\": {\n hasEmittedStepDelta = true;\n const sig = pendingThoughtSignature;\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n const part = convertInteractionsContentToGeminiPart(\n delta as Gemini.Interactions.Content,\n sig\n );\n if (part) {\n const block = convertGeminiPartToContentBlock(part);\n if (block) {\n yield new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({\n content: [block],\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n await runManager?.handleLLMNewToken(\"\");\n }\n }\n break;\n }\n\n case \"code_execution_call\": {\n hasEmittedStepDelta = true;\n const sig = delta.signature ?? pendingThoughtSignature;\n pendingThoughtSignature = undefined;\n const part: Gemini.Part = {\n executableCode: {\n code: delta.arguments?.code ?? \"\",\n language: \"PYTHON\",\n },\n ...(sig ? { thoughtSignature: sig } : {}),\n };\n const block = convertGeminiPartToContentBlock(part);\n if (block) {\n yield new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({\n content: [block],\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n await runManager?.handleLLMNewToken(\"\");\n }\n break;\n }\n\n case \"code_execution_result\": {\n hasEmittedStepDelta = true;\n const sig = delta.signature ?? pendingThoughtSignature;\n pendingThoughtSignature = undefined;\n const part: Gemini.Part = {\n codeExecutionResult: {\n output: delta.result ?? \"\",\n outcome: delta.is_error ? \"OUTCOME_FAILED\" : \"OUTCOME_OK\",\n },\n ...(sig ? { thoughtSignature: sig } : {}),\n };\n const block = convertGeminiPartToContentBlock(part);\n if (block) {\n yield new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({\n content: [block],\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n await runManager?.handleLLMNewToken(\"\");\n }\n break;\n }\n\n case \"google_search_call\":\n case \"google_search_result\":\n case \"google_maps_call\":\n case \"google_maps_result\":\n case \"file_search_call\":\n case \"file_search_result\":\n case \"url_context_call\":\n case \"url_context_result\":\n case \"mcp_server_tool_call\":\n case \"mcp_server_tool_result\":\n case \"processing_call\":\n case \"processing_result\":\n case \"retrieval_call\":\n case \"retrieval_result\": {\n builtInToolSteps.push(delta as unknown as Gemini.Interactions.Step);\n break;\n }\n\n default:\n break;\n }\n break;\n }\n\n case \"step.stop\":\n case \"content.stop\": {\n const state = stepStates.get(event.index);\n if (event.usage) {\n latestUsage = event.usage;\n } else if (event.step_usage && !latestUsage) {\n latestUsage = event.step_usage;\n }\n if (state?.functionCall && !state.functionCall.emittedToolCall) {\n hasEmittedStepDelta = true;\n yield emitFunctionCallChunk(state.functionCall);\n await runManager?.handleLLMNewToken(\"\");\n }\n break;\n }\n\n case \"interaction.status_update\": {\n interactionId = event.interaction_id ?? interactionId;\n interactionStatus = event.status ?? interactionStatus;\n if (event.usage) {\n latestUsage = event.usage;\n }\n break;\n }\n\n case \"interaction.completed\":\n case \"interaction.complete\": {\n if (event.interaction) {\n interactionId = event.interaction.id ?? interactionId;\n interactionStatus = event.interaction.status ?? interactionStatus;\n interactionRole = event.interaction.role ?? interactionRole;\n previousInteractionId =\n event.interaction.previous_interaction_id ?? previousInteractionId;\n modelName = event.interaction.model ?? modelName;\n if (event.interaction.usage) {\n latestUsage = event.interaction.usage;\n }\n\n // If no step deltas were emitted before interaction.completed (e.g. a non-delta\n // completed event containing full steps), emit chunks from the completed steps.\n const completedItems =\n event.interaction.steps ?? event.interaction.outputs ?? [];\n if (!hasEmittedStepDelta && completedItems.length > 0) {\n const steps = completedItems.map(normalizeInteractionStep);\n const parts: Gemini.Part[] = [];\n for (const step of steps) {\n if (step.type === \"thought\") {\n const summaries = (step.summary ?? []).filter(\n (c): c is Gemini.Interactions.TextContent =>\n c.type === \"text\" &&\n typeof c.text === \"string\" &&\n c.text.length > 0\n );\n if (summaries.length > 0) {\n for (let i = 0; i < summaries.length; i++) {\n parts.push({\n text: summaries[i].text,\n thought: true,\n ...(i === summaries.length - 1 && step.signature\n ? { thoughtSignature: step.signature }\n : {}),\n });\n }\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = step.signature;\n } else if (step.signature) {\n pendingThoughtSignature = step.signature;\n pendingFunctionCallSignature = step.signature;\n }\n } else if (step.type === \"model_output\") {\n const contents =\n typeof step.content === \"string\"\n ? [{ type: \"text\" as const, text: step.content }]\n : (step.content ?? []);\n for (const c of contents) {\n if (c.type === \"text\") {\n textSegments.push({\n text: c.text,\n annotations: c.annotations,\n });\n }\n const p = convertInteractionsContentToGeminiPart(\n c,\n pendingThoughtSignature\n );\n if (p) {\n parts.push(p);\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n }\n }\n } else if (step.type === \"function_call\") {\n const fcSig =\n pendingThoughtSignature ?? pendingFunctionCallSignature;\n parts.push({\n functionCall: {\n id: step.id,\n name: step.name,\n args: step.arguments ?? {},\n },\n ...(fcSig ? { thoughtSignature: fcSig } : {}),\n });\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n } else if (\n step.type === \"google_search_call\" ||\n step.type === \"google_search_result\" ||\n step.type === \"google_maps_call\" ||\n step.type === \"google_maps_result\" ||\n step.type === \"file_search_call\" ||\n step.type === \"file_search_result\" ||\n step.type === \"url_context_call\" ||\n step.type === \"url_context_result\"\n ) {\n builtInToolSteps.push(step);\n }\n }\n\n if (parts.length > 0) {\n const blockContent = parts\n .map((p) => convertGeminiPartToContentBlock(p))\n .filter((b): b is ContentBlock => b !== null);\n const toolCalls = convertGeminiPartsToToolCalls(parts);\n const toolCallChunks: ToolCallChunk[] = toolCalls.map(\n (tc, idx) => ({\n type: \"tool_call_chunk\",\n id: tc.id,\n name: tc.name,\n args: JSON.stringify(tc.args ?? {}),\n index: idx,\n })\n );\n const singleText =\n blockContent.length === 1 &&\n blockContent[0].type === \"text\" &&\n !blockContent[0].thought\n ? (blockContent[0].text as string)\n : undefined;\n\n hasEmittedStepDelta = true;\n yield new ChatGenerationChunk({\n text: singleText ?? \"\",\n message: new AIMessageChunk({\n content: singleText ?? blockContent,\n tool_calls: toolCalls,\n tool_call_chunks: toolCallChunks,\n additional_kwargs: singleText\n ? { originalTextContentBlock: blockContent[0] }\n : {},\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n },\n }),\n });\n await runManager?.handleLLMNewToken(singleText ?? \"\");\n }\n }\n }\n break;\n }\n\n case \"error\": {\n throw new GoogleError(\n `Google Interactions API stream error (${event.error?.code ?? \"unknown\"}): ${event.error?.message ?? \"Unknown error\"}`\n );\n }\n\n default:\n break;\n }\n }\n\n // Flush any un-emitted function calls if a stream ended without step.stop\n for (const state of stepStates.values()) {\n if (state.functionCall && !state.functionCall.emittedToolCall) {\n hasEmittedStepDelta = true;\n yield emitFunctionCallChunk(state.functionCall);\n await runManager?.handleLLMNewToken(\"\");\n }\n }\n\n const usageMetadata = shouldStreamUsage\n ? convertInteractionsUsageToUsageMetadata(latestUsage)\n : undefined;\n\n const synthesized = synthesizeMetadataFromInteractions({\n textSegments,\n builtInToolSteps,\n });\n\n let finishReason: string | undefined;\n if (\n interactionStatus === \"completed\" ||\n interactionStatus === \"requires_action\"\n ) {\n finishReason = \"STOP\";\n } else if (interactionStatus) {\n finishReason = interactionStatus.toUpperCase();\n }\n\n const trailingSigBlock: ContentBlock | undefined = pendingThoughtSignature\n ? {\n type: \"text\",\n text: \"\",\n thoughtSignature: pendingThoughtSignature,\n }\n : undefined;\n\n if (\n usageMetadata ||\n finishReason ||\n trailingSigBlock ||\n Object.keys(synthesized).length > 0 ||\n interactionId ||\n !hasEmittedStepDelta\n ) {\n yield new ChatGenerationChunk({\n text: \"\",\n generationInfo: {\n ...(finishReason ? { finishReason } : {}),\n },\n message: new AIMessageChunk({\n content: \"\",\n ...(usageMetadata ? { usage_metadata: usageMetadata } : {}),\n additional_kwargs: {\n ...(finishReason ? { finishReason } : {}),\n ...(trailingSigBlock\n ? { originalTextContentBlock: trailingSigBlock }\n : {}),\n },\n response_metadata: {\n model_provider: \"google\",\n ...(modelName ? { model_name: modelName } : {}),\n ...(finishReason ? { finishReason } : {}),\n ...synthesized,\n ...(builtInToolSteps.length > 0\n ? { interactionSteps: builtInToolSteps }\n : {}),\n ...(interactionId || interactionStatus\n ? {\n interaction: {\n ...(interactionId ? { id: interactionId } : {}),\n ...(interactionStatus ? { status: interactionStatus } : {}),\n ...(interactionRole ? { role: interactionRole } : {}),\n ...(previousInteractionId\n ? { previous_interaction_id: previousInteractionId }\n : {}),\n },\n }\n : {}),\n },\n }),\n });\n }\n}\n\ntype BlockKey = \"text\" | \"reasoning\" | `tool:${number}`;\n\n/**\n * Converts a stream of Interactions API SSE events (`InteractionSseEvent`) into\n * LangChain `ChatModelStreamEvent`s for `streamChatModelEvents`.\n */\nexport async function* convertInteractionsStream(\n source: AsyncIterable<Gemini.Interactions.InteractionSseEvent>,\n options: { streamUsage?: boolean; model?: string } = {}\n): AsyncGenerator<ChatModelStreamEvent> {\n const shouldStreamUsage = options.streamUsage ?? true;\n const blockAccumulators = new Map<\n number,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n Record<string, any>\n >();\n const blockKeyToIndex = new Map<BlockKey, number>();\n let nextBlockIndex = 0;\n let messageStarted = false;\n let usageSnapshot: UsageMetadata | undefined;\n const finishReason: FinishReason = \"stop\";\n let pendingThoughtSignature: string | undefined;\n let pendingFunctionCallSignature: string | undefined;\n let nextToolIdx = 0;\n\n const stepStates = new Map<\n number,\n {\n hasThoughtSummary?: boolean;\n toolIdx?: number;\n toolId?: string;\n toolName?: string;\n textIndex?: number;\n }\n >();\n const textSegments: Array<{\n text: string;\n annotations?: Gemini.Interactions.Annotation[];\n }> = [];\n const builtInToolSteps: Gemini.Interactions.Step[] = [];\n\n const getOrCreateBlockIndex = (\n key: BlockKey,\n initial: Record<string, unknown>\n ): { index: number; isNew: boolean } => {\n const existing = blockKeyToIndex.get(key);\n if (existing !== undefined) {\n return { index: existing, isNew: false };\n }\n const index = nextBlockIndex++;\n blockKeyToIndex.set(key, index);\n blockAccumulators.set(index, { ...initial });\n return { index, isNew: true };\n };\n\n const ensureMessageStarted = (): ChatModelStreamEvent | undefined => {\n if (!messageStarted) {\n messageStarted = true;\n return { event: \"message-start\" as const };\n }\n return undefined;\n };\n\n for await (const event of source) {\n const startEv = ensureMessageStarted();\n if (startEv) yield startEv;\n\n if (\n event.event_type === \"step.start\" ||\n event.event_type === \"content.start\"\n ) {\n const rawStep = event.step ?? event.content;\n if (rawStep) {\n const step = normalizeInteractionStep(rawStep);\n if (step.type === \"function_call\") {\n stepStates.set(event.index, {\n toolIdx: nextToolIdx++,\n toolId: step.id,\n toolName: step.name,\n });\n } else {\n stepStates.set(event.index, {});\n }\n }\n continue;\n }\n\n if (\n event.event_type === \"step.delta\" ||\n event.event_type === \"content.delta\"\n ) {\n if (shouldStreamUsage && event.metadata?.total_usage) {\n usageSnapshot = convertInteractionsUsageToUsageMetadata(\n event.metadata.total_usage\n );\n if (usageSnapshot) {\n yield { event: \"usage\" as const, usage: usageSnapshot };\n }\n }\n\n const delta = event.delta;\n if (!delta) continue;\n\n let state = stepStates.get(event.index);\n if (!state) {\n state = {};\n stepStates.set(event.index, state);\n }\n\n if (delta.type === \"text\") {\n if (state.textIndex === undefined) {\n state.textIndex = textSegments.length;\n textSegments.push({ text: \"\", annotations: [] });\n }\n textSegments[state.textIndex].text += delta.text;\n\n const key: BlockKey = \"text\";\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"text\",\n text: \"\",\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: { type: \"text\", text: \"\" } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.text = (acc.text ?? \"\") + delta.text;\n if (pendingThoughtSignature) {\n acc.thoughtSignature = pendingThoughtSignature;\n pendingThoughtSignature = undefined;\n }\n pendingFunctionCallSignature = undefined;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: { type: \"text-delta\" as const, text: delta.text },\n };\n } else if (\n delta.type === \"text_annotation_delta\" ||\n delta.type === \"text_annotation\"\n ) {\n if (state.textIndex === undefined) {\n state.textIndex = textSegments.length;\n textSegments.push({ text: \"\", annotations: [] });\n }\n const seg = textSegments[state.textIndex];\n seg.annotations = [\n ...(seg.annotations ?? []),\n ...(delta.annotations ?? []),\n ];\n } else if (delta.type === \"thought_summary\") {\n state.hasThoughtSummary = true;\n const summaryText =\n delta.content?.type === \"text\" ? delta.content.text : \"\";\n if (summaryText) {\n const key: BlockKey = \"reasoning\";\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"reasoning\",\n reasoning: \"\",\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: { type: \"reasoning\", reasoning: \"\" } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.reasoning = (acc.reasoning ?? \"\") + summaryText;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: { type: \"reasoning-delta\" as const, reasoning: summaryText },\n };\n }\n } else if (delta.type === \"thought_signature\") {\n if (delta.signature) {\n pendingFunctionCallSignature = delta.signature;\n if (state.hasThoughtSummary) {\n const existingIdx = blockKeyToIndex.get(\"reasoning\");\n if (existingIdx !== undefined) {\n const acc = blockAccumulators.get(existingIdx)!;\n acc.thoughtSignature = delta.signature;\n }\n } else {\n pendingThoughtSignature = delta.signature;\n }\n }\n } else if (\n delta.type === \"arguments_delta\" ||\n delta.type === \"function_call\"\n ) {\n if (state.toolIdx === undefined) {\n state.toolIdx = nextToolIdx++;\n }\n const toolIdx = state.toolIdx;\n const key: BlockKey = `tool:${toolIdx}`;\n const candidateId =\n delta.id ||\n state.toolId ||\n `lc-tool-call-${uuidv4().replace(/-/g, \"\")}`;\n const candidateName = delta.name || state.toolName || \"\";\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"tool_call_chunk\",\n id: candidateId,\n name: candidateName,\n args: \"\",\n index: toolIdx,\n });\n const acc = blockAccumulators.get(index)!;\n if (delta.id) acc.id = delta.id;\n if (delta.name) acc.name = delta.name;\n const id = acc.id as string;\n\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: {\n type: \"tool_call_chunk\",\n id,\n name: acc.name,\n args: \"\",\n index: toolIdx,\n } as ContentBlock,\n };\n }\n\n const argsDelta =\n typeof delta.arguments === \"string\"\n ? delta.arguments\n : JSON.stringify(delta.arguments ?? {});\n acc.args =\n typeof delta.arguments === \"string\"\n ? (acc.args ?? \"\") + argsDelta\n : argsDelta;\n\n const fcSig = pendingThoughtSignature ?? pendingFunctionCallSignature;\n if (fcSig) {\n acc.thoughtSignature = fcSig;\n pendingThoughtSignature = undefined;\n pendingFunctionCallSignature = undefined;\n }\n\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: {\n type: \"block-delta\" as const,\n fields: {\n type: \"tool_call_chunk\",\n id,\n name: acc.name,\n args: argsDelta,\n },\n },\n };\n } else if (\n delta.type === \"google_search_call\" ||\n delta.type === \"google_search_result\" ||\n delta.type === \"google_maps_call\" ||\n delta.type === \"google_maps_result\" ||\n delta.type === \"file_search_call\" ||\n delta.type === \"file_search_result\" ||\n delta.type === \"url_context_call\" ||\n delta.type === \"url_context_result\"\n ) {\n builtInToolSteps.push(delta as unknown as Gemini.Interactions.Step);\n }\n continue;\n }\n\n if (\n event.event_type === \"interaction.completed\" ||\n event.event_type === \"interaction.complete\"\n ) {\n if (shouldStreamUsage && event.interaction?.usage) {\n usageSnapshot = convertInteractionsUsageToUsageMetadata(\n event.interaction.usage\n );\n if (usageSnapshot) {\n yield { event: \"usage\" as const, usage: usageSnapshot };\n }\n }\n continue;\n }\n\n if (event.event_type === \"error\") {\n throw new GoogleError(\n `Google Interactions API stream error (${event.error?.code ?? \"unknown\"}): ${event.error?.message ?? \"Unknown error\"}`\n );\n }\n }\n\n for (const [index, acc] of blockAccumulators) {\n const finalized = finalizeContentBlock(acc as ContentBlock);\n yield {\n event: \"content-block-finish\" as const,\n index,\n content: acc.thoughtSignature\n ? ({\n ...finalized,\n thoughtSignature: acc.thoughtSignature,\n } as ContentBlock)\n : finalized,\n };\n }\n\n const synthesized = synthesizeMetadataFromInteractions({\n textSegments,\n builtInToolSteps,\n });\n\n yield {\n event: \"message-finish\" as const,\n reason: finishReason,\n ...(usageSnapshot ? { usage: usageSnapshot } : {}),\n responseMetadata: {\n model_provider: \"google\",\n ...synthesized,\n },\n };\n}\n"],"mappings":"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"}