@langchain/core 1.1.40-dev-1777426124745 → 1.1.40-dev-1777576880340

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 (37) hide show
  1. package/dist/callbacks/base.cjs +5 -0
  2. package/dist/callbacks/base.cjs.map +1 -1
  3. package/dist/callbacks/base.d.cts +20 -1
  4. package/dist/callbacks/base.d.cts.map +1 -1
  5. package/dist/callbacks/base.d.ts +20 -1
  6. package/dist/callbacks/base.d.ts.map +1 -1
  7. package/dist/callbacks/base.js +5 -1
  8. package/dist/callbacks/base.js.map +1 -1
  9. package/dist/callbacks/manager.cjs +10 -0
  10. package/dist/callbacks/manager.cjs.map +1 -1
  11. package/dist/callbacks/manager.d.cts +2 -0
  12. package/dist/callbacks/manager.d.cts.map +1 -1
  13. package/dist/callbacks/manager.d.ts +2 -0
  14. package/dist/callbacks/manager.d.ts.map +1 -1
  15. package/dist/callbacks/manager.js +10 -0
  16. package/dist/callbacks/manager.js.map +1 -1
  17. package/dist/language_models/base.cjs +1 -1
  18. package/dist/language_models/base.js +1 -1
  19. package/dist/language_models/chat_models.cjs +43 -1
  20. package/dist/language_models/chat_models.cjs.map +1 -1
  21. package/dist/language_models/chat_models.d.cts +1 -1
  22. package/dist/language_models/chat_models.d.cts.map +1 -1
  23. package/dist/language_models/chat_models.d.ts +1 -1
  24. package/dist/language_models/chat_models.d.ts.map +1 -1
  25. package/dist/language_models/chat_models.js +44 -2
  26. package/dist/language_models/chat_models.js.map +1 -1
  27. package/dist/language_models/event.cjs.map +1 -1
  28. package/dist/language_models/event.d.cts +5 -13
  29. package/dist/language_models/event.d.cts.map +1 -1
  30. package/dist/language_models/event.d.ts +5 -13
  31. package/dist/language_models/event.d.ts.map +1 -1
  32. package/dist/language_models/event.js.map +1 -1
  33. package/dist/language_models/stream.cjs +2 -2
  34. package/dist/language_models/stream.cjs.map +1 -1
  35. package/dist/language_models/stream.js +2 -2
  36. package/dist/language_models/stream.js.map +1 -1
  37. package/package.json +1 -1
@@ -5,13 +5,13 @@ import { ChatGenerationChunk, ChatResult, Generation, LLMResult } from "../outpu
5
5
  import { BaseCache } from "../caches/index.cjs";
6
6
  import { SerializableSchema } from "../utils/standard_schema.cjs";
7
7
  import { ZodV3Like, ZodV4Like } from "../utils/types/zod.cjs";
8
+ import { ChatModelStreamEvent } from "./event.cjs";
8
9
  import { CallbackManagerForLLMRun, Callbacks } from "../callbacks/manager.cjs";
9
10
  import { RunnableConfig } from "../runnables/types.cjs";
10
11
  import { Runnable, RunnableToolLike } from "../runnables/base.cjs";
11
12
  import { BasePromptValueInterface } from "../prompt_values.cjs";
12
13
  import { BaseLanguageModel, BaseLanguageModelCallOptions, BaseLanguageModelInput, BaseLanguageModelParams, StructuredOutputMethodOptions, ToolDefinition } from "./base.cjs";
13
14
  import { StructuredToolInterface, StructuredToolParams } from "../tools/types.cjs";
14
- import { ChatModelStreamEvent } from "./event.cjs";
15
15
  import { ChatModelStream } from "./stream.cjs";
16
16
 
17
17
  //#region src/language_models/chat_models.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.d.cts","names":[],"sources":["../../src/language_models/chat_models.ts"],"mappings":"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"}
1
+ {"version":3,"file":"chat_models.d.cts","names":[],"sources":["../../src/language_models/chat_models.ts"],"mappings":"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"}
@@ -5,13 +5,13 @@ import { ChatGenerationChunk, ChatResult, Generation, LLMResult } from "../outpu
5
5
  import { BaseCache } from "../caches/index.js";
6
6
  import { SerializableSchema } from "../utils/standard_schema.js";
7
7
  import { ZodV3Like, ZodV4Like } from "../utils/types/zod.js";
8
+ import { ChatModelStreamEvent } from "./event.js";
8
9
  import { CallbackManagerForLLMRun, Callbacks } from "../callbacks/manager.js";
9
10
  import { RunnableConfig } from "../runnables/types.js";
10
11
  import { Runnable, RunnableToolLike } from "../runnables/base.js";
11
12
  import { BasePromptValueInterface } from "../prompt_values.js";
12
13
  import { BaseLanguageModel, BaseLanguageModelCallOptions, BaseLanguageModelInput, BaseLanguageModelParams, StructuredOutputMethodOptions, ToolDefinition } from "./base.js";
13
14
  import { StructuredToolInterface, StructuredToolParams } from "../tools/types.js";
14
- import { ChatModelStreamEvent } from "./event.js";
15
15
  import { ChatModelStream } from "./stream.js";
16
16
 
17
17
  //#region src/language_models/chat_models.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.d.ts","names":[],"sources":["../../src/language_models/chat_models.ts"],"mappings":"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"}
1
+ {"version":3,"file":"chat_models.d.ts","names":[],"sources":["../../src/language_models/chat_models.ts"],"mappings":";;;;;;;;;;;;;;;;;KA2EY,UAAA,YAAsB,MAAA;;;;KAKtB,mBAAA;EACV,MAAA;EACA,KAAA;AAAA,IAEE,MAAA;;;;KAMQ,aAAA;EACV,MAAA;EACA,KAAA;AAAA,IAEE,MAAA;;;;KAKQ,mBAAA,GAAsB,uBAAA;EAfxB;;AAMV;;;;;;;EAmBE,gBAAA;EAfQ;AAKV;;;;;;;;;;AAgCA;;;;EANE,aAAA,GAAgB,oBAAA;AAAA;;;;KAMN,wBAAA,GAA2B,4BAAA;EAevB;;;;;AA+ChB;;;;;;;;;EA/CE,WAAA,GAAc,UAAA;EAqDJ;;;;AAIZ;;;;;;;;;;;EAzCE,aAAA,GAAgB,oBAAA;AAAA;AAAA,KA+BN,eAAA;EACV,WAAA;EACA,aAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,OAAA,GAAU,KAAA;EACV,cAAA;AAAA;AAAA,KAGU,cAAA,GACR,uBAAA,GAEA,MAAA,gBACA,cAAA,GACA,gBAAA,GACA,oBAAA;;;;;uBAMkB,aAAA,qBACA,wBAAA,GAA2B,wBAAA,4BAErB,gBAAA,GAAmB,cAAA,UACrC,iBAAA,CAAkB,iBAAA,EAAmB,WAAA;EAErC,iBAAA,EAAmB,IAAA,CACzB,WAAA,EACA,OAAA,OAAc,cAAA;EAIhB,YAAA;EAEA,gBAAA;EAEA,aAAA,GAAgB,oBAAA;EAAA,IAEZ,QAAA,CAAA;EAIJ,WAAA,CAAY,MAAA,EAAQ,mBAAA;EAYpB,iBAAA,CAAA,CAAA,GACK,UAAA,EAAY,SAAA,kBACd,SAAA;EAAA,UAEO,4CAAA,CACR,OAAA,GAAU,OAAA,CAAQ,WAAA,KAChB,cAAA;EAAA;;;;;;;;EAgBJ,SAAA,CAAA,CACE,KAAA,EAAO,cAAA,IACP,MAAA,GAAS,OAAA,CAAQ,WAAA,IAChB,QAAA,CAAS,sBAAA,EAAwB,iBAAA,EAAmB,WAAA;EAUnC;;;;;;EAFd,MAAA,CACJ,KAAA,EAAO,sBAAA,EACP,OAAA,GAAU,OAAA,CAAQ,WAAA,IACjB,OAAA,CAAQ,iBAAA;EAaJ,qBAAA,CACL,SAAA,EAAW,WAAA,IACX,QAAA,6BACA,WAAA,GAAc,wBAAA,GACb,cAAA,CAAe,mBAAA;EA+BN;;;;;;;;;;;;;;;;;;;;;;;;;;EADL,sBAAA,CACL,QAAA,EAAU,WAAA,IACV,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,cAAA,CAAe,oBAAA;EAocT;;;;;;;;;;;;;;;;;;;;;;;;EAtaT,QAAA,CACE,KAAA,EAAO,sBAAA,EACP,OAAA,GAAU,OAAA,CAAQ,WAAA,IACjB,eAAA;EAWI,eAAA,CACL,KAAA,EAAO,sBAAA,EACP,OAAA,GAAU,OAAA,CAAQ,WAAA,IACjB,cAAA,CAAe,iBAAA;EA4GlB,WAAA,CAAY,OAAA,8BAAqC,eAAA;EAmjBb;;;;;EAliBpC,uBAAA,CAAwB,OAAA,8BAAqC,eAAA;EAyiBlD;EAjiBL,iBAAA,CACJ,QAAA,EAAU,eAAA,MACV,aAAA,6BACA,cAAA,EAAgB,cAAA,EAChB,kBAAA,GAAqB,wBAAA,KACpB,OAAA,CAAQ,SAAA;EAmQL,eAAA,CAAA;IACJ,QAAA;IACA,KAAA;IACA,YAAA;IACA,aAAA;IACA;EAAA;IAEA,QAAA,EAAU,eAAA;IACV,KAAA,EAAO,SAAA,CAAU,UAAA;IACjB,YAAA;IAEA,aAAA;IACA,cAAA,EAAgB,cAAA;EAAA,IACd,OAAA,CACF,SAAA;IACE,oBAAA;IACA,kBAAA,GAAqB,wBAAA;EAAA;EAqRW;;;;;;;EAjI9B,QAAA,CACJ,QAAA,EAAU,eAAA,MACV,OAAA,cAAqB,OAAA,CAAQ,WAAA,GAC7B,SAAA,GAAY,SAAA,GACX,OAAA,CAAQ,SAAA;EAwIC;;;EAtEZ,gBAAA,CAAiB,QAAA;EAIjB,UAAA,CAAA;EAAA,SAIS,QAAA,CAAA;EAqEO;;;;;;;EA5DV,cAAA,CACJ,YAAA,EAAc,wBAAA,IACd,OAAA,cAAqB,OAAA,CAAQ,WAAA,GAC7B,SAAA,GAAY,SAAA,GACX,OAAA,CAAQ,SAAA;EAAA,SAOF,SAAA,CACP,QAAA,EAAU,WAAA,IACV,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,OAAA,CAAQ,UAAA;EAEX,oBAAA,mBAEoB,MAAA,gBAAsB,MAAA,cAAA,CAExC,YAAA,EAAc,kBAAA,CAAmB,SAAA,GACjC,MAAA,GAAS,6BAAA,UACR,QAAA,CAAS,sBAAA,EAAwB,SAAA;EAEpC,oBAAA,mBAEoB,MAAA,gBAAsB,MAAA,cAAA,CAExC,YAAA,EAAc,kBAAA,CAAmB,SAAA,GACjC,MAAA,GAAS,6BAAA,SACR,QAAA,CAAS,sBAAA;IAA0B,GAAA,EAAK,WAAA;IAAa,MAAA,EAAQ,SAAA;EAAA;EAEhE,oBAAA,mBAEoB,MAAA,gBAAsB,MAAA,cAAA,CAExC,YAAA,EACI,SAAA,CAAU,SAAA,IAEV,MAAA,eACJ,MAAA,GAAS,6BAAA,UACR,QAAA,CAAS,sBAAA,EAAwB,SAAA;EAEpC,oBAAA,mBAEoB,MAAA,gBAAsB,MAAA,cAAA,CAExC,YAAA,EACI,SAAA,CAAU,SAAA,IAEV,MAAA,eACJ,MAAA,GAAS,6BAAA,SACR,QAAA,CAAS,sBAAA;IAA0B,GAAA,EAAK,WAAA;IAAa,MAAA,EAAQ,SAAA;EAAA;EAEhE,oBAAA,mBAEoB,MAAA,gBAAsB,MAAA,cAAA,CAExC,YAAA,EACI,SAAA,CAAU,SAAA,IAEV,MAAA,eACJ,MAAA,GAAS,6BAAA,UACR,QAAA,CAAS,sBAAA,EAAwB,SAAA;EAEpC,oBAAA,mBAEoB,MAAA,gBAAsB,MAAA,cAAA,CAExC,YAAA,EACI,SAAA,CAAU,SAAA,IAEV,MAAA,eACJ,MAAA,GAAS,6BAAA,SACR,QAAA,CAAS,sBAAA;IAA0B,GAAA,EAAK,WAAA;IAAa,MAAA,EAAQ,SAAA;EAAA;AAAA;;;;;uBAqG5C,eAAA,qBACA,wBAAA,GAA2B,wBAAA,UACvC,aAAA,CAAc,WAAA;EAAA,SACb,KAAA,CACP,QAAA,EAAU,WAAA,IACV,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,OAAA;EAEG,SAAA,CACJ,QAAA,EAAU,WAAA,IACV,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,OAAA,CAAQ,UAAA;AAAA"}
@@ -5,7 +5,7 @@ import { isBaseMessage } from "../messages/base.js";
5
5
  import { AIMessage, AIMessageChunk, isAIMessage, isAIMessageChunk } from "../messages/ai.js";
6
6
  import { coerceMessageLikeToMessage } from "../messages/utils.js";
7
7
  import { getEnvironmentVariable } from "../utils/env.js";
8
- import { callbackHandlerPrefersStreaming } from "../callbacks/base.js";
8
+ import { callbackHandlerPrefersChatModelStreamEvents, callbackHandlerPrefersStreaming } from "../callbacks/base.js";
9
9
  import { CallbackManager } from "../callbacks/manager.js";
10
10
  import { concat } from "../utils/stream.js";
11
11
  import { RUN_KEY } from "../outputs.js";
@@ -235,7 +235,49 @@ var BaseChatModel = class BaseChatModel extends BaseLanguageModel {
235
235
  const outputVersion = parsedOptions.outputVersion ?? this.outputVersion;
236
236
  const generations = [];
237
237
  const llmOutputs = [];
238
- if (!!runManagers?.[0].handlers.find(callbackHandlerPrefersStreaming) && !this.disableStreaming && baseMessages.length === 1 && this._streamResponseChunks !== BaseChatModel.prototype._streamResponseChunks) try {
238
+ const hasChatModelStreamEventHandler = !!runManagers?.[0].handlers.find(callbackHandlerPrefersChatModelStreamEvents);
239
+ const hasStreamingHandler = !!runManagers?.[0].handlers.find(callbackHandlerPrefersStreaming);
240
+ if (hasChatModelStreamEventHandler && !this.disableStreaming && baseMessages.length === 1 && (this._streamChatModelEvents !== BaseChatModel.prototype._streamChatModelEvents || this._streamResponseChunks !== BaseChatModel.prototype._streamResponseChunks)) try {
241
+ let sawEvent = false;
242
+ const runManager = runManagers?.[0];
243
+ const events = this._streamChatModelEvents(baseMessages[0], parsedOptions);
244
+ const message = await new ChatModelStream({ async *[Symbol.asyncIterator]() {
245
+ for await (const event of events) {
246
+ parsedOptions.signal?.throwIfAborted();
247
+ sawEvent = true;
248
+ const streamEvent = event.event === "message-start" && event.id == null && runManager?.runId != null ? {
249
+ ...event,
250
+ id: `run-${runManager.runId}`
251
+ } : event;
252
+ await runManager?.handleChatModelStreamEvent(streamEvent);
253
+ yield streamEvent;
254
+ }
255
+ } });
256
+ parsedOptions.signal?.throwIfAborted();
257
+ if (!sawEvent) throw new Error("Received empty response from chat model call.");
258
+ if (message.id == null) {
259
+ const runId = runManagers?.at(0)?.runId;
260
+ if (runId != null) message._updateId(`run-${runId}`);
261
+ }
262
+ const generation = {
263
+ text: message.text,
264
+ message
265
+ };
266
+ generations.push([generation]);
267
+ const llmOutput = message.usage_metadata !== void 0 ? { tokenUsage: {
268
+ promptTokens: message.usage_metadata.input_tokens,
269
+ completionTokens: message.usage_metadata.output_tokens,
270
+ totalTokens: message.usage_metadata.total_tokens
271
+ } } : void 0;
272
+ await runManagers?.[0].handleLLMEnd({
273
+ generations,
274
+ llmOutput
275
+ });
276
+ } catch (e) {
277
+ await runManagers?.[0].handleLLMError(e);
278
+ throw e;
279
+ }
280
+ else if (hasStreamingHandler && !this.disableStreaming && baseMessages.length === 1 && this._streamResponseChunks !== BaseChatModel.prototype._streamResponseChunks) try {
239
281
  const stream = await this._streamResponseChunks(baseMessages[0], parsedOptions, runManagers?.[0]);
240
282
  let aggregated;
241
283
  let llmOutput;
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.js","names":[],"sources":["../../src/language_models/chat_models.ts"],"sourcesContent":["import type { ZodV3Like, ZodV4Like } from \"../utils/types/zod.js\";\nimport {\n AIMessage,\n type BaseMessage,\n BaseMessageChunk,\n type BaseMessageLike,\n coerceMessageLikeToMessage,\n AIMessageChunk,\n isAIMessageChunk,\n isBaseMessage,\n isAIMessage,\n MessageOutputVersion,\n} from \"../messages/index.js\";\nimport {\n convertToOpenAIImageBlock,\n isURLContentBlock,\n isBase64ContentBlock,\n} from \"../messages/content/data.js\";\nimport type { BasePromptValueInterface } from \"../prompt_values.js\";\nimport {\n LLMResult,\n RUN_KEY,\n type ChatGeneration,\n ChatGenerationChunk,\n type ChatResult,\n type Generation,\n} from \"../outputs.js\";\nimport {\n BaseLanguageModel,\n type StructuredOutputMethodOptions,\n type ToolDefinition,\n type BaseLanguageModelCallOptions,\n type BaseLanguageModelInput,\n type BaseLanguageModelParams,\n} from \"./base.js\";\nimport {\n CallbackManager,\n type CallbackManagerForLLMRun,\n type Callbacks,\n} from \"../callbacks/manager.js\";\nimport type { RunnableConfig } from \"../runnables/config.js\";\nimport type { BaseCache } from \"../caches/index.js\";\nimport {\n StructuredToolInterface,\n StructuredToolParams,\n} from \"../tools/index.js\";\nimport {\n Runnable,\n RunnableLambda,\n RunnableToolLike,\n} from \"../runnables/base.js\";\nimport { concat } from \"../utils/stream.js\";\nimport {\n getSchemaDescription,\n InteropZodType,\n isInteropZodSchema,\n} from \"../utils/types/zod.js\";\nimport { ModelAbortError } from \"../errors/index.js\";\nimport { callbackHandlerPrefersStreaming } from \"../callbacks/base.js\";\nimport { toJsonSchema } from \"../utils/json_schema.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\nimport { castStandardMessageContent, iife } from \"./utils.js\";\nimport {\n isSerializableSchema,\n type SerializableSchema,\n} from \"../utils/standard_schema.js\";\nimport { assembleStructuredOutputPipeline } from \"./structured_output.js\";\nimport type { ChatModelStreamEvent } from \"./event.js\";\nimport { ChatModelStream } from \"./stream.js\";\nimport { convertChunksToEvents } from \"./compat.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ToolChoice = string | Record<string, any> | \"auto\" | \"any\";\n\n/**\n * Represents a serialized chat model.\n */\nexport type SerializedChatModel = {\n _model: string;\n _type: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n} & Record<string, any>;\n\n// todo?\n/**\n * Represents a serialized large language model.\n */\nexport type SerializedLLM = {\n _model: string;\n _type: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n} & Record<string, any>;\n\n/**\n * Represents the parameters for a base chat model.\n */\nexport type BaseChatModelParams = BaseLanguageModelParams & {\n /**\n * Whether to disable streaming.\n *\n * If streaming is bypassed, then `stream()` will defer to\n * `invoke()`.\n *\n * - If true, will always bypass streaming case.\n * - If false (default), will always use streaming case if available.\n */\n disableStreaming?: boolean;\n /**\n * Version of `AIMessage` output format to store in message content.\n *\n * `AIMessage.contentBlocks` will lazily parse the contents of `content` into a\n * standard format. This flag can be used to additionally store the standard format\n * as the message content, e.g., for serialization purposes.\n *\n * - \"v0\": provider-specific format in content (can lazily parse with `.contentBlocks`)\n * - \"v1\": standardized format in content (consistent with `.contentBlocks`)\n *\n * You can also set `LC_OUTPUT_VERSION` as an environment variable to \"v1\" to\n * enable this by default.\n *\n * @default \"v0\"\n */\n outputVersion?: MessageOutputVersion;\n};\n\n/**\n * Represents the call options for a base chat model.\n */\nexport type BaseChatModelCallOptions = BaseLanguageModelCallOptions & {\n /**\n * Specifies how the chat model should use tools.\n * @default undefined\n *\n * Possible values:\n * - \"auto\": The model may choose to use any of the provided tools, or none.\n * - \"any\": The model must use one of the provided tools.\n * - \"none\": The model must not use any tools.\n * - A string (not \"auto\", \"any\", or \"none\"): The name of a specific tool the model must use.\n * - An object: A custom schema specifying tool choice parameters. Specific to the provider.\n *\n * Note: Not all providers support tool_choice. An error will be thrown\n * if used with an unsupported model.\n */\n tool_choice?: ToolChoice;\n /**\n * Version of `AIMessage` output format to store in message content.\n *\n * `AIMessage.contentBlocks` will lazily parse the contents of `content` into a\n * standard format. This flag can be used to additionally store the standard format\n * as the message content, e.g., for serialization purposes.\n *\n * - \"v0\": provider-specific format in content (can lazily parse with `.contentBlocks`)\n * - \"v1\": standardized format in content (consistent with `.contentBlocks`)\n *\n * You can also set `LC_OUTPUT_VERSION` as an environment variable to \"v1\" to\n * enable this by default.\n *\n * @default \"v0\"\n */\n outputVersion?: MessageOutputVersion;\n};\n\nfunction _formatForTracing(messages: BaseMessage[]): BaseMessage[] {\n const messagesToTrace: BaseMessage[] = [];\n for (const message of messages) {\n let messageToTrace = message;\n if (Array.isArray(message.content)) {\n for (let idx = 0; idx < message.content.length; idx++) {\n const block = message.content[idx];\n if (isURLContentBlock(block) || isBase64ContentBlock(block)) {\n if (messageToTrace === message) {\n // Also shallow-copy content\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n messageToTrace = new (message.constructor as any)({\n ...messageToTrace,\n content: [\n ...message.content.slice(0, idx),\n convertToOpenAIImageBlock(block),\n ...message.content.slice(idx + 1),\n ],\n });\n }\n }\n }\n }\n messagesToTrace.push(messageToTrace);\n }\n return messagesToTrace;\n}\n\nexport type LangSmithParams = {\n ls_provider?: string;\n ls_model_name?: string;\n ls_model_type: \"chat\";\n ls_temperature?: number;\n ls_max_tokens?: number;\n ls_stop?: Array<string>;\n ls_integration?: string;\n};\n\nexport type BindToolsInput =\n | StructuredToolInterface\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>\n | ToolDefinition\n | RunnableToolLike\n | StructuredToolParams;\n\n/**\n * Base class for chat models. It extends the BaseLanguageModel class and\n * provides methods for generating chat based on input messages.\n */\nexport abstract class BaseChatModel<\n CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions,\n // TODO: Fix the parameter order on the next minor version.\n OutputMessageType extends BaseMessageChunk = AIMessageChunk,\n> extends BaseLanguageModel<OutputMessageType, CallOptions> {\n // Backwards compatibility since fields have been moved to RunnableConfig\n declare ParsedCallOptions: Omit<\n CallOptions,\n Exclude<keyof RunnableConfig, \"signal\" | \"timeout\" | \"maxConcurrency\">\n >;\n\n // Only ever instantiated in main LangChain\n lc_namespace = [\"langchain\", \"chat_models\", this._llmType()];\n\n disableStreaming = false;\n\n outputVersion?: MessageOutputVersion;\n\n get callKeys(): string[] {\n return [...super.callKeys, \"outputVersion\"];\n }\n\n constructor(fields: BaseChatModelParams) {\n super(fields);\n this.outputVersion = iife(() => {\n const outputVersion =\n fields.outputVersion ?? getEnvironmentVariable(\"LC_OUTPUT_VERSION\");\n if (outputVersion && [\"v0\", \"v1\"].includes(outputVersion)) {\n return outputVersion as \"v0\" | \"v1\";\n }\n return \"v0\";\n });\n }\n\n _combineLLMOutput?(\n ...llmOutputs: LLMResult[\"llmOutput\"][]\n ): LLMResult[\"llmOutput\"];\n\n protected _separateRunnableConfigFromCallOptionsCompat(\n options?: Partial<CallOptions>\n ): [RunnableConfig, this[\"ParsedCallOptions\"]] {\n // For backwards compat, keep `signal` in both runnableConfig and callOptions\n const [runnableConfig, callOptions] =\n super._separateRunnableConfigFromCallOptions(options);\n (callOptions as this[\"ParsedCallOptions\"]).signal = runnableConfig.signal;\n return [runnableConfig, callOptions as this[\"ParsedCallOptions\"]];\n }\n\n /**\n * Bind tool-like objects to this chat model.\n *\n * @param tools A list of tool definitions to bind to this chat model.\n * Can be a structured tool, an OpenAI formatted tool, or an object\n * matching the provider's specific tool schema.\n * @param kwargs Any additional parameters to bind.\n */\n bindTools?(\n tools: BindToolsInput[],\n kwargs?: Partial<CallOptions>\n ): Runnable<BaseLanguageModelInput, OutputMessageType, CallOptions>;\n\n /**\n * Invokes the chat model with a single input.\n * @param input The input for the language model.\n * @param options The call options.\n * @returns A Promise that resolves to a BaseMessageChunk.\n */\n async invoke(\n input: BaseLanguageModelInput,\n options?: Partial<CallOptions>\n ): Promise<OutputMessageType> {\n const promptValue = BaseChatModel._convertInputToPromptValue(input);\n const result = await this.generatePrompt(\n [promptValue],\n options,\n options?.callbacks\n );\n const chatGeneration = result.generations[0][0] as ChatGeneration;\n // TODO: Remove cast after figuring out inheritance\n return chatGeneration.message as OutputMessageType;\n }\n\n // oxlint-disable-next-line require-yield\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n throw new Error(\"Not implemented.\");\n }\n\n /**\n * Stream chat model events using the new content-block-centric protocol.\n *\n * Override this method to provide native event streaming from the provider SDK.\n * The default implementation bridges from `_streamResponseChunks` by\n * synthesizing lifecycle events from `ChatGenerationChunk` objects.\n *\n * ## Event lifecycle\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index, contentBlock)\n * -> ContentBlockDelta(index, delta) ...\n * -> ContentBlockFinish(index, contentBlock)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * Content blocks may interleave (e.g., parallel tool calls). The only\n * invariant: a block's start precedes its deltas, and its deltas precede\n * its finish.\n *\n * @param messages - The input messages.\n * @param options - Parsed call options.\n * @param runManager - Optional callback manager for the run.\n * @returns An async generator of {@link ChatModelStreamEvent}.\n */\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n // Default: bridge from legacy _streamResponseChunks\n const chunks = this._streamResponseChunks(messages, options, runManager);\n yield* convertChunksToEvents(chunks, { signal: options.signal });\n }\n\n /**\n * Create a {@link ChatModelStream} for the given input.\n *\n * Returns a stream object that is both `AsyncIterable<ChatModelStreamEvent>`\n * and `PromiseLike<AIMessage>`, with typed sub-stream accessors for\n * `.text`, `.toolCalls`, `.reasoning`, and `.usage`.\n *\n * @param input - The input messages.\n * @param options - Optional call options.\n * @returns A {@link ChatModelStream}.\n *\n * @example\n * ```ts\n * const stream = model.streamV2([{ role: \"user\", content: \"Hello\" }]);\n *\n * // Stream text\n * for await (const token of stream.text) {\n * process.stdout.write(token);\n * }\n *\n * // Or await the full message\n * const message = await stream;\n * ```\n */\n streamV2(\n input: BaseLanguageModelInput,\n options?: Partial<CallOptions>\n ): ChatModelStream {\n const prompt = BaseChatModel._convertInputToPromptValue(input);\n const messages = prompt.toChatMessages();\n const [, callOptions] =\n this._separateRunnableConfigFromCallOptionsCompat(options);\n\n const generator = this._streamChatModelEvents(messages, callOptions);\n\n return new ChatModelStream(generator);\n }\n\n async *_streamIterator(\n input: BaseLanguageModelInput,\n options?: Partial<CallOptions>\n ): AsyncGenerator<OutputMessageType> {\n // Subclass check required to avoid double callbacks with default implementation\n if (\n this._streamResponseChunks ===\n BaseChatModel.prototype._streamResponseChunks ||\n this.disableStreaming\n ) {\n yield this.invoke(input, options);\n } else {\n const prompt = BaseChatModel._convertInputToPromptValue(input);\n const messages = prompt.toChatMessages();\n const [runnableConfig, callOptions] =\n this._separateRunnableConfigFromCallOptionsCompat(options);\n\n const inheritableMetadata = {\n ...runnableConfig.metadata,\n ...this.getLsParamsWithDefaults(callOptions),\n };\n const callbackManager_ = await CallbackManager.configure(\n runnableConfig.callbacks,\n this.callbacks,\n runnableConfig.tags,\n this.tags,\n inheritableMetadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const extra = {\n options: callOptions,\n invocation_params: this?.invocationParams(callOptions),\n batch_size: 1,\n };\n const outputVersion = callOptions.outputVersion ?? this.outputVersion;\n const runManagers = await callbackManager_?.handleChatModelStart(\n this.toJSON(),\n [_formatForTracing(messages)],\n runnableConfig.runId,\n undefined,\n extra,\n undefined,\n undefined,\n runnableConfig.runName\n );\n let generationChunk: ChatGenerationChunk | undefined;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n let llmOutput: Record<string, any> | undefined;\n try {\n for await (const chunk of this._streamResponseChunks(\n messages,\n callOptions,\n runManagers?.[0]\n )) {\n callOptions.signal?.throwIfAborted();\n if (chunk.message.id == null) {\n const runId = runManagers?.at(0)?.runId;\n if (runId != null) chunk.message._updateId(`run-${runId}`);\n }\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n if (outputVersion === \"v1\") {\n yield castStandardMessageContent(\n chunk.message\n ) as OutputMessageType;\n } else {\n yield chunk.message as OutputMessageType;\n }\n if (!generationChunk) {\n generationChunk = chunk;\n } else {\n generationChunk = generationChunk.concat(chunk);\n }\n if (\n isAIMessageChunk(chunk.message) &&\n chunk.message.usage_metadata !== undefined\n ) {\n llmOutput = {\n tokenUsage: {\n promptTokens: chunk.message.usage_metadata.input_tokens,\n completionTokens: chunk.message.usage_metadata.output_tokens,\n totalTokens: chunk.message.usage_metadata.total_tokens,\n },\n };\n }\n }\n // Throw error if stream ended due to abort (provider returned early)\n callOptions.signal?.throwIfAborted();\n } catch (err) {\n await Promise.all(\n (runManagers ?? []).map((runManager) =>\n runManager?.handleLLMError(err)\n )\n );\n throw err;\n }\n await Promise.all(\n (runManagers ?? []).map((runManager) =>\n runManager?.handleLLMEnd({\n // TODO: Remove cast after figuring out inheritance\n generations: [[generationChunk as ChatGeneration]],\n llmOutput,\n })\n )\n );\n }\n }\n\n getLsParams(options: this[\"ParsedCallOptions\"]): LangSmithParams {\n const providerName = this.getName().startsWith(\"Chat\")\n ? this.getName().replace(\"Chat\", \"\")\n : this.getName();\n\n return {\n ls_model_type: \"chat\",\n ls_stop: options.stop,\n ls_provider: providerName,\n };\n }\n\n /**\n * Wraps getLsParams() and always appends ls_integration.\n * This ensures the integration tag is present even when\n * partner packages fully override getLsParams().\n */\n getLsParamsWithDefaults(options: this[\"ParsedCallOptions\"]): LangSmithParams {\n return {\n ...this.getLsParams(options),\n ls_integration: \"langchain_chat_model\",\n };\n }\n\n /** @ignore */\n async _generateUncached(\n messages: BaseMessageLike[][],\n parsedOptions: this[\"ParsedCallOptions\"],\n handledOptions: RunnableConfig,\n startedRunManagers?: CallbackManagerForLLMRun[]\n ): Promise<LLMResult> {\n const baseMessages = messages.map((messageList) =>\n messageList.map(coerceMessageLikeToMessage)\n );\n\n let runManagers: CallbackManagerForLLMRun[] | undefined;\n if (\n startedRunManagers !== undefined &&\n startedRunManagers.length === baseMessages.length\n ) {\n runManagers = startedRunManagers;\n } else {\n const inheritableMetadata = {\n ...handledOptions.metadata,\n ...this.getLsParamsWithDefaults(parsedOptions),\n };\n // create callback manager and start run\n const callbackManager_ = await CallbackManager.configure(\n handledOptions.callbacks,\n this.callbacks,\n handledOptions.tags,\n this.tags,\n inheritableMetadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const extra = {\n options: parsedOptions,\n invocation_params: this?.invocationParams(parsedOptions),\n batch_size: 1,\n };\n runManagers = await callbackManager_?.handleChatModelStart(\n this.toJSON(),\n baseMessages.map(_formatForTracing),\n handledOptions.runId,\n undefined,\n extra,\n undefined,\n undefined,\n handledOptions.runName\n );\n }\n const outputVersion = parsedOptions.outputVersion ?? this.outputVersion;\n const generations: ChatGeneration[][] = [];\n const llmOutputs: LLMResult[\"llmOutput\"][] = [];\n // Even if stream is not explicitly called, check if model is implicitly\n // called from streamEvents() or streamLog() to get all streamed events.\n // Bail out if _streamResponseChunks not overridden\n const hasStreamingHandler = !!runManagers?.[0].handlers.find(\n callbackHandlerPrefersStreaming\n );\n if (\n hasStreamingHandler &&\n !this.disableStreaming &&\n baseMessages.length === 1 &&\n this._streamResponseChunks !==\n BaseChatModel.prototype._streamResponseChunks\n ) {\n try {\n const stream = await this._streamResponseChunks(\n baseMessages[0],\n parsedOptions,\n runManagers?.[0]\n );\n let aggregated: ChatGenerationChunk | undefined;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n let llmOutput: Record<string, any> | undefined;\n for await (const chunk of stream) {\n // Check for abort signal - throw ModelAbortError with partial output\n if (parsedOptions.signal?.aborted) {\n const partialMessage = aggregated?.message as\n | AIMessageChunk\n | undefined;\n throw new ModelAbortError(\n \"Model invocation was aborted.\",\n partialMessage\n );\n }\n if (chunk.message.id == null) {\n const runId = runManagers?.at(0)?.runId;\n if (runId != null) chunk.message._updateId(`run-${runId}`);\n }\n if (aggregated === undefined) {\n aggregated = chunk;\n } else {\n aggregated = concat(aggregated, chunk);\n }\n if (\n isAIMessageChunk(chunk.message) &&\n chunk.message.usage_metadata !== undefined\n ) {\n llmOutput = {\n tokenUsage: {\n promptTokens: chunk.message.usage_metadata.input_tokens,\n completionTokens: chunk.message.usage_metadata.output_tokens,\n totalTokens: chunk.message.usage_metadata.total_tokens,\n },\n };\n }\n }\n // Check if stream ended due to abort (provider returned early)\n if (parsedOptions.signal?.aborted) {\n const partialMessage = aggregated?.message as\n | AIMessageChunk\n | undefined;\n throw new ModelAbortError(\n \"Model invocation was aborted.\",\n partialMessage\n );\n }\n if (aggregated === undefined) {\n throw new Error(\"Received empty response from chat model call.\");\n }\n generations.push([aggregated]);\n await runManagers?.[0].handleLLMEnd({\n generations,\n llmOutput,\n });\n } catch (e) {\n await runManagers?.[0].handleLLMError(e);\n throw e;\n }\n } else {\n // generate results\n const results = await Promise.allSettled(\n baseMessages.map(async (messageList, i) => {\n const generateResults = await this._generate(\n messageList,\n { ...parsedOptions, promptIndex: i },\n runManagers?.[i]\n );\n if (outputVersion === \"v1\") {\n for (const generation of generateResults.generations) {\n generation.message = castStandardMessageContent(\n generation.message\n );\n }\n }\n return generateResults;\n })\n );\n // handle results\n await Promise.all(\n results.map(async (pResult, i) => {\n if (pResult.status === \"fulfilled\") {\n const result = pResult.value;\n for (const generation of result.generations) {\n if (generation.message.id == null) {\n const runId = runManagers?.at(0)?.runId;\n if (runId != null) generation.message._updateId(`run-${runId}`);\n }\n generation.message.response_metadata = {\n ...generation.generationInfo,\n ...generation.message.response_metadata,\n };\n }\n if (result.generations.length === 1) {\n result.generations[0].message.response_metadata = {\n ...result.llmOutput,\n ...result.generations[0].message.response_metadata,\n };\n }\n generations[i] = result.generations;\n llmOutputs[i] = result.llmOutput;\n return runManagers?.[i]?.handleLLMEnd({\n generations: [result.generations],\n llmOutput: result.llmOutput,\n });\n } else {\n // status === \"rejected\"\n await runManagers?.[i]?.handleLLMError(pResult.reason);\n return Promise.reject(pResult.reason);\n }\n })\n );\n }\n // create combined output\n const output: LLMResult = {\n generations,\n llmOutput: llmOutputs.length\n ? this._combineLLMOutput?.(...llmOutputs)\n : undefined,\n };\n Object.defineProperty(output, RUN_KEY, {\n value: runManagers\n ? { runIds: runManagers?.map((manager) => manager.runId) }\n : undefined,\n configurable: true,\n });\n return output;\n }\n\n async _generateCached({\n messages,\n cache,\n llmStringKey,\n parsedOptions,\n handledOptions,\n }: {\n messages: BaseMessageLike[][];\n cache: BaseCache<Generation[]>;\n llmStringKey: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n parsedOptions: any;\n handledOptions: RunnableConfig;\n }): Promise<\n LLMResult & {\n missingPromptIndices: number[];\n startedRunManagers?: CallbackManagerForLLMRun[];\n }\n > {\n const baseMessages = messages.map((messageList) =>\n messageList.map(coerceMessageLikeToMessage)\n );\n\n const inheritableMetadata = {\n ...handledOptions.metadata,\n ...this.getLsParamsWithDefaults(parsedOptions),\n };\n // create callback manager and start run\n const callbackManager_ = await CallbackManager.configure(\n handledOptions.callbacks,\n this.callbacks,\n handledOptions.tags,\n this.tags,\n inheritableMetadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const extra = {\n options: parsedOptions,\n invocation_params: this?.invocationParams(parsedOptions),\n batch_size: 1,\n };\n const runManagers = await callbackManager_?.handleChatModelStart(\n this.toJSON(),\n baseMessages.map(_formatForTracing),\n handledOptions.runId,\n undefined,\n extra,\n undefined,\n undefined,\n handledOptions.runName\n );\n\n // generate results\n const missingPromptIndices: number[] = [];\n const results = await Promise.allSettled(\n baseMessages.map(async (baseMessage, index) => {\n // Join all content into one string for the prompt index\n const prompt =\n BaseChatModel._convertInputToPromptValue(baseMessage).toString();\n const result = await cache.lookup(prompt, llmStringKey);\n\n if (result == null) {\n missingPromptIndices.push(index);\n }\n\n return result;\n })\n );\n\n // Map run managers to the results before filtering out null results\n // Null results are just absent from the cache.\n const cachedResults = results\n .map((result, index) => ({ result, runManager: runManagers?.[index] }))\n .filter(\n ({ result }) =>\n (result.status === \"fulfilled\" && result.value != null) ||\n result.status === \"rejected\"\n );\n\n // Handle results and call run managers\n const outputVersion = parsedOptions.outputVersion ?? this.outputVersion;\n const generations: Generation[][] = [];\n await Promise.all(\n cachedResults.map(async ({ result: promiseResult, runManager }, i) => {\n if (promiseResult.status === \"fulfilled\") {\n const result = promiseResult.value as Generation[];\n generations[i] = result.map((result) => {\n if (\n \"message\" in result &&\n isBaseMessage(result.message) &&\n isAIMessage(result.message)\n ) {\n result.message.usage_metadata = {\n input_tokens: 0,\n output_tokens: 0,\n total_tokens: 0,\n };\n if (outputVersion === \"v1\") {\n result.message = castStandardMessageContent(result.message);\n }\n }\n result.generationInfo = {\n ...result.generationInfo,\n tokenUsage: {},\n };\n return result;\n });\n if (result.length) {\n await runManager?.handleLLMNewToken(result[0].text);\n }\n return runManager?.handleLLMEnd(\n {\n generations: [result],\n },\n undefined,\n undefined,\n undefined,\n {\n cached: true,\n }\n );\n } else {\n // status === \"rejected\"\n await runManager?.handleLLMError(\n promiseResult.reason,\n undefined,\n undefined,\n undefined,\n {\n cached: true,\n }\n );\n return Promise.reject(promiseResult.reason);\n }\n })\n );\n\n const output = {\n generations,\n missingPromptIndices,\n startedRunManagers: runManagers,\n };\n\n // This defines RUN_KEY as a non-enumerable property on the output object\n // so that it is not serialized when the output is stringified, and so that\n // it isnt included when listing the keys of the output object.\n Object.defineProperty(output, RUN_KEY, {\n value: runManagers\n ? { runIds: runManagers?.map((manager) => manager.runId) }\n : undefined,\n configurable: true,\n });\n\n return output;\n }\n\n /**\n * Generates chat based on the input messages.\n * @param messages An array of arrays of BaseMessage instances.\n * @param options The call options or an array of stop sequences.\n * @param callbacks The callbacks for the language model.\n * @returns A Promise that resolves to an LLMResult.\n */\n async generate(\n messages: BaseMessageLike[][],\n options?: string[] | Partial<CallOptions>,\n callbacks?: Callbacks\n ): Promise<LLMResult> {\n // parse call options\n let parsedOptions: Partial<CallOptions> | undefined;\n if (Array.isArray(options)) {\n parsedOptions = { stop: options } as Partial<CallOptions>;\n } else {\n parsedOptions = options;\n }\n\n const baseMessages = messages.map((messageList) =>\n messageList.map(coerceMessageLikeToMessage)\n );\n\n const [runnableConfig, callOptions] =\n this._separateRunnableConfigFromCallOptionsCompat(parsedOptions);\n runnableConfig.callbacks = runnableConfig.callbacks ?? callbacks;\n\n if (!this.cache) {\n return this._generateUncached(baseMessages, callOptions, runnableConfig);\n }\n\n const { cache } = this;\n const llmStringKey = this._getSerializedCacheKeyParametersForCall(\n callOptions as CallOptions\n );\n\n const { generations, missingPromptIndices, startedRunManagers } =\n await this._generateCached({\n messages: baseMessages,\n cache,\n llmStringKey,\n parsedOptions: callOptions,\n handledOptions: runnableConfig,\n });\n\n let llmOutput = {};\n if (missingPromptIndices.length > 0) {\n const results = await this._generateUncached(\n missingPromptIndices.map((i) => baseMessages[i]),\n callOptions,\n runnableConfig,\n startedRunManagers !== undefined\n ? missingPromptIndices.map((i) => startedRunManagers?.[i])\n : undefined\n );\n await Promise.all(\n results.generations.map(async (generation, index) => {\n const promptIndex = missingPromptIndices[index];\n generations[promptIndex] = generation;\n // Join all content into one string for the prompt index\n const prompt = BaseChatModel._convertInputToPromptValue(\n baseMessages[promptIndex]\n ).toString();\n return cache.update(prompt, llmStringKey, generation);\n })\n );\n llmOutput = results.llmOutput ?? {};\n }\n\n return { generations, llmOutput } as LLMResult;\n }\n\n /**\n * Get the parameters used to invoke the model\n */\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n invocationParams(_options?: this[\"ParsedCallOptions\"]): any {\n return {};\n }\n\n _modelType(): string {\n return \"base_chat_model\" as const;\n }\n\n abstract _llmType(): string;\n\n /**\n * Generates a prompt based on the input prompt values.\n * @param promptValues An array of BasePromptValue instances.\n * @param options The call options or an array of stop sequences.\n * @param callbacks The callbacks for the language model.\n * @returns A Promise that resolves to an LLMResult.\n */\n async generatePrompt(\n promptValues: BasePromptValueInterface[],\n options?: string[] | Partial<CallOptions>,\n callbacks?: Callbacks\n ): Promise<LLMResult> {\n const promptMessages: BaseMessage[][] = promptValues.map((promptValue) =>\n promptValue.toChatMessages()\n );\n return this.generate(promptMessages, options, callbacks);\n }\n\n abstract _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema: SerializableSchema<RunOutput>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema: SerializableSchema<RunOutput>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV4Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV4Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV3Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV3Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n {\n raw: BaseMessage;\n parsed: RunOutput;\n }\n > {\n if (typeof this.bindTools !== \"function\") {\n throw new Error(\n `Chat model must implement \".bindTools()\" to use withStructuredOutput.`\n );\n }\n if (config?.strict) {\n throw new Error(\n `\"strict\" mode is not supported for this model by default.`\n );\n }\n\n const schema = outputSchema;\n const name = config?.name;\n const description =\n getSchemaDescription(schema) ?? \"A function available to call.\";\n const method = config?.method;\n const includeRaw = config?.includeRaw;\n if (method === \"jsonMode\") {\n throw new Error(\n `Base withStructuredOutput implementation only supports \"functionCalling\" as a method.`\n );\n }\n\n let functionName = name ?? \"extract\";\n if (\n !isInteropZodSchema(schema) &&\n !isSerializableSchema(schema) &&\n \"name\" in schema\n ) {\n functionName = schema.name;\n }\n\n const asJsonSchema =\n isInteropZodSchema(schema) || isSerializableSchema(schema)\n ? toJsonSchema(schema)\n : schema;\n\n const tools: ToolDefinition[] = [\n {\n type: \"function\",\n function: {\n name: functionName,\n description,\n parameters: asJsonSchema,\n },\n },\n ];\n\n const llm = this.bindTools(tools);\n const outputParser = RunnableLambda.from<OutputMessageType, RunOutput>(\n (input: BaseMessageChunk): RunOutput => {\n if (!AIMessageChunk.isInstance(input)) {\n throw new Error(\"Input is not an AIMessageChunk.\");\n }\n if (!input.tool_calls || input.tool_calls.length === 0) {\n throw new Error(\"No tool calls found in the response.\");\n }\n const toolCall = input.tool_calls.find(\n (tc) => tc.name === functionName\n );\n if (!toolCall) {\n throw new Error(`No tool call found with name ${functionName}.`);\n }\n return toolCall.args as RunOutput;\n }\n );\n\n return assembleStructuredOutputPipeline(\n llm,\n outputParser,\n includeRaw,\n includeRaw ? \"StructuredOutputRunnable\" : \"StructuredOutput\"\n );\n }\n}\n\n/**\n * An abstract class that extends BaseChatModel and provides a simple\n * implementation of _generate.\n */\nexport abstract class SimpleChatModel<\n CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions,\n> extends BaseChatModel<CallOptions> {\n abstract _call(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<string>;\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const text = await this._call(messages, options, runManager);\n const message = new AIMessage(text);\n if (typeof message.content !== \"string\") {\n throw new Error(\n \"Cannot generate with a simple chat model when output is not a string.\"\n );\n }\n return {\n generations: [\n {\n text: message.content,\n message,\n },\n ],\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chat_models.js","names":[],"sources":["../../src/language_models/chat_models.ts"],"sourcesContent":["import type { ZodV3Like, ZodV4Like } from \"../utils/types/zod.js\";\nimport {\n AIMessage,\n type BaseMessage,\n BaseMessageChunk,\n type BaseMessageLike,\n coerceMessageLikeToMessage,\n AIMessageChunk,\n isAIMessageChunk,\n isBaseMessage,\n isAIMessage,\n MessageOutputVersion,\n} from \"../messages/index.js\";\nimport {\n convertToOpenAIImageBlock,\n isURLContentBlock,\n isBase64ContentBlock,\n} from \"../messages/content/data.js\";\nimport type { BasePromptValueInterface } from \"../prompt_values.js\";\nimport {\n LLMResult,\n RUN_KEY,\n type ChatGeneration,\n ChatGenerationChunk,\n type ChatResult,\n type Generation,\n} from \"../outputs.js\";\nimport {\n BaseLanguageModel,\n type StructuredOutputMethodOptions,\n type ToolDefinition,\n type BaseLanguageModelCallOptions,\n type BaseLanguageModelInput,\n type BaseLanguageModelParams,\n} from \"./base.js\";\nimport {\n CallbackManager,\n type CallbackManagerForLLMRun,\n type Callbacks,\n} from \"../callbacks/manager.js\";\nimport type { RunnableConfig } from \"../runnables/config.js\";\nimport type { BaseCache } from \"../caches/index.js\";\nimport {\n StructuredToolInterface,\n StructuredToolParams,\n} from \"../tools/index.js\";\nimport {\n Runnable,\n RunnableLambda,\n RunnableToolLike,\n} from \"../runnables/base.js\";\nimport { concat } from \"../utils/stream.js\";\nimport {\n getSchemaDescription,\n InteropZodType,\n isInteropZodSchema,\n} from \"../utils/types/zod.js\";\nimport { ModelAbortError } from \"../errors/index.js\";\nimport {\n callbackHandlerPrefersChatModelStreamEvents,\n callbackHandlerPrefersStreaming,\n} from \"../callbacks/base.js\";\nimport { toJsonSchema } from \"../utils/json_schema.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\nimport { castStandardMessageContent, iife } from \"./utils.js\";\nimport {\n isSerializableSchema,\n type SerializableSchema,\n} from \"../utils/standard_schema.js\";\nimport { assembleStructuredOutputPipeline } from \"./structured_output.js\";\nimport type { ChatModelStreamEvent } from \"./event.js\";\nimport { ChatModelStream } from \"./stream.js\";\nimport { convertChunksToEvents } from \"./compat.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ToolChoice = string | Record<string, any> | \"auto\" | \"any\";\n\n/**\n * Represents a serialized chat model.\n */\nexport type SerializedChatModel = {\n _model: string;\n _type: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n} & Record<string, any>;\n\n// todo?\n/**\n * Represents a serialized large language model.\n */\nexport type SerializedLLM = {\n _model: string;\n _type: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n} & Record<string, any>;\n\n/**\n * Represents the parameters for a base chat model.\n */\nexport type BaseChatModelParams = BaseLanguageModelParams & {\n /**\n * Whether to disable streaming.\n *\n * If streaming is bypassed, then `stream()` will defer to\n * `invoke()`.\n *\n * - If true, will always bypass streaming case.\n * - If false (default), will always use streaming case if available.\n */\n disableStreaming?: boolean;\n /**\n * Version of `AIMessage` output format to store in message content.\n *\n * `AIMessage.contentBlocks` will lazily parse the contents of `content` into a\n * standard format. This flag can be used to additionally store the standard format\n * as the message content, e.g., for serialization purposes.\n *\n * - \"v0\": provider-specific format in content (can lazily parse with `.contentBlocks`)\n * - \"v1\": standardized format in content (consistent with `.contentBlocks`)\n *\n * You can also set `LC_OUTPUT_VERSION` as an environment variable to \"v1\" to\n * enable this by default.\n *\n * @default \"v0\"\n */\n outputVersion?: MessageOutputVersion;\n};\n\n/**\n * Represents the call options for a base chat model.\n */\nexport type BaseChatModelCallOptions = BaseLanguageModelCallOptions & {\n /**\n * Specifies how the chat model should use tools.\n * @default undefined\n *\n * Possible values:\n * - \"auto\": The model may choose to use any of the provided tools, or none.\n * - \"any\": The model must use one of the provided tools.\n * - \"none\": The model must not use any tools.\n * - A string (not \"auto\", \"any\", or \"none\"): The name of a specific tool the model must use.\n * - An object: A custom schema specifying tool choice parameters. Specific to the provider.\n *\n * Note: Not all providers support tool_choice. An error will be thrown\n * if used with an unsupported model.\n */\n tool_choice?: ToolChoice;\n /**\n * Version of `AIMessage` output format to store in message content.\n *\n * `AIMessage.contentBlocks` will lazily parse the contents of `content` into a\n * standard format. This flag can be used to additionally store the standard format\n * as the message content, e.g., for serialization purposes.\n *\n * - \"v0\": provider-specific format in content (can lazily parse with `.contentBlocks`)\n * - \"v1\": standardized format in content (consistent with `.contentBlocks`)\n *\n * You can also set `LC_OUTPUT_VERSION` as an environment variable to \"v1\" to\n * enable this by default.\n *\n * @default \"v0\"\n */\n outputVersion?: MessageOutputVersion;\n};\n\nfunction _formatForTracing(messages: BaseMessage[]): BaseMessage[] {\n const messagesToTrace: BaseMessage[] = [];\n for (const message of messages) {\n let messageToTrace = message;\n if (Array.isArray(message.content)) {\n for (let idx = 0; idx < message.content.length; idx++) {\n const block = message.content[idx];\n if (isURLContentBlock(block) || isBase64ContentBlock(block)) {\n if (messageToTrace === message) {\n // Also shallow-copy content\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n messageToTrace = new (message.constructor as any)({\n ...messageToTrace,\n content: [\n ...message.content.slice(0, idx),\n convertToOpenAIImageBlock(block),\n ...message.content.slice(idx + 1),\n ],\n });\n }\n }\n }\n }\n messagesToTrace.push(messageToTrace);\n }\n return messagesToTrace;\n}\n\nexport type LangSmithParams = {\n ls_provider?: string;\n ls_model_name?: string;\n ls_model_type: \"chat\";\n ls_temperature?: number;\n ls_max_tokens?: number;\n ls_stop?: Array<string>;\n ls_integration?: string;\n};\n\nexport type BindToolsInput =\n | StructuredToolInterface\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>\n | ToolDefinition\n | RunnableToolLike\n | StructuredToolParams;\n\n/**\n * Base class for chat models. It extends the BaseLanguageModel class and\n * provides methods for generating chat based on input messages.\n */\nexport abstract class BaseChatModel<\n CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions,\n // TODO: Fix the parameter order on the next minor version.\n OutputMessageType extends BaseMessageChunk = AIMessageChunk,\n> extends BaseLanguageModel<OutputMessageType, CallOptions> {\n // Backwards compatibility since fields have been moved to RunnableConfig\n declare ParsedCallOptions: Omit<\n CallOptions,\n Exclude<keyof RunnableConfig, \"signal\" | \"timeout\" | \"maxConcurrency\">\n >;\n\n // Only ever instantiated in main LangChain\n lc_namespace = [\"langchain\", \"chat_models\", this._llmType()];\n\n disableStreaming = false;\n\n outputVersion?: MessageOutputVersion;\n\n get callKeys(): string[] {\n return [...super.callKeys, \"outputVersion\"];\n }\n\n constructor(fields: BaseChatModelParams) {\n super(fields);\n this.outputVersion = iife(() => {\n const outputVersion =\n fields.outputVersion ?? getEnvironmentVariable(\"LC_OUTPUT_VERSION\");\n if (outputVersion && [\"v0\", \"v1\"].includes(outputVersion)) {\n return outputVersion as \"v0\" | \"v1\";\n }\n return \"v0\";\n });\n }\n\n _combineLLMOutput?(\n ...llmOutputs: LLMResult[\"llmOutput\"][]\n ): LLMResult[\"llmOutput\"];\n\n protected _separateRunnableConfigFromCallOptionsCompat(\n options?: Partial<CallOptions>\n ): [RunnableConfig, this[\"ParsedCallOptions\"]] {\n // For backwards compat, keep `signal` in both runnableConfig and callOptions\n const [runnableConfig, callOptions] =\n super._separateRunnableConfigFromCallOptions(options);\n (callOptions as this[\"ParsedCallOptions\"]).signal = runnableConfig.signal;\n return [runnableConfig, callOptions as this[\"ParsedCallOptions\"]];\n }\n\n /**\n * Bind tool-like objects to this chat model.\n *\n * @param tools A list of tool definitions to bind to this chat model.\n * Can be a structured tool, an OpenAI formatted tool, or an object\n * matching the provider's specific tool schema.\n * @param kwargs Any additional parameters to bind.\n */\n bindTools?(\n tools: BindToolsInput[],\n kwargs?: Partial<CallOptions>\n ): Runnable<BaseLanguageModelInput, OutputMessageType, CallOptions>;\n\n /**\n * Invokes the chat model with a single input.\n * @param input The input for the language model.\n * @param options The call options.\n * @returns A Promise that resolves to a BaseMessageChunk.\n */\n async invoke(\n input: BaseLanguageModelInput,\n options?: Partial<CallOptions>\n ): Promise<OutputMessageType> {\n const promptValue = BaseChatModel._convertInputToPromptValue(input);\n const result = await this.generatePrompt(\n [promptValue],\n options,\n options?.callbacks\n );\n const chatGeneration = result.generations[0][0] as ChatGeneration;\n // TODO: Remove cast after figuring out inheritance\n return chatGeneration.message as OutputMessageType;\n }\n\n // oxlint-disable-next-line require-yield\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n throw new Error(\"Not implemented.\");\n }\n\n /**\n * Stream chat model events using the new content-block-centric protocol.\n *\n * Override this method to provide native event streaming from the provider SDK.\n * The default implementation bridges from `_streamResponseChunks` by\n * synthesizing lifecycle events from `ChatGenerationChunk` objects.\n *\n * ## Event lifecycle\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index, contentBlock)\n * -> ContentBlockDelta(index, delta) ...\n * -> ContentBlockFinish(index, contentBlock)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * Content blocks may interleave (e.g., parallel tool calls). The only\n * invariant: a block's start precedes its deltas, and its deltas precede\n * its finish.\n *\n * @param messages - The input messages.\n * @param options - Parsed call options.\n * @param runManager - Optional callback manager for the run.\n * @returns An async generator of {@link ChatModelStreamEvent}.\n */\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n // Default: bridge from legacy _streamResponseChunks\n const chunks = this._streamResponseChunks(messages, options, runManager);\n yield* convertChunksToEvents(chunks, { signal: options.signal });\n }\n\n /**\n * Create a {@link ChatModelStream} for the given input.\n *\n * Returns a stream object that is both `AsyncIterable<ChatModelStreamEvent>`\n * and `PromiseLike<AIMessage>`, with typed sub-stream accessors for\n * `.text`, `.toolCalls`, `.reasoning`, and `.usage`.\n *\n * @param input - The input messages.\n * @param options - Optional call options.\n * @returns A {@link ChatModelStream}.\n *\n * @example\n * ```ts\n * const stream = model.streamV2([{ role: \"user\", content: \"Hello\" }]);\n *\n * // Stream text\n * for await (const token of stream.text) {\n * process.stdout.write(token);\n * }\n *\n * // Or await the full message\n * const message = await stream;\n * ```\n */\n streamV2(\n input: BaseLanguageModelInput,\n options?: Partial<CallOptions>\n ): ChatModelStream {\n const prompt = BaseChatModel._convertInputToPromptValue(input);\n const messages = prompt.toChatMessages();\n const [, callOptions] =\n this._separateRunnableConfigFromCallOptionsCompat(options);\n\n const generator = this._streamChatModelEvents(messages, callOptions);\n\n return new ChatModelStream(generator);\n }\n\n async *_streamIterator(\n input: BaseLanguageModelInput,\n options?: Partial<CallOptions>\n ): AsyncGenerator<OutputMessageType> {\n // Subclass check required to avoid double callbacks with default implementation\n if (\n this._streamResponseChunks ===\n BaseChatModel.prototype._streamResponseChunks ||\n this.disableStreaming\n ) {\n yield this.invoke(input, options);\n } else {\n const prompt = BaseChatModel._convertInputToPromptValue(input);\n const messages = prompt.toChatMessages();\n const [runnableConfig, callOptions] =\n this._separateRunnableConfigFromCallOptionsCompat(options);\n\n const inheritableMetadata = {\n ...runnableConfig.metadata,\n ...this.getLsParamsWithDefaults(callOptions),\n };\n const callbackManager_ = await CallbackManager.configure(\n runnableConfig.callbacks,\n this.callbacks,\n runnableConfig.tags,\n this.tags,\n inheritableMetadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const extra = {\n options: callOptions,\n invocation_params: this?.invocationParams(callOptions),\n batch_size: 1,\n };\n const outputVersion = callOptions.outputVersion ?? this.outputVersion;\n const runManagers = await callbackManager_?.handleChatModelStart(\n this.toJSON(),\n [_formatForTracing(messages)],\n runnableConfig.runId,\n undefined,\n extra,\n undefined,\n undefined,\n runnableConfig.runName\n );\n let generationChunk: ChatGenerationChunk | undefined;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n let llmOutput: Record<string, any> | undefined;\n try {\n for await (const chunk of this._streamResponseChunks(\n messages,\n callOptions,\n runManagers?.[0]\n )) {\n callOptions.signal?.throwIfAborted();\n if (chunk.message.id == null) {\n const runId = runManagers?.at(0)?.runId;\n if (runId != null) chunk.message._updateId(`run-${runId}`);\n }\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n if (outputVersion === \"v1\") {\n yield castStandardMessageContent(\n chunk.message\n ) as OutputMessageType;\n } else {\n yield chunk.message as OutputMessageType;\n }\n if (!generationChunk) {\n generationChunk = chunk;\n } else {\n generationChunk = generationChunk.concat(chunk);\n }\n if (\n isAIMessageChunk(chunk.message) &&\n chunk.message.usage_metadata !== undefined\n ) {\n llmOutput = {\n tokenUsage: {\n promptTokens: chunk.message.usage_metadata.input_tokens,\n completionTokens: chunk.message.usage_metadata.output_tokens,\n totalTokens: chunk.message.usage_metadata.total_tokens,\n },\n };\n }\n }\n // Throw error if stream ended due to abort (provider returned early)\n callOptions.signal?.throwIfAborted();\n } catch (err) {\n await Promise.all(\n (runManagers ?? []).map((runManager) =>\n runManager?.handleLLMError(err)\n )\n );\n throw err;\n }\n await Promise.all(\n (runManagers ?? []).map((runManager) =>\n runManager?.handleLLMEnd({\n // TODO: Remove cast after figuring out inheritance\n generations: [[generationChunk as ChatGeneration]],\n llmOutput,\n })\n )\n );\n }\n }\n\n getLsParams(options: this[\"ParsedCallOptions\"]): LangSmithParams {\n const providerName = this.getName().startsWith(\"Chat\")\n ? this.getName().replace(\"Chat\", \"\")\n : this.getName();\n\n return {\n ls_model_type: \"chat\",\n ls_stop: options.stop,\n ls_provider: providerName,\n };\n }\n\n /**\n * Wraps getLsParams() and always appends ls_integration.\n * This ensures the integration tag is present even when\n * partner packages fully override getLsParams().\n */\n getLsParamsWithDefaults(options: this[\"ParsedCallOptions\"]): LangSmithParams {\n return {\n ...this.getLsParams(options),\n ls_integration: \"langchain_chat_model\",\n };\n }\n\n /** @ignore */\n async _generateUncached(\n messages: BaseMessageLike[][],\n parsedOptions: this[\"ParsedCallOptions\"],\n handledOptions: RunnableConfig,\n startedRunManagers?: CallbackManagerForLLMRun[]\n ): Promise<LLMResult> {\n const baseMessages = messages.map((messageList) =>\n messageList.map(coerceMessageLikeToMessage)\n );\n\n let runManagers: CallbackManagerForLLMRun[] | undefined;\n if (\n startedRunManagers !== undefined &&\n startedRunManagers.length === baseMessages.length\n ) {\n runManagers = startedRunManagers;\n } else {\n const inheritableMetadata = {\n ...handledOptions.metadata,\n ...this.getLsParamsWithDefaults(parsedOptions),\n };\n // create callback manager and start run\n const callbackManager_ = await CallbackManager.configure(\n handledOptions.callbacks,\n this.callbacks,\n handledOptions.tags,\n this.tags,\n inheritableMetadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const extra = {\n options: parsedOptions,\n invocation_params: this?.invocationParams(parsedOptions),\n batch_size: 1,\n };\n runManagers = await callbackManager_?.handleChatModelStart(\n this.toJSON(),\n baseMessages.map(_formatForTracing),\n handledOptions.runId,\n undefined,\n extra,\n undefined,\n undefined,\n handledOptions.runName\n );\n }\n const outputVersion = parsedOptions.outputVersion ?? this.outputVersion;\n const generations: ChatGeneration[][] = [];\n const llmOutputs: LLMResult[\"llmOutput\"][] = [];\n // Even if stream is not explicitly called, check if model is implicitly\n // called from streamEvents() or streamLog() to get all streamed events.\n // Bail out if _streamResponseChunks not overridden\n const hasChatModelStreamEventHandler = !!runManagers?.[0].handlers.find(\n callbackHandlerPrefersChatModelStreamEvents\n );\n const hasStreamingHandler = !!runManagers?.[0].handlers.find(\n callbackHandlerPrefersStreaming\n );\n if (\n hasChatModelStreamEventHandler &&\n !this.disableStreaming &&\n baseMessages.length === 1 &&\n (this._streamChatModelEvents !==\n BaseChatModel.prototype._streamChatModelEvents ||\n this._streamResponseChunks !==\n BaseChatModel.prototype._streamResponseChunks)\n ) {\n try {\n let sawEvent = false;\n const runManager = runManagers?.[0];\n const events = this._streamChatModelEvents(\n baseMessages[0],\n parsedOptions\n );\n const forwardedEvents = {\n async *[Symbol.asyncIterator]() {\n for await (const event of events) {\n parsedOptions.signal?.throwIfAborted();\n sawEvent = true;\n const streamEvent =\n event.event === \"message-start\" &&\n event.id == null &&\n runManager?.runId != null\n ? { ...event, id: `run-${runManager.runId}` }\n : event;\n await runManager?.handleChatModelStreamEvent(streamEvent);\n yield streamEvent;\n }\n },\n };\n const message = await new ChatModelStream(forwardedEvents);\n parsedOptions.signal?.throwIfAborted();\n if (!sawEvent) {\n throw new Error(\"Received empty response from chat model call.\");\n }\n if (message.id == null) {\n const runId = runManagers?.at(0)?.runId;\n if (runId != null) message._updateId(`run-${runId}`);\n }\n const generation: ChatGeneration = {\n text: message.text,\n message,\n };\n generations.push([generation]);\n const llmOutput =\n message.usage_metadata !== undefined\n ? {\n tokenUsage: {\n promptTokens: message.usage_metadata.input_tokens,\n completionTokens: message.usage_metadata.output_tokens,\n totalTokens: message.usage_metadata.total_tokens,\n },\n }\n : undefined;\n await runManagers?.[0].handleLLMEnd({\n generations,\n llmOutput,\n });\n } catch (e) {\n await runManagers?.[0].handleLLMError(e);\n throw e;\n }\n } else if (\n hasStreamingHandler &&\n !this.disableStreaming &&\n baseMessages.length === 1 &&\n this._streamResponseChunks !==\n BaseChatModel.prototype._streamResponseChunks\n ) {\n try {\n const stream = await this._streamResponseChunks(\n baseMessages[0],\n parsedOptions,\n runManagers?.[0]\n );\n let aggregated: ChatGenerationChunk | undefined;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n let llmOutput: Record<string, any> | undefined;\n for await (const chunk of stream) {\n // Check for abort signal - throw ModelAbortError with partial output\n if (parsedOptions.signal?.aborted) {\n const partialMessage = aggregated?.message as\n | AIMessageChunk\n | undefined;\n throw new ModelAbortError(\n \"Model invocation was aborted.\",\n partialMessage\n );\n }\n if (chunk.message.id == null) {\n const runId = runManagers?.at(0)?.runId;\n if (runId != null) chunk.message._updateId(`run-${runId}`);\n }\n if (aggregated === undefined) {\n aggregated = chunk;\n } else {\n aggregated = concat(aggregated, chunk);\n }\n if (\n isAIMessageChunk(chunk.message) &&\n chunk.message.usage_metadata !== undefined\n ) {\n llmOutput = {\n tokenUsage: {\n promptTokens: chunk.message.usage_metadata.input_tokens,\n completionTokens: chunk.message.usage_metadata.output_tokens,\n totalTokens: chunk.message.usage_metadata.total_tokens,\n },\n };\n }\n }\n // Check if stream ended due to abort (provider returned early)\n if (parsedOptions.signal?.aborted) {\n const partialMessage = aggregated?.message as\n | AIMessageChunk\n | undefined;\n throw new ModelAbortError(\n \"Model invocation was aborted.\",\n partialMessage\n );\n }\n if (aggregated === undefined) {\n throw new Error(\"Received empty response from chat model call.\");\n }\n generations.push([aggregated]);\n await runManagers?.[0].handleLLMEnd({\n generations,\n llmOutput,\n });\n } catch (e) {\n await runManagers?.[0].handleLLMError(e);\n throw e;\n }\n } else {\n // generate results\n const results = await Promise.allSettled(\n baseMessages.map(async (messageList, i) => {\n const generateResults = await this._generate(\n messageList,\n { ...parsedOptions, promptIndex: i },\n runManagers?.[i]\n );\n if (outputVersion === \"v1\") {\n for (const generation of generateResults.generations) {\n generation.message = castStandardMessageContent(\n generation.message\n );\n }\n }\n return generateResults;\n })\n );\n // handle results\n await Promise.all(\n results.map(async (pResult, i) => {\n if (pResult.status === \"fulfilled\") {\n const result = pResult.value;\n for (const generation of result.generations) {\n if (generation.message.id == null) {\n const runId = runManagers?.at(0)?.runId;\n if (runId != null) generation.message._updateId(`run-${runId}`);\n }\n generation.message.response_metadata = {\n ...generation.generationInfo,\n ...generation.message.response_metadata,\n };\n }\n if (result.generations.length === 1) {\n result.generations[0].message.response_metadata = {\n ...result.llmOutput,\n ...result.generations[0].message.response_metadata,\n };\n }\n generations[i] = result.generations;\n llmOutputs[i] = result.llmOutput;\n return runManagers?.[i]?.handleLLMEnd({\n generations: [result.generations],\n llmOutput: result.llmOutput,\n });\n } else {\n // status === \"rejected\"\n await runManagers?.[i]?.handleLLMError(pResult.reason);\n return Promise.reject(pResult.reason);\n }\n })\n );\n }\n // create combined output\n const output: LLMResult = {\n generations,\n llmOutput: llmOutputs.length\n ? this._combineLLMOutput?.(...llmOutputs)\n : undefined,\n };\n Object.defineProperty(output, RUN_KEY, {\n value: runManagers\n ? { runIds: runManagers?.map((manager) => manager.runId) }\n : undefined,\n configurable: true,\n });\n return output;\n }\n\n async _generateCached({\n messages,\n cache,\n llmStringKey,\n parsedOptions,\n handledOptions,\n }: {\n messages: BaseMessageLike[][];\n cache: BaseCache<Generation[]>;\n llmStringKey: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n parsedOptions: any;\n handledOptions: RunnableConfig;\n }): Promise<\n LLMResult & {\n missingPromptIndices: number[];\n startedRunManagers?: CallbackManagerForLLMRun[];\n }\n > {\n const baseMessages = messages.map((messageList) =>\n messageList.map(coerceMessageLikeToMessage)\n );\n\n const inheritableMetadata = {\n ...handledOptions.metadata,\n ...this.getLsParamsWithDefaults(parsedOptions),\n };\n // create callback manager and start run\n const callbackManager_ = await CallbackManager.configure(\n handledOptions.callbacks,\n this.callbacks,\n handledOptions.tags,\n this.tags,\n inheritableMetadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const extra = {\n options: parsedOptions,\n invocation_params: this?.invocationParams(parsedOptions),\n batch_size: 1,\n };\n const runManagers = await callbackManager_?.handleChatModelStart(\n this.toJSON(),\n baseMessages.map(_formatForTracing),\n handledOptions.runId,\n undefined,\n extra,\n undefined,\n undefined,\n handledOptions.runName\n );\n\n // generate results\n const missingPromptIndices: number[] = [];\n const results = await Promise.allSettled(\n baseMessages.map(async (baseMessage, index) => {\n // Join all content into one string for the prompt index\n const prompt =\n BaseChatModel._convertInputToPromptValue(baseMessage).toString();\n const result = await cache.lookup(prompt, llmStringKey);\n\n if (result == null) {\n missingPromptIndices.push(index);\n }\n\n return result;\n })\n );\n\n // Map run managers to the results before filtering out null results\n // Null results are just absent from the cache.\n const cachedResults = results\n .map((result, index) => ({ result, runManager: runManagers?.[index] }))\n .filter(\n ({ result }) =>\n (result.status === \"fulfilled\" && result.value != null) ||\n result.status === \"rejected\"\n );\n\n // Handle results and call run managers\n const outputVersion = parsedOptions.outputVersion ?? this.outputVersion;\n const generations: Generation[][] = [];\n await Promise.all(\n cachedResults.map(async ({ result: promiseResult, runManager }, i) => {\n if (promiseResult.status === \"fulfilled\") {\n const result = promiseResult.value as Generation[];\n generations[i] = result.map((result) => {\n if (\n \"message\" in result &&\n isBaseMessage(result.message) &&\n isAIMessage(result.message)\n ) {\n result.message.usage_metadata = {\n input_tokens: 0,\n output_tokens: 0,\n total_tokens: 0,\n };\n if (outputVersion === \"v1\") {\n result.message = castStandardMessageContent(result.message);\n }\n }\n result.generationInfo = {\n ...result.generationInfo,\n tokenUsage: {},\n };\n return result;\n });\n if (result.length) {\n await runManager?.handleLLMNewToken(result[0].text);\n }\n return runManager?.handleLLMEnd(\n {\n generations: [result],\n },\n undefined,\n undefined,\n undefined,\n {\n cached: true,\n }\n );\n } else {\n // status === \"rejected\"\n await runManager?.handleLLMError(\n promiseResult.reason,\n undefined,\n undefined,\n undefined,\n {\n cached: true,\n }\n );\n return Promise.reject(promiseResult.reason);\n }\n })\n );\n\n const output = {\n generations,\n missingPromptIndices,\n startedRunManagers: runManagers,\n };\n\n // This defines RUN_KEY as a non-enumerable property on the output object\n // so that it is not serialized when the output is stringified, and so that\n // it isnt included when listing the keys of the output object.\n Object.defineProperty(output, RUN_KEY, {\n value: runManagers\n ? { runIds: runManagers?.map((manager) => manager.runId) }\n : undefined,\n configurable: true,\n });\n\n return output;\n }\n\n /**\n * Generates chat based on the input messages.\n * @param messages An array of arrays of BaseMessage instances.\n * @param options The call options or an array of stop sequences.\n * @param callbacks The callbacks for the language model.\n * @returns A Promise that resolves to an LLMResult.\n */\n async generate(\n messages: BaseMessageLike[][],\n options?: string[] | Partial<CallOptions>,\n callbacks?: Callbacks\n ): Promise<LLMResult> {\n // parse call options\n let parsedOptions: Partial<CallOptions> | undefined;\n if (Array.isArray(options)) {\n parsedOptions = { stop: options } as Partial<CallOptions>;\n } else {\n parsedOptions = options;\n }\n\n const baseMessages = messages.map((messageList) =>\n messageList.map(coerceMessageLikeToMessage)\n );\n\n const [runnableConfig, callOptions] =\n this._separateRunnableConfigFromCallOptionsCompat(parsedOptions);\n runnableConfig.callbacks = runnableConfig.callbacks ?? callbacks;\n\n if (!this.cache) {\n return this._generateUncached(baseMessages, callOptions, runnableConfig);\n }\n\n const { cache } = this;\n const llmStringKey = this._getSerializedCacheKeyParametersForCall(\n callOptions as CallOptions\n );\n\n const { generations, missingPromptIndices, startedRunManagers } =\n await this._generateCached({\n messages: baseMessages,\n cache,\n llmStringKey,\n parsedOptions: callOptions,\n handledOptions: runnableConfig,\n });\n\n let llmOutput = {};\n if (missingPromptIndices.length > 0) {\n const results = await this._generateUncached(\n missingPromptIndices.map((i) => baseMessages[i]),\n callOptions,\n runnableConfig,\n startedRunManagers !== undefined\n ? missingPromptIndices.map((i) => startedRunManagers?.[i])\n : undefined\n );\n await Promise.all(\n results.generations.map(async (generation, index) => {\n const promptIndex = missingPromptIndices[index];\n generations[promptIndex] = generation;\n // Join all content into one string for the prompt index\n const prompt = BaseChatModel._convertInputToPromptValue(\n baseMessages[promptIndex]\n ).toString();\n return cache.update(prompt, llmStringKey, generation);\n })\n );\n llmOutput = results.llmOutput ?? {};\n }\n\n return { generations, llmOutput } as LLMResult;\n }\n\n /**\n * Get the parameters used to invoke the model\n */\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n invocationParams(_options?: this[\"ParsedCallOptions\"]): any {\n return {};\n }\n\n _modelType(): string {\n return \"base_chat_model\" as const;\n }\n\n abstract _llmType(): string;\n\n /**\n * Generates a prompt based on the input prompt values.\n * @param promptValues An array of BasePromptValue instances.\n * @param options The call options or an array of stop sequences.\n * @param callbacks The callbacks for the language model.\n * @returns A Promise that resolves to an LLMResult.\n */\n async generatePrompt(\n promptValues: BasePromptValueInterface[],\n options?: string[] | Partial<CallOptions>,\n callbacks?: Callbacks\n ): Promise<LLMResult> {\n const promptMessages: BaseMessage[][] = promptValues.map((promptValue) =>\n promptValue.toChatMessages()\n );\n return this.generate(promptMessages, options, callbacks);\n }\n\n abstract _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema: SerializableSchema<RunOutput>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema: SerializableSchema<RunOutput>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV4Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV4Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV3Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | ZodV3Like<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n {\n raw: BaseMessage;\n parsed: RunOutput;\n }\n > {\n if (typeof this.bindTools !== \"function\") {\n throw new Error(\n `Chat model must implement \".bindTools()\" to use withStructuredOutput.`\n );\n }\n if (config?.strict) {\n throw new Error(\n `\"strict\" mode is not supported for this model by default.`\n );\n }\n\n const schema = outputSchema;\n const name = config?.name;\n const description =\n getSchemaDescription(schema) ?? \"A function available to call.\";\n const method = config?.method;\n const includeRaw = config?.includeRaw;\n if (method === \"jsonMode\") {\n throw new Error(\n `Base withStructuredOutput implementation only supports \"functionCalling\" as a method.`\n );\n }\n\n let functionName = name ?? \"extract\";\n if (\n !isInteropZodSchema(schema) &&\n !isSerializableSchema(schema) &&\n \"name\" in schema\n ) {\n functionName = schema.name;\n }\n\n const asJsonSchema =\n isInteropZodSchema(schema) || isSerializableSchema(schema)\n ? toJsonSchema(schema)\n : schema;\n\n const tools: ToolDefinition[] = [\n {\n type: \"function\",\n function: {\n name: functionName,\n description,\n parameters: asJsonSchema,\n },\n },\n ];\n\n const llm = this.bindTools(tools);\n const outputParser = RunnableLambda.from<OutputMessageType, RunOutput>(\n (input: BaseMessageChunk): RunOutput => {\n if (!AIMessageChunk.isInstance(input)) {\n throw new Error(\"Input is not an AIMessageChunk.\");\n }\n if (!input.tool_calls || input.tool_calls.length === 0) {\n throw new Error(\"No tool calls found in the response.\");\n }\n const toolCall = input.tool_calls.find(\n (tc) => tc.name === functionName\n );\n if (!toolCall) {\n throw new Error(`No tool call found with name ${functionName}.`);\n }\n return toolCall.args as RunOutput;\n }\n );\n\n return assembleStructuredOutputPipeline(\n llm,\n outputParser,\n includeRaw,\n includeRaw ? \"StructuredOutputRunnable\" : \"StructuredOutput\"\n );\n }\n}\n\n/**\n * An abstract class that extends BaseChatModel and provides a simple\n * implementation of _generate.\n */\nexport abstract class SimpleChatModel<\n CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions,\n> extends BaseChatModel<CallOptions> {\n abstract _call(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<string>;\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const text = await this._call(messages, options, runManager);\n const message = new AIMessage(text);\n if (typeof message.content !== \"string\") {\n throw new Error(\n \"Cannot generate with a simple chat model when output is not a string.\"\n );\n }\n return {\n generations: [\n {\n text: message.content,\n message,\n },\n ],\n };\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"event.cjs","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types on lifecycle boundaries\n * and explicit delta variants for incremental updates during streaming.\n *\n * ## Design Principles\n *\n * 1. **Content-block deltas have explicit merge semantics.** Text,\n * reasoning, and data deltas append to named fields. Generic block deltas\n * shallow-merge fields onto the active content block.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 4. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, content=...)\n * -> ContentBlockDelta(index=0, delta={ type: \"text-delta\", text: \"Hello\" })\n * -> ContentBlockDelta(index=0, delta={ type: \"text-delta\", text: \" world\" })\n * -> ContentBlockFinish(index=0, content=...)\n * -> UsageUpdate(...)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n/**\n * Usage shape accepted by chat model stream events.\n *\n * This is intentionally wider than {@link UsageMetadata}: protocol sources\n * may report partial token snapshots, while {@link ChatModelStream} normalizes\n * them before exposing `.usage` or the final `AIMessage.usage_metadata`.\n */\nexport type UsageMetadataLike = Partial<UsageMetadata>;\n\n// ─── Message Lifecycle ──────────────────────────────────────────\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n event: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?: UsageMetadataLike;\n}\n\n/**\n * Finish reason for a model response.\n *\n * - `\"stop\"`: Natural end of generation.\n * - `\"length\"`: Hit max token limit.\n * - `\"tool_use\"`: Model is requesting tool execution.\n * - `\"content_filter\"`: Content was filtered by safety systems.\n */\nexport type FinishReason = \"stop\" | \"length\" | \"tool_use\" | \"content_filter\";\n\n/**\n * Emitted once when the model response is complete.\n */\nexport interface MessageFinishEvent {\n event: \"message-finish\";\n /** Why the model stopped generating. */\n reason?: FinishReason;\n /** Final usage snapshot. */\n usage?: UsageMetadataLike;\n /** Provider-specific response metadata (model name, response ID, headers, etc.). */\n metadata?: Record<string, unknown>;\n}\n\n// ─── Content Block Lifecycle ────────────────────────────────────\n// See https://github.com/langchain-ai/agent-protocol/blob/main/streaming/protocol.cddl\n\n/**\n * Emitted when a new content block begins streaming.\n *\n * @example\n * ```ts\n * { event: \"content-block-start\", index: 0,\n * content: { type: \"text\", text: \"\" } }\n * ```\n */\nexport interface ContentBlockStartEvent {\n event: \"content-block-start\";\n /** Positional index of this block within the message. */\n index: number;\n /** Initial state of the content block. */\n content: ContentBlock;\n}\n\n// ─── Content Block Deltas ───────────────────────────────────────\n\n/**\n * Incremental text content. Append `text` to the active block's `text` field.\n */\nexport interface TextDelta {\n type: \"text-delta\";\n /** The new text to append. */\n text: string;\n}\n\n/**\n * Incremental reasoning content. Append `reasoning` to the active block's\n * `reasoning` field.\n */\nexport interface ReasoningDelta {\n type: \"reasoning-delta\";\n /** The new reasoning text to append. */\n reasoning: string;\n}\n\n/**\n * Incremental encoded data. Append `data` to the active multimodal block's\n * data field.\n */\nexport interface DataDelta {\n type: \"data-delta\";\n /** Encoded data chunk to append. */\n data: string;\n /** Encoding for the data chunk. Defaults to `\"base64\"` when omitted. */\n encoding?: \"base64\";\n}\n\n/**\n * Generic content block field update. Shallow-merge `fields` onto the active\n * content block.\n */\nexport interface BlockDelta {\n type: \"block-delta\";\n /** Fields to shallow-merge onto the active content block. */\n fields: { type: string } & Record<string, unknown>;\n}\n\n/**\n * Union of all content block delta types.\n */\nexport type ContentBlockDelta =\n | TextDelta\n | ReasoningDelta\n | DataDelta\n | BlockDelta;\n\n/**\n * Emitted for each incremental update within a content block.\n *\n * The `delta` field carries the incremental content block update.\n * Accumulation rules:\n * - `text-delta` → append `text` to the active block's text field\n * - `reasoning-delta` → append `reasoning` to the active block's reasoning field\n * - `data-delta` → append `data` to the active block's data field\n * - `block-delta` → shallow-merge `fields` onto the active block\n *\n * @example\n * ```ts\n * // Text token\n * { event: \"content-block-delta\", index: 0,\n * delta: { type: \"text-delta\", text: \" world\" } }\n *\n * // Tool call args snapshot\n * { event: \"content-block-delta\", index: 1,\n * delta: { type: \"block-delta\",\n * fields: { type: \"tool_call_chunk\", args: '{\"q\":\"wea' } } } }\n *\n * // Provider-specific field (e.g., signature)\n * { event: \"content-block-delta\", index: 0,\n * delta: { type: \"block-delta\",\n * fields: { type: \"reasoning\", signature: \"sig_abc\" } } }\n * ```\n */\nexport interface ContentBlockDeltaEvent {\n event: \"content-block-delta\";\n /** Positional index of the block being updated. */\n index: number;\n /** Incremental content block delta. */\n delta: ContentBlockDelta;\n}\n\n/**\n * Emitted when a content block is complete.\n *\n * @example\n * ```ts\n * { event: \"content-block-finish\", index: 0,\n * content: { type: \"text\", text: \"Hello world\" } }\n * ```\n */\nexport interface ContentBlockFinishEvent {\n event: \"content-block-finish\";\n /** Positional index of the completed block. */\n index: number;\n /** Finalized content block. */\n content: ContentBlock;\n}\n\n// ─── Usage ──────────────────────────────────────────────────────\n\n/**\n * Emitted whenever the provider reports updated usage information.\n * Each event carries a **running snapshot** (not an additive delta).\n */\nexport interface UsageUpdateEvent {\n event: \"usage\";\n /** Current usage snapshot. */\n usage: UsageMetadataLike;\n}\n\n// ─── Provider Passthrough ───────────────────────────────────────\n\n/**\n * Passthrough for native provider events that don't map to standard types.\n */\nexport interface ProviderEvent {\n event: \"provider\";\n /** Provider identifier (e.g., `\"openai\"`, `\"anthropic\"`, `\"google\"`). */\n provider: string;\n /** Raw event type name from the provider SDK. */\n name: string;\n /** Raw event payload from the provider SDK. */\n payload: unknown;\n}\n\n// ─── Error ──────────────────────────────────────────────────────\n\n/**\n * Emitted on unrecoverable stream errors.\n */\nexport interface StreamErrorEvent {\n event: \"error\";\n /** Human-readable error message. */\n message: string;\n /** Optional error code for programmatic handling. */\n code?: string;\n}\n\n// ─── Union ──────────────────────────────────────────────────────\n\n/**\n * Union of all chat model stream event types.\n */\nexport type ChatModelStreamEvent =\n | MessageStartEvent\n | MessageFinishEvent\n | ContentBlockStartEvent\n | ContentBlockDeltaEvent\n | ContentBlockFinishEvent\n | UsageUpdateEvent\n | ProviderEvent\n | StreamErrorEvent;\n"],"mappings":""}
1
+ {"version":3,"file":"event.cjs","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types on lifecycle boundaries\n * and explicit delta variants for incremental updates during streaming.\n *\n * ## Design Principles\n *\n * 1. **Content-block deltas have explicit merge semantics.** Text,\n * reasoning, and data deltas append to named fields. Generic block deltas\n * shallow-merge fields onto the active content block.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 4. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, content=...)\n * -> ContentBlockDelta(index=0, delta={ type: \"text-delta\", text: \"Hello\" })\n * -> ContentBlockDelta(index=0, delta={ type: \"text-delta\", text: \" world\" })\n * -> ContentBlockFinish(index=0, content=...)\n * -> UsageUpdate(...)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n// ─── Message Lifecycle ──────────────────────────────────────────\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n event: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?: Partial<UsageMetadata>;\n}\n\n/**\n * Finish reason for a model response.\n *\n * - `\"stop\"`: Natural end of generation.\n * - `\"length\"`: Hit max token limit.\n * - `\"tool_use\"`: Model is requesting tool execution.\n * - `\"content_filter\"`: Content was filtered by safety systems.\n */\nexport type FinishReason = \"stop\" | \"length\" | \"tool_use\" | \"content_filter\";\n\n/**\n * Emitted once when the model response is complete.\n */\nexport interface MessageFinishEvent {\n event: \"message-finish\";\n /** Why the model stopped generating. */\n reason?: FinishReason;\n /** Final usage snapshot. */\n usage?: Partial<UsageMetadata>;\n /** Provider-specific response metadata (model name, response ID, headers, etc.). */\n responseMetadata?: Record<string, unknown>;\n}\n\n// ─── Content Block Lifecycle ────────────────────────────────────\n// See https://github.com/langchain-ai/agent-protocol/blob/main/streaming/protocol.cddl\n\n/**\n * Emitted when a new content block begins streaming.\n *\n * @example\n * ```ts\n * { event: \"content-block-start\", index: 0,\n * content: { type: \"text\", text: \"\" } }\n * ```\n */\nexport interface ContentBlockStartEvent {\n event: \"content-block-start\";\n /** Positional index of this block within the message. */\n index: number;\n /** Initial state of the content block. */\n content: ContentBlock;\n}\n\n// ─── Content Block Deltas ───────────────────────────────────────\n\n/**\n * Incremental text content. Append `text` to the active block's `text` field.\n */\nexport interface TextDelta {\n type: \"text-delta\";\n /** The new text to append. */\n text: string;\n}\n\n/**\n * Incremental reasoning content. Append `reasoning` to the active block's\n * `reasoning` field.\n */\nexport interface ReasoningDelta {\n type: \"reasoning-delta\";\n /** The new reasoning text to append. */\n reasoning: string;\n}\n\n/**\n * Incremental encoded data. Append `data` to the active multimodal block's\n * data field.\n */\nexport interface DataDelta {\n type: \"data-delta\";\n /** Encoded data chunk to append. */\n data: string;\n /** Encoding for the data chunk. Defaults to `\"base64\"` when omitted. */\n encoding?: \"base64\";\n}\n\n/**\n * Generic content block field update. Shallow-merge `fields` onto the active\n * content block.\n */\nexport interface BlockDelta {\n type: \"block-delta\";\n /** Fields to shallow-merge onto the active content block. */\n fields: { type: string } & Record<string, unknown>;\n}\n\n/**\n * Union of all content block delta types.\n */\nexport type ContentBlockDelta =\n | TextDelta\n | ReasoningDelta\n | DataDelta\n | BlockDelta;\n\n/**\n * Emitted for each incremental update within a content block.\n *\n * The `delta` field carries the incremental content block update.\n * Accumulation rules:\n * - `text-delta` → append `text` to the active block's text field\n * - `reasoning-delta` → append `reasoning` to the active block's reasoning field\n * - `data-delta` → append `data` to the active block's data field\n * - `block-delta` → shallow-merge `fields` onto the active block\n *\n * @example\n * ```ts\n * // Text token\n * { event: \"content-block-delta\", index: 0,\n * delta: { type: \"text-delta\", text: \" world\" } }\n *\n * // Tool call args snapshot\n * { event: \"content-block-delta\", index: 1,\n * delta: { type: \"block-delta\",\n * fields: { type: \"tool_call_chunk\", args: '{\"q\":\"wea' } } } }\n *\n * // Provider-specific field (e.g., signature)\n * { event: \"content-block-delta\", index: 0,\n * delta: { type: \"block-delta\",\n * fields: { type: \"reasoning\", signature: \"sig_abc\" } } }\n * ```\n */\nexport interface ContentBlockDeltaEvent {\n event: \"content-block-delta\";\n /** Positional index of the block being updated. */\n index: number;\n /** Incremental content block delta. */\n delta: ContentBlockDelta;\n}\n\n/**\n * Emitted when a content block is complete.\n *\n * @example\n * ```ts\n * { event: \"content-block-finish\", index: 0,\n * content: { type: \"text\", text: \"Hello world\" } }\n * ```\n */\nexport interface ContentBlockFinishEvent {\n event: \"content-block-finish\";\n /** Positional index of the completed block. */\n index: number;\n /** Finalized content block. */\n content: ContentBlock;\n}\n\n// ─── Usage ──────────────────────────────────────────────────────\n\n/**\n * Emitted whenever the provider reports updated usage information.\n * Each event carries a **running snapshot** (not an additive delta).\n */\nexport interface UsageUpdateEvent {\n event: \"usage\";\n /** Current usage snapshot. */\n usage: Partial<UsageMetadata>;\n}\n\n// ─── Provider Passthrough ───────────────────────────────────────\n\n/**\n * Passthrough for native provider events that don't map to standard types.\n */\nexport interface ProviderEvent {\n event: \"provider\";\n /** Provider identifier (e.g., `\"openai\"`, `\"anthropic\"`, `\"google\"`). */\n provider: string;\n /** Raw event type name from the provider SDK. */\n name: string;\n /** Raw event payload from the provider SDK. */\n payload: unknown;\n}\n\n// ─── Error ──────────────────────────────────────────────────────\n\n/**\n * Emitted on unrecoverable stream errors.\n */\nexport interface StreamErrorEvent {\n event: \"error\";\n /** Human-readable error message. */\n message: string;\n /** Optional error code for programmatic handling. */\n code?: string;\n}\n\n// ─── Union ──────────────────────────────────────────────────────\n\n/**\n * Union of all chat model stream event types.\n */\nexport type ChatModelStreamEvent =\n | MessageStartEvent\n | MessageFinishEvent\n | ContentBlockStartEvent\n | ContentBlockDeltaEvent\n | ContentBlockFinishEvent\n | UsageUpdateEvent\n | ProviderEvent\n | StreamErrorEvent;\n"],"mappings":""}
@@ -2,14 +2,6 @@ import { ContentBlock } from "../messages/content/index.cjs";
2
2
  import { UsageMetadata } from "../messages/metadata.cjs";
3
3
 
4
4
  //#region src/language_models/event.d.ts
5
- /**
6
- * Usage shape accepted by chat model stream events.
7
- *
8
- * This is intentionally wider than {@link UsageMetadata}: protocol sources
9
- * may report partial token snapshots, while {@link ChatModelStream} normalizes
10
- * them before exposing `.usage` or the final `AIMessage.usage_metadata`.
11
- */
12
- type UsageMetadataLike = Partial<UsageMetadata>;
13
5
  /**
14
6
  * Emitted once at the start of a model response.
15
7
  */
@@ -21,7 +13,7 @@ interface MessageStartEvent {
21
13
  * Initial usage snapshot, if the provider reports input token counts
22
14
  * before content begins streaming (e.g., Anthropic's `message_start`).
23
15
  */
24
- usage?: UsageMetadataLike;
16
+ usage?: Partial<UsageMetadata>;
25
17
  }
26
18
  /**
27
19
  * Finish reason for a model response.
@@ -40,9 +32,9 @@ interface MessageFinishEvent {
40
32
  /** Why the model stopped generating. */
41
33
  reason?: FinishReason;
42
34
  /** Final usage snapshot. */
43
- usage?: UsageMetadataLike;
35
+ usage?: Partial<UsageMetadata>;
44
36
  /** Provider-specific response metadata (model name, response ID, headers, etc.). */
45
- metadata?: Record<string, unknown>;
37
+ responseMetadata?: Record<string, unknown>;
46
38
  }
47
39
  /**
48
40
  * Emitted when a new content block begins streaming.
@@ -160,7 +152,7 @@ interface ContentBlockFinishEvent {
160
152
  interface UsageUpdateEvent {
161
153
  event: "usage";
162
154
  /** Current usage snapshot. */
163
- usage: UsageMetadataLike;
155
+ usage: Partial<UsageMetadata>;
164
156
  }
165
157
  /**
166
158
  * Passthrough for native provider events that don't map to standard types.
@@ -189,5 +181,5 @@ interface StreamErrorEvent {
189
181
  */
190
182
  type ChatModelStreamEvent = MessageStartEvent | MessageFinishEvent | ContentBlockStartEvent | ContentBlockDeltaEvent | ContentBlockFinishEvent | UsageUpdateEvent | ProviderEvent | StreamErrorEvent;
191
183
  //#endregion
192
- export { BlockDelta, ChatModelStreamEvent, ContentBlockDelta, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, DataDelta, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, ReasoningDelta, StreamErrorEvent, TextDelta, UsageMetadataLike, UsageUpdateEvent };
184
+ export { BlockDelta, ChatModelStreamEvent, ContentBlockDelta, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, DataDelta, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, ReasoningDelta, StreamErrorEvent, TextDelta, UsageUpdateEvent };
193
185
  //# sourceMappingURL=event.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.cts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":";;;;;;AAoGA;;;;;KArDY,iBAAA,GAAoB,OAAA,CAAQ,aAAA;;;;UAOvB,iBAAA;EACf,KAAA;EA0DwB;EAxDxB,EAAA;EAyDA;;AASF;;EA7DE,KAAA,GAAQ,iBAAA;AAAA;;AAuEV;;;;;;;KA5DY,YAAA;;AAwEZ;;UAnEiB,kBAAA;EACf,KAAA;EAmEA;EAjEA,MAAA,GAAS,YAAA;EAmEC;EAjEV,KAAA,GAAQ,iBAAA;EAiEyB;EA/DjC,QAAA,GAAW,MAAA;AAAA;;;;;;;;;;UAeI,sBAAA;EACf,KAAA;EAyDE;EAvDF,KAAA;EAuDY;EArDZ,OAAA,EAAS,YAAA;AAAA;;;;UAQM,SAAA;EACf,IAAA;EA8EO;EA5EP,IAAA;AAAA;AAwFF;;;;AAAA,UAjFiB,cAAA;EACf,IAAA;EAqFA;EAnFA,SAAA;AAAA;;AA4FF;;;UArFiB,SAAA;EACf,IAAA;EAuFA;EArFA,IAAA;EAqFwB;EAnFxB,QAAA;AAAA;;;;;UAOe,UAAA;EACf,IAAA;EA0FA;EAxFA,MAAA;IAAU,IAAA;EAAA,IAAiB,MAAA;AAAA;;;;KAMjB,iBAAA,GACR,SAAA,GACA,cAAA,GACA,SAAA,GACA,UAAA;;;;AAmGJ;;;;;;;;;;;;;;;;;;;;;;;;UAtEiB,sBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,KAAA,EAAO,iBAAA;AAAA;;;;;;;;;;UAYQ,uBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;UASM,gBAAA;EACf,KAAA;;EAEA,KAAA,EAAO,iBAAA;AAAA;;;;UAQQ,aAAA;EACf,KAAA;;EAEA,QAAA;;EAEA,IAAA;;EAEA,OAAA;AAAA;;;;UAQe,gBAAA;EACf,KAAA;;EAEA,OAAA;;EAEA,IAAA;AAAA;;;;KAQU,oBAAA,GACR,iBAAA,GACA,kBAAA,GACA,sBAAA,GACA,sBAAA,GACA,uBAAA,GACA,gBAAA,GACA,aAAA,GACA,gBAAA"}
1
+ {"version":3,"file":"event.d.cts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":";;;;AA4FA;;;AAAA,UA9CiB,iBAAA;EACf,KAAA;EAgDA;EA9CA,EAAA;EAgDS;;;AAQX;EAnDE,KAAA,GAAQ,OAAA,CAAQ,aAAA;AAAA;;;AA6DlB;;;;;AAUA;KA5DY,YAAA;;;;UAKK,kBAAA;EACf,KAAA;EA2DQ;EAzDR,MAAA,GAAS,YAAA;EAgEM;EA9Df,KAAA,GAAQ,OAAA,CAAQ,aAAA;;EAEhB,gBAAA,GAAmB,MAAA;AAAA;;;;;;AAqErB;;;;UAtDiB,sBAAA;EACf,KAAA;EAyDE;EAvDF,KAAA;EAuDY;EArDZ,OAAA,EAAS,YAAA;AAAA;;;;UAQM,SAAA;EACf,IAAA;EAyEqC;EAvErC,IAAA;AAAA;;;;;UAOe,cAAA;EACf,IAAA;EAgFe;EA9Ef,SAAA;AAAA;;;;;UAOe,SAAA;EACf,IAAA;EA2EqB;EAzErB,IAAA;EAkF+B;EAhF/B,QAAA;AAAA;;;;;UAOe,UAAA;EACf,IAAA;EAmFe;EAjFf,MAAA;IAAU,IAAA;EAAA,IAAiB,MAAA;AAAA;;;;KAMjB,iBAAA,GACR,SAAA,GACA,cAAA,GACA,SAAA,GACA,UAAA;;AAsFJ;;;;;;;;;AAaA;;;;;;;;;;;;;;;;;UAtEiB,sBAAA;EACf,KAAA;EA4EE;EA1EF,KAAA;EA2EkB;EAzElB,KAAA,EAAO,iBAAA;AAAA;;;;;;;;;;UAYQ,uBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;UASM,gBAAA;EACf,KAAA;;EAEA,KAAA,EAAO,OAAA,CAAQ,aAAA;AAAA;;;;UAQA,aAAA;EACf,KAAA;;EAEA,QAAA;;EAEA,IAAA;;EAEA,OAAA;AAAA;;;;UAQe,gBAAA;EACf,KAAA;;EAEA,OAAA;;EAEA,IAAA;AAAA;;;;KAQU,oBAAA,GACR,iBAAA,GACA,kBAAA,GACA,sBAAA,GACA,sBAAA,GACA,uBAAA,GACA,gBAAA,GACA,aAAA,GACA,gBAAA"}
@@ -2,14 +2,6 @@ import { ContentBlock } from "../messages/content/index.js";
2
2
  import { UsageMetadata } from "../messages/metadata.js";
3
3
 
4
4
  //#region src/language_models/event.d.ts
5
- /**
6
- * Usage shape accepted by chat model stream events.
7
- *
8
- * This is intentionally wider than {@link UsageMetadata}: protocol sources
9
- * may report partial token snapshots, while {@link ChatModelStream} normalizes
10
- * them before exposing `.usage` or the final `AIMessage.usage_metadata`.
11
- */
12
- type UsageMetadataLike = Partial<UsageMetadata>;
13
5
  /**
14
6
  * Emitted once at the start of a model response.
15
7
  */
@@ -21,7 +13,7 @@ interface MessageStartEvent {
21
13
  * Initial usage snapshot, if the provider reports input token counts
22
14
  * before content begins streaming (e.g., Anthropic's `message_start`).
23
15
  */
24
- usage?: UsageMetadataLike;
16
+ usage?: Partial<UsageMetadata>;
25
17
  }
26
18
  /**
27
19
  * Finish reason for a model response.
@@ -40,9 +32,9 @@ interface MessageFinishEvent {
40
32
  /** Why the model stopped generating. */
41
33
  reason?: FinishReason;
42
34
  /** Final usage snapshot. */
43
- usage?: UsageMetadataLike;
35
+ usage?: Partial<UsageMetadata>;
44
36
  /** Provider-specific response metadata (model name, response ID, headers, etc.). */
45
- metadata?: Record<string, unknown>;
37
+ responseMetadata?: Record<string, unknown>;
46
38
  }
47
39
  /**
48
40
  * Emitted when a new content block begins streaming.
@@ -160,7 +152,7 @@ interface ContentBlockFinishEvent {
160
152
  interface UsageUpdateEvent {
161
153
  event: "usage";
162
154
  /** Current usage snapshot. */
163
- usage: UsageMetadataLike;
155
+ usage: Partial<UsageMetadata>;
164
156
  }
165
157
  /**
166
158
  * Passthrough for native provider events that don't map to standard types.
@@ -189,5 +181,5 @@ interface StreamErrorEvent {
189
181
  */
190
182
  type ChatModelStreamEvent = MessageStartEvent | MessageFinishEvent | ContentBlockStartEvent | ContentBlockDeltaEvent | ContentBlockFinishEvent | UsageUpdateEvent | ProviderEvent | StreamErrorEvent;
191
183
  //#endregion
192
- export { BlockDelta, ChatModelStreamEvent, ContentBlockDelta, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, DataDelta, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, ReasoningDelta, StreamErrorEvent, TextDelta, UsageMetadataLike, UsageUpdateEvent };
184
+ export { BlockDelta, ChatModelStreamEvent, ContentBlockDelta, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, DataDelta, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, ReasoningDelta, StreamErrorEvent, TextDelta, UsageUpdateEvent };
193
185
  //# sourceMappingURL=event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":";;;;;;AAoGA;;;;;KArDY,iBAAA,GAAoB,OAAA,CAAQ,aAAA;;;;UAOvB,iBAAA;EACf,KAAA;EA0DwB;EAxDxB,EAAA;EAyDA;;AASF;;EA7DE,KAAA,GAAQ,iBAAA;AAAA;;AAuEV;;;;;;;KA5DY,YAAA;;AAwEZ;;UAnEiB,kBAAA;EACf,KAAA;EAmEA;EAjEA,MAAA,GAAS,YAAA;EAmEC;EAjEV,KAAA,GAAQ,iBAAA;EAiEyB;EA/DjC,QAAA,GAAW,MAAA;AAAA;;;;;;;;;;UAeI,sBAAA;EACf,KAAA;EAyDE;EAvDF,KAAA;EAuDY;EArDZ,OAAA,EAAS,YAAA;AAAA;;;;UAQM,SAAA;EACf,IAAA;EA8EO;EA5EP,IAAA;AAAA;AAwFF;;;;AAAA,UAjFiB,cAAA;EACf,IAAA;EAqFA;EAnFA,SAAA;AAAA;;AA4FF;;;UArFiB,SAAA;EACf,IAAA;EAuFA;EArFA,IAAA;EAqFwB;EAnFxB,QAAA;AAAA;;;;;UAOe,UAAA;EACf,IAAA;EA0FA;EAxFA,MAAA;IAAU,IAAA;EAAA,IAAiB,MAAA;AAAA;;;;KAMjB,iBAAA,GACR,SAAA,GACA,cAAA,GACA,SAAA,GACA,UAAA;;;;AAmGJ;;;;;;;;;;;;;;;;;;;;;;;;UAtEiB,sBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,KAAA,EAAO,iBAAA;AAAA;;;;;;;;;;UAYQ,uBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;UASM,gBAAA;EACf,KAAA;;EAEA,KAAA,EAAO,iBAAA;AAAA;;;;UAQQ,aAAA;EACf,KAAA;;EAEA,QAAA;;EAEA,IAAA;;EAEA,OAAA;AAAA;;;;UAQe,gBAAA;EACf,KAAA;;EAEA,OAAA;;EAEA,IAAA;AAAA;;;;KAQU,oBAAA,GACR,iBAAA,GACA,kBAAA,GACA,sBAAA,GACA,sBAAA,GACA,uBAAA,GACA,gBAAA,GACA,aAAA,GACA,gBAAA"}
1
+ {"version":3,"file":"event.d.ts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":";;;;AA4FA;;;AAAA,UA9CiB,iBAAA;EACf,KAAA;EAgDA;EA9CA,EAAA;EAgDS;;;AAQX;EAnDE,KAAA,GAAQ,OAAA,CAAQ,aAAA;AAAA;;;AA6DlB;;;;;AAUA;KA5DY,YAAA;;;;UAKK,kBAAA;EACf,KAAA;EA2DQ;EAzDR,MAAA,GAAS,YAAA;EAgEM;EA9Df,KAAA,GAAQ,OAAA,CAAQ,aAAA;;EAEhB,gBAAA,GAAmB,MAAA;AAAA;;;;;;AAqErB;;;;UAtDiB,sBAAA;EACf,KAAA;EAyDE;EAvDF,KAAA;EAuDY;EArDZ,OAAA,EAAS,YAAA;AAAA;;;;UAQM,SAAA;EACf,IAAA;EAyEqC;EAvErC,IAAA;AAAA;;;;;UAOe,cAAA;EACf,IAAA;EAgFe;EA9Ef,SAAA;AAAA;;;;;UAOe,SAAA;EACf,IAAA;EA2EqB;EAzErB,IAAA;EAkF+B;EAhF/B,QAAA;AAAA;;;;;UAOe,UAAA;EACf,IAAA;EAmFe;EAjFf,MAAA;IAAU,IAAA;EAAA,IAAiB,MAAA;AAAA;;;;KAMjB,iBAAA,GACR,SAAA,GACA,cAAA,GACA,SAAA,GACA,UAAA;;AAsFJ;;;;;;;;;AAaA;;;;;;;;;;;;;;;;;UAtEiB,sBAAA;EACf,KAAA;EA4EE;EA1EF,KAAA;EA2EkB;EAzElB,KAAA,EAAO,iBAAA;AAAA;;;;;;;;;;UAYQ,uBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;UASM,gBAAA;EACf,KAAA;;EAEA,KAAA,EAAO,OAAA,CAAQ,aAAA;AAAA;;;;UAQA,aAAA;EACf,KAAA;;EAEA,QAAA;;EAEA,IAAA;;EAEA,OAAA;AAAA;;;;UAQe,gBAAA;EACf,KAAA;;EAEA,OAAA;;EAEA,IAAA;AAAA;;;;KAQU,oBAAA,GACR,iBAAA,GACA,kBAAA,GACA,sBAAA,GACA,sBAAA,GACA,uBAAA,GACA,gBAAA,GACA,aAAA,GACA,gBAAA"}