@langchain/core 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/caches/index.d.cts.map +1 -1
- package/dist/caches/index.d.ts.map +1 -1
- package/dist/callbacks/base.cjs.map +1 -1
- package/dist/callbacks/base.d.cts +2 -2
- package/dist/callbacks/base.d.cts.map +1 -1
- package/dist/callbacks/base.d.ts +2 -2
- package/dist/callbacks/base.d.ts.map +1 -1
- package/dist/callbacks/base.js.map +1 -1
- package/dist/callbacks/manager.cjs +3 -3
- package/dist/callbacks/manager.cjs.map +1 -1
- package/dist/callbacks/manager.d.cts +1 -1
- package/dist/callbacks/manager.d.cts.map +1 -1
- package/dist/callbacks/manager.d.ts +1 -1
- package/dist/callbacks/manager.d.ts.map +1 -1
- package/dist/callbacks/manager.js +3 -3
- package/dist/callbacks/manager.js.map +1 -1
- package/dist/load/import_map.cjs +2 -0
- package/dist/load/import_map.cjs.map +1 -1
- package/dist/load/import_map.js +2 -0
- package/dist/load/import_map.js.map +1 -1
- package/dist/load/index.d.ts.map +1 -1
- package/dist/messages/tool.d.ts.map +1 -1
- package/dist/runnables/base.cjs +1 -1
- package/dist/runnables/base.cjs.map +1 -1
- package/dist/runnables/base.js +1 -1
- package/dist/runnables/base.js.map +1 -1
- package/dist/tracers/base.cjs +5 -2
- package/dist/tracers/base.cjs.map +1 -1
- package/dist/tracers/base.d.cts +1 -1
- package/dist/tracers/base.d.cts.map +1 -1
- package/dist/tracers/base.d.ts +1 -1
- package/dist/tracers/base.d.ts.map +1 -1
- package/dist/tracers/base.js +5 -2
- package/dist/tracers/base.js.map +1 -1
- package/dist/tracers/tracer_langchain.cjs +31 -3
- package/dist/tracers/tracer_langchain.cjs.map +1 -1
- package/dist/tracers/tracer_langchain.d.cts +8 -7
- package/dist/tracers/tracer_langchain.d.cts.map +1 -1
- package/dist/tracers/tracer_langchain.d.ts +8 -7
- package/dist/tracers/tracer_langchain.d.ts.map +1 -1
- package/dist/tracers/tracer_langchain.js +31 -3
- package/dist/tracers/tracer_langchain.js.map +1 -1
- package/dist/utils/context.cjs +107 -0
- package/dist/utils/context.cjs.map +1 -0
- package/dist/utils/context.d.cts +44 -0
- package/dist/utils/context.d.cts.map +1 -0
- package/dist/utils/context.d.ts +44 -0
- package/dist/utils/context.d.ts.map +1 -0
- package/dist/utils/context.js +101 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/vectorstores.d.cts.map +1 -1
- package/package.json +13 -2
- package/utils/context.cjs +1 -0
- package/utils/context.d.cts +1 -0
- package/utils/context.d.ts +1 -0
- package/utils/context.js +1 -0
package/dist/tracers/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","names":["runTree?: RunTree","run?: Run","parentRun?: Run","value: any","defaultKey: string","x: BaseCallbackHandler","_fields?: BaseCallbackHandlerInput","runId?: string","error: unknown","parentRun: Run","childRun: Run","run: Run","parentRunId: string | undefined","llm: Serialized","prompts: string[]","runId: string","parentRunId?: string","extraParams?: KVMap","tags?: string[]","metadata?: KVMap","name?: string","messages: BaseMessage[][]","output: LLMResult","_parentRunId?: string","_tags?: string[]","extraParams?: Record<string, unknown>","chain: Serialized","inputs: ChainValues","runType?: string","outputs: ChainValues","kwargs?: { inputs?: Record<string, unknown> }","tool: Serialized","input: string","output: any","action: AgentAction","action: AgentFinish","retriever: Serialized","query: string","documents: Document<Record<string, unknown>>[]","text: string","token: string","idx: NewTokenIndices","fields?: HandleLLMNewTokenCallbackFields"],"sources":["../../src/tracers/base.ts"],"sourcesContent":["import { KVMap, BaseRun } from \"langsmith/schemas\";\nimport { RunTree, convertToDottedOrderFormat } from \"langsmith/run_trees\";\n\nimport type { ChainValues } from \"../utils/types/index.js\";\nimport type { AgentAction, AgentFinish } from \"../agents.js\";\nimport type { LLMResult } from \"../outputs.js\";\nimport type { BaseMessage } from \"../messages/base.js\";\nimport { Serialized } from \"../load/serializable.js\";\nimport {\n BaseCallbackHandler,\n BaseCallbackHandlerInput,\n HandleLLMNewTokenCallbackFields,\n NewTokenIndices,\n} from \"../callbacks/base.js\";\nimport type { Document } from \"../documents/document.js\";\nimport { getRuntimeEnvironment } from \"../utils/env.js\";\n\nexport type RunType = string;\n\n// TODO: Remove this type and just use the base LangSmith Run type.\nexport interface Run extends BaseRun {\n // some optional fields are always present here\n id: string;\n start_time: number;\n end_time?: number;\n execution_order: number;\n // some additional fields that don't exist in sdk runs\n child_runs: this[];\n child_execution_order: number;\n events: Array<{\n name: string;\n time: string;\n kwargs?: Record<string, unknown>;\n }>;\n trace_id?: string;\n dotted_order?: string;\n /** @internal */\n _serialized_start_time?: string;\n}\n\n// TODO: Remove and just use base LangSmith Run type\nconst convertRunTreeToRun = (runTree?: RunTree): Run | undefined => {\n if (!runTree) {\n return undefined;\n }\n // Important that we return the raw run tree object since the reference\n // is mutated in other places.\n // TODO: Remove places where this is being done.\n\n runTree.events = runTree.events ?? [];\n runTree.child_runs = runTree.child_runs ?? [];\n // TODO: Remove this cast and just use the LangSmith RunTree type.\n return runTree as unknown as Run;\n};\n\nfunction convertRunToRunTree(run?: Run, parentRun?: Run): RunTree | undefined {\n if (!run) {\n return undefined;\n }\n return new RunTree({\n ...run,\n start_time: run._serialized_start_time ?? run.start_time,\n parent_run: convertRunToRunTree(parentRun),\n child_runs: run.child_runs\n .map((r) => convertRunToRunTree(r))\n .filter((r): r is RunTree => r !== undefined),\n extra: {\n ...run.extra,\n runtime: getRuntimeEnvironment(),\n },\n tracingEnabled: false,\n });\n}\n\nexport interface AgentRun extends Run {\n actions: AgentAction[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _coerceToDict(value: any, defaultKey: string) {\n return value && !Array.isArray(value) && typeof value === \"object\"\n ? value\n : { [defaultKey]: value };\n}\n\nexport function isBaseTracer(x: BaseCallbackHandler): x is BaseTracer {\n return typeof (x as BaseTracer)._addRunToRunMap === \"function\";\n}\n\nexport abstract class BaseTracer extends BaseCallbackHandler {\n /** @deprecated Use `runTreeMap` instead. */\n protected runMap: Map<string, Run> = new Map();\n\n protected runTreeMap: Map<string, RunTree> = new Map();\n\n protected usesRunTreeMap = false;\n\n constructor(_fields?: BaseCallbackHandlerInput) {\n super(...arguments);\n }\n\n copy(): this {\n return this;\n }\n\n protected getRunById(runId?: string): Run | undefined {\n if (runId === undefined) {\n return undefined;\n }\n return this.usesRunTreeMap\n ? convertRunTreeToRun(this.runTreeMap.get(runId))\n : this.runMap.get(runId);\n }\n\n protected stringifyError(error: unknown) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (error instanceof Error) {\n return error.message + (error?.stack ? `\\n\\n${error.stack}` : \"\");\n }\n\n if (typeof error === \"string\") {\n return error;\n }\n\n return `${error}`;\n }\n\n protected abstract persistRun(run: Run): Promise<void>;\n\n protected _addChildRun(parentRun: Run, childRun: Run) {\n parentRun.child_runs.push(childRun);\n }\n\n _addRunToRunMap(run: Run) {\n const { dottedOrder: currentDottedOrder, microsecondPrecisionDatestring } =\n convertToDottedOrderFormat(\n new Date(run.start_time).getTime(),\n run.id,\n run.execution_order\n );\n const storedRun = { ...run };\n const parentRun = this.getRunById(storedRun.parent_run_id);\n if (storedRun.parent_run_id !== undefined) {\n if (parentRun) {\n this._addChildRun(parentRun, storedRun);\n parentRun.child_execution_order = Math.max(\n parentRun.child_execution_order,\n storedRun.child_execution_order\n );\n storedRun.trace_id = parentRun.trace_id;\n if (parentRun.dotted_order !== undefined) {\n storedRun.dotted_order = [\n parentRun.dotted_order,\n currentDottedOrder,\n ].join(\".\");\n storedRun._serialized_start_time = microsecondPrecisionDatestring;\n } else {\n // This can happen naturally for callbacks added within a run\n // console.debug(`Parent run with UUID ${storedRun.parent_run_id} has no dotted order.`);\n }\n } else {\n // This can happen naturally for callbacks added within a run\n // console.debug(\n // `Parent run with UUID ${storedRun.parent_run_id} not found.`\n // );\n\n // Child run with no trace_id and dotted_order causes 400 error on LangSmith.\n // So we set the parent_run_id to undefined as a workaround.\n // This run will be shown as isolated run on LangSmith.\n storedRun.parent_run_id = undefined;\n }\n } else {\n storedRun.trace_id = storedRun.id;\n storedRun.dotted_order = currentDottedOrder;\n storedRun._serialized_start_time = microsecondPrecisionDatestring;\n }\n if (this.usesRunTreeMap) {\n const runTree = convertRunToRunTree(storedRun, parentRun);\n if (runTree !== undefined) {\n this.runTreeMap.set(storedRun.id, runTree);\n }\n } else {\n this.runMap.set(storedRun.id, storedRun);\n }\n return storedRun;\n }\n\n protected async _endTrace(run: Run): Promise<void> {\n const parentRun =\n run.parent_run_id !== undefined && this.getRunById(run.parent_run_id);\n if (parentRun) {\n parentRun.child_execution_order = Math.max(\n parentRun.child_execution_order,\n run.child_execution_order\n );\n } else {\n await this.persistRun(run);\n }\n await this.onRunUpdate?.(run);\n if (this.usesRunTreeMap) {\n this.runTreeMap.delete(run.id);\n } else {\n this.runMap.delete(run.id);\n }\n }\n\n protected _getExecutionOrder(parentRunId: string | undefined): number {\n const parentRun = parentRunId !== undefined && this.getRunById(parentRunId);\n // If a run has no parent then execution order is 1\n if (!parentRun) {\n return 1;\n }\n\n return parentRun.child_execution_order + 1;\n }\n\n /**\n * Create and add a run to the run map for LLM start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const finalExtraParams = metadata\n ? { ...extraParams, metadata }\n : extraParams;\n const run: Run = {\n id: runId,\n name: name ?? llm.id[llm.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: llm,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { prompts },\n execution_order,\n child_runs: [],\n child_execution_order: execution_order,\n run_type: \"llm\",\n extra: finalExtraParams ?? {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForLLMStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onLLMStart?.(run);\n return run;\n }\n\n /**\n * Create and add a run to the run map for chat model start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const finalExtraParams = metadata\n ? { ...extraParams, metadata }\n : extraParams;\n const run: Run = {\n id: runId,\n name: name ?? llm.id[llm.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: llm,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { messages },\n execution_order,\n child_runs: [],\n child_execution_order: execution_order,\n run_type: \"llm\",\n extra: finalExtraParams ?? {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForChatModelStart(\n llm,\n messages,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onLLMStart?.(run);\n return run;\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n extraParams?: Record<string, unknown>\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"llm\") {\n throw new Error(\"No LLM run to end.\");\n }\n run.end_time = Date.now();\n run.outputs = output;\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n run.extra = { ...run.extra, ...extraParams };\n await this.onLLMEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleLLMError(\n error: unknown,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n extraParams?: Record<string, unknown>\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"llm\") {\n throw new Error(\"No LLM run to end.\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n run.extra = { ...run.extra, ...extraParams };\n await this.onLLMError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n /**\n * Create and add a run to the run map for chain start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n runType?: string,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const run: Run = {\n id: runId,\n name: name ?? chain.id[chain.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: chain,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs,\n execution_order,\n child_execution_order: execution_order,\n run_type: runType ?? \"chain\",\n child_runs: [],\n extra: metadata ? { metadata } : {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n runType?: string,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForChainStart(\n chain,\n inputs,\n runId,\n parentRunId,\n tags,\n metadata,\n runType,\n name\n );\n await this.onRunCreate?.(run);\n await this.onChainStart?.(run);\n return run;\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run) {\n throw new Error(\"No chain run to end.\");\n }\n run.end_time = Date.now();\n run.outputs = _coerceToDict(outputs, \"output\");\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n if (kwargs?.inputs !== undefined) {\n run.inputs = _coerceToDict(kwargs.inputs, \"input\");\n }\n await this.onChainEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleChainError(\n error: unknown,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run) {\n throw new Error(\"No chain run to end.\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n if (kwargs?.inputs !== undefined) {\n run.inputs = _coerceToDict(kwargs.inputs, \"input\");\n }\n await this.onChainError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n /**\n * Create and add a run to the run map for tool start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const run: Run = {\n id: runId,\n name: name ?? tool.id[tool.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: tool,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { input },\n execution_order,\n child_execution_order: execution_order,\n run_type: \"tool\",\n child_runs: [],\n extra: metadata ? { metadata } : {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForToolStart(\n tool,\n input,\n runId,\n parentRunId,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onToolStart?.(run);\n return run;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async handleToolEnd(output: any, runId: string): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"tool\") {\n throw new Error(\"No tool run to end\");\n }\n run.end_time = Date.now();\n run.outputs = { output };\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onToolEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleToolError(error: unknown, runId: string): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"tool\") {\n throw new Error(\"No tool run to end\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onToolError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleAgentAction(action: AgentAction, runId: string): Promise<void> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"chain\") {\n return;\n }\n const agentRun = run as AgentRun;\n agentRun.actions = agentRun.actions || [];\n agentRun.actions.push(action);\n agentRun.events.push({\n name: \"agent_action\",\n time: new Date().toISOString(),\n kwargs: { action },\n });\n await this.onAgentAction?.(run as AgentRun);\n }\n\n async handleAgentEnd(action: AgentFinish, runId: string): Promise<void> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"chain\") {\n return;\n }\n run.events.push({\n name: \"agent_end\",\n time: new Date().toISOString(),\n kwargs: { action },\n });\n await this.onAgentEnd?.(run);\n }\n\n /**\n * Create and add a run to the run map for retriever start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const run: Run = {\n id: runId,\n name: name ?? retriever.id[retriever.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: retriever,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { query },\n execution_order,\n child_execution_order: execution_order,\n run_type: \"retriever\",\n child_runs: [],\n extra: metadata ? { metadata } : {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForRetrieverStart(\n retriever,\n query,\n runId,\n parentRunId,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onRetrieverStart?.(run);\n return run;\n }\n\n async handleRetrieverEnd(\n documents: Document<Record<string, unknown>>[],\n runId: string\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"retriever\") {\n throw new Error(\"No retriever run to end\");\n }\n run.end_time = Date.now();\n run.outputs = { documents };\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onRetrieverEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleRetrieverError(error: unknown, runId: string): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"retriever\") {\n throw new Error(\"No retriever run to end\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onRetrieverError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleText(text: string, runId: string): Promise<void> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"chain\") {\n return;\n }\n run.events.push({\n name: \"text\",\n time: new Date().toISOString(),\n kwargs: { text },\n });\n await this.onText?.(run);\n }\n\n async handleLLMNewToken(\n token: string,\n idx: NewTokenIndices,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"llm\") {\n throw new Error(\n `Invalid \"runId\" provided to \"handleLLMNewToken\" callback.`\n );\n }\n run.events.push({\n name: \"new_token\",\n time: new Date().toISOString(),\n kwargs: { token, idx, chunk: fields?.chunk },\n });\n await this.onLLMNewToken?.(run, token, { chunk: fields?.chunk });\n return run;\n }\n\n // custom event handlers\n\n onRunCreate?(run: Run): void | Promise<void>;\n\n onRunUpdate?(run: Run): void | Promise<void>;\n\n onLLMStart?(run: Run): void | Promise<void>;\n\n onLLMEnd?(run: Run): void | Promise<void>;\n\n onLLMError?(run: Run): void | Promise<void>;\n\n onChainStart?(run: Run): void | Promise<void>;\n\n onChainEnd?(run: Run): void | Promise<void>;\n\n onChainError?(run: Run): void | Promise<void>;\n\n onToolStart?(run: Run): void | Promise<void>;\n\n onToolEnd?(run: Run): void | Promise<void>;\n\n onToolError?(run: Run): void | Promise<void>;\n\n onAgentAction?(run: Run): void | Promise<void>;\n\n onAgentEnd?(run: Run): void | Promise<void>;\n\n onRetrieverStart?(run: Run): void | Promise<void>;\n\n onRetrieverEnd?(run: Run): void | Promise<void>;\n\n onRetrieverError?(run: Run): void | Promise<void>;\n\n onText?(run: Run): void | Promise<void>;\n\n onLLMNewToken?(\n run: Run,\n token: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: { chunk: any }\n ): void | Promise<void>;\n}\n"],"mappings":";;;;;;;;;;;AAyCA,MAAM,sBAAsB,CAACA,YAAuC;AAClE,KAAI,CAAC,QACH,QAAO;CAMT,QAAQ,SAAS,QAAQ,UAAU,CAAE;CACrC,QAAQ,aAAa,QAAQ,cAAc,CAAE;AAE7C,QAAO;AACR;AAED,SAAS,oBAAoBC,KAAWC,WAAsC;AAC5E,KAAI,CAAC,IACH,QAAO;AAET,QAAO,IAAI,QAAQ;EACjB,GAAG;EACH,YAAY,IAAI,0BAA0B,IAAI;EAC9C,YAAY,oBAAoB,UAAU;EAC1C,YAAY,IAAI,WACb,IAAI,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAClC,OAAO,CAAC,MAAoB,MAAM,OAAU;EAC/C,OAAO;GACL,GAAG,IAAI;GACP,SAAS,uBAAuB;EACjC;EACD,gBAAgB;CACjB;AACF;AAOD,SAAS,cAAcC,OAAYC,YAAoB;AACrD,QAAO,SAAS,CAAC,MAAM,QAAQ,MAAM,IAAI,OAAO,UAAU,WACtD,QACA,GAAG,aAAa,MAAO;AAC5B;AAED,SAAgB,aAAaC,GAAyC;AACpE,QAAO,OAAQ,EAAiB,oBAAoB;AACrD;AAED,IAAsB,aAAtB,cAAyC,oBAAoB;;CAE3D,AAAU,yBAA2B,IAAI;CAEzC,AAAU,6BAAmC,IAAI;CAEjD,AAAU,iBAAiB;CAE3B,YAAYC,SAAoC;EAC9C,MAAM,GAAG,UAAU;CACpB;CAED,OAAa;AACX,SAAO;CACR;CAED,AAAU,WAAWC,OAAiC;AACpD,MAAI,UAAU,OACZ,QAAO;AAET,SAAO,KAAK,iBACR,oBAAoB,KAAK,WAAW,IAAI,MAAM,CAAC,GAC/C,KAAK,OAAO,IAAI,MAAM;CAC3B;CAED,AAAU,eAAeC,OAAgB;AAEvC,MAAI,iBAAiB,MACnB,QAAO,MAAM,WAAW,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,GAAG;AAGhE,MAAI,OAAO,UAAU,SACnB,QAAO;AAGT,SAAO,GAAG,OAAO;CAClB;CAID,AAAU,aAAaC,WAAgBC,UAAe;EACpD,UAAU,WAAW,KAAK,SAAS;CACpC;CAED,gBAAgBC,KAAU;EACxB,MAAM,EAAE,aAAa,oBAAoB,gCAAgC,GACvE,2BACE,IAAI,KAAK,IAAI,YAAY,SAAS,EAClC,IAAI,IACJ,IAAI,gBACL;EACH,MAAM,YAAY,EAAE,GAAG,IAAK;EAC5B,MAAM,YAAY,KAAK,WAAW,UAAU,cAAc;AAC1D,MAAI,UAAU,kBAAkB,OAC9B,KAAI,WAAW;GACb,KAAK,aAAa,WAAW,UAAU;GACvC,UAAU,wBAAwB,KAAK,IACrC,UAAU,uBACV,UAAU,sBACX;GACD,UAAU,WAAW,UAAU;AAC/B,OAAI,UAAU,iBAAiB,QAAW;IACxC,UAAU,eAAe,CACvB,UAAU,cACV,kBACD,EAAC,KAAK,IAAI;IACX,UAAU,yBAAyB;GACpC;EAIF,OASC,UAAU,gBAAgB;OAEvB;GACL,UAAU,WAAW,UAAU;GAC/B,UAAU,eAAe;GACzB,UAAU,yBAAyB;EACpC;AACD,MAAI,KAAK,gBAAgB;GACvB,MAAM,UAAU,oBAAoB,WAAW,UAAU;AACzD,OAAI,YAAY,QACd,KAAK,WAAW,IAAI,UAAU,IAAI,QAAQ;EAE7C,OACC,KAAK,OAAO,IAAI,UAAU,IAAI,UAAU;AAE1C,SAAO;CACR;CAED,MAAgB,UAAUA,KAAyB;EACjD,MAAM,YACJ,IAAI,kBAAkB,UAAa,KAAK,WAAW,IAAI,cAAc;AACvE,MAAI,WACF,UAAU,wBAAwB,KAAK,IACrC,UAAU,uBACV,IAAI,sBACL;OAED,MAAM,KAAK,WAAW,IAAI;EAE5B,MAAM,KAAK,cAAc,IAAI;AAC7B,MAAI,KAAK,gBACP,KAAK,WAAW,OAAO,IAAI,GAAG;OAE9B,KAAK,OAAO,OAAO,IAAI,GAAG;CAE7B;CAED,AAAU,mBAAmBC,aAAyC;EACpE,MAAM,YAAY,gBAAgB,UAAa,KAAK,WAAW,YAAY;AAE3E,MAAI,CAAC,UACH,QAAO;AAGT,SAAO,UAAU,wBAAwB;CAC1C;;;;;;CAOD,sBACEC,KACAC,SACAC,OACAC,aACAC,aACAC,MACAC,UACAC,MACA;EACA,MAAM,kBAAkB,KAAK,mBAAmB,YAAY;EAC5D,MAAM,aAAa,KAAK,KAAK;EAC7B,MAAM,mBAAmB,WACrB;GAAE,GAAG;GAAa;EAAU,IAC5B;EACJ,MAAMT,MAAW;GACf,IAAI;GACJ,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,SAAS;GACrC,eAAe;GACf;GACA,YAAY;GACZ,QAAQ,CACN;IACE,MAAM;IACN,MAAM,IAAI,KAAK,YAAY,aAAa;GACzC,CACF;GACD,QAAQ,EAAE,QAAS;GACnB;GACA,YAAY,CAAE;GACd,uBAAuB;GACvB,UAAU;GACV,OAAO,oBAAoB,CAAE;GAC7B,MAAM,QAAQ,CAAE;EACjB;AACD,SAAO,KAAK,gBAAgB,IAAI;CACjC;CAED,MAAM,eACJE,KACAC,SACAC,OACAC,aACAC,aACAC,MACAC,UACAC,MACc;EACd,MAAM,MACJ,KAAK,WAAW,MAAM,IACtB,KAAK,sBACH,KACA,SACA,OACA,aACA,aACA,MACA,UACA,KACD;EACH,MAAM,KAAK,cAAc,IAAI;EAC7B,MAAM,KAAK,aAAa,IAAI;AAC5B,SAAO;CACR;;;;;;CAOD,4BACEP,KACAQ,UACAN,OACAC,aACAC,aACAC,MACAC,UACAC,MACA;EACA,MAAM,kBAAkB,KAAK,mBAAmB,YAAY;EAC5D,MAAM,aAAa,KAAK,KAAK;EAC7B,MAAM,mBAAmB,WACrB;GAAE,GAAG;GAAa;EAAU,IAC5B;EACJ,MAAMT,MAAW;GACf,IAAI;GACJ,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,SAAS;GACrC,eAAe;GACf;GACA,YAAY;GACZ,QAAQ,CACN;IACE,MAAM;IACN,MAAM,IAAI,KAAK,YAAY,aAAa;GACzC,CACF;GACD,QAAQ,EAAE,SAAU;GACpB;GACA,YAAY,CAAE;GACd,uBAAuB;GACvB,UAAU;GACV,OAAO,oBAAoB,CAAE;GAC7B,MAAM,QAAQ,CAAE;EACjB;AACD,SAAO,KAAK,gBAAgB,IAAI;CACjC;CAED,MAAM,qBACJE,KACAQ,UACAN,OACAC,aACAC,aACAC,MACAC,UACAC,MACc;EACd,MAAM,MACJ,KAAK,WAAW,MAAM,IACtB,KAAK,4BACH,KACA,UACA,OACA,aACA,aACA,MACA,UACA,KACD;EACH,MAAM,KAAK,cAAc,IAAI;EAC7B,MAAM,KAAK,aAAa,IAAI;AAC5B,SAAO;CACR;CAED,MAAM,aACJE,QACAP,OACAQ,cACAC,OACAC,aACc;EACd,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,MAC5B,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,UAAU;EACd,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;EACF,IAAI,QAAQ;GAAE,GAAG,IAAI;GAAO,GAAG;EAAa;EAC5C,MAAM,KAAK,WAAW,IAAI;EAC1B,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;CAED,MAAM,eACJjB,OACAO,OACAQ,cACAC,OACAC,aACc;EACd,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,MAC5B,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,QAAQ,KAAK,eAAe,MAAM;EACtC,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;EACF,IAAI,QAAQ;GAAE,GAAG,IAAI;GAAO,GAAG;EAAa;EAC5C,MAAM,KAAK,aAAa,IAAI;EAC5B,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;;;;;;CAOD,wBACEC,OACAC,QACAZ,OACAC,aACAE,MACAC,UACAS,SACAR,MACA;EACA,MAAM,kBAAkB,KAAK,mBAAmB,YAAY;EAC5D,MAAM,aAAa,KAAK,KAAK;EAC7B,MAAMT,MAAW;GACf,IAAI;GACJ,MAAM,QAAQ,MAAM,GAAG,MAAM,GAAG,SAAS;GACzC,eAAe;GACf;GACA,YAAY;GACZ,QAAQ,CACN;IACE,MAAM;IACN,MAAM,IAAI,KAAK,YAAY,aAAa;GACzC,CACF;GACD;GACA;GACA,uBAAuB;GACvB,UAAU,WAAW;GACrB,YAAY,CAAE;GACd,OAAO,WAAW,EAAE,SAAU,IAAG,CAAE;GACnC,MAAM,QAAQ,CAAE;EACjB;AACD,SAAO,KAAK,gBAAgB,IAAI;CACjC;CAED,MAAM,iBACJe,OACAC,QACAZ,OACAC,aACAE,MACAC,UACAS,SACAR,MACc;EACd,MAAM,MACJ,KAAK,WAAW,MAAM,IACtB,KAAK,wBACH,OACA,QACA,OACA,aACA,MACA,UACA,SACA,KACD;EACH,MAAM,KAAK,cAAc,IAAI;EAC7B,MAAM,KAAK,eAAe,IAAI;AAC9B,SAAO;CACR;CAED,MAAM,eACJS,SACAd,OACAQ,cACAC,OACAM,QACc;EACd,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,IACH,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,UAAU,cAAc,SAAS,SAAS;EAC9C,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;AACF,MAAI,QAAQ,WAAW,QACrB,IAAI,SAAS,cAAc,OAAO,QAAQ,QAAQ;EAEpD,MAAM,KAAK,aAAa,IAAI;EAC5B,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;CAED,MAAM,iBACJtB,OACAO,OACAQ,cACAC,OACAM,QACc;EACd,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,IACH,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,QAAQ,KAAK,eAAe,MAAM;EACtC,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;AACF,MAAI,QAAQ,WAAW,QACrB,IAAI,SAAS,cAAc,OAAO,QAAQ,QAAQ;EAEpD,MAAM,KAAK,eAAe,IAAI;EAC9B,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;;;;;;CAOD,uBACEC,MACAC,OACAjB,OACAC,aACAE,MACAC,UACAC,MACA;EACA,MAAM,kBAAkB,KAAK,mBAAmB,YAAY;EAC5D,MAAM,aAAa,KAAK,KAAK;EAC7B,MAAMT,MAAW;GACf,IAAI;GACJ,MAAM,QAAQ,KAAK,GAAG,KAAK,GAAG,SAAS;GACvC,eAAe;GACf;GACA,YAAY;GACZ,QAAQ,CACN;IACE,MAAM;IACN,MAAM,IAAI,KAAK,YAAY,aAAa;GACzC,CACF;GACD,QAAQ,EAAE,MAAO;GACjB;GACA,uBAAuB;GACvB,UAAU;GACV,YAAY,CAAE;GACd,OAAO,WAAW,EAAE,SAAU,IAAG,CAAE;GACnC,MAAM,QAAQ,CAAE;EACjB;AACD,SAAO,KAAK,gBAAgB,IAAI;CACjC;CAED,MAAM,gBACJoB,MACAC,OACAjB,OACAC,aACAE,MACAC,UACAC,MACc;EACd,MAAM,MACJ,KAAK,WAAW,MAAM,IACtB,KAAK,uBACH,MACA,OACA,OACA,aACA,MACA,UACA,KACD;EACH,MAAM,KAAK,cAAc,IAAI;EAC7B,MAAM,KAAK,cAAc,IAAI;AAC7B,SAAO;CACR;CAGD,MAAM,cAAca,QAAalB,OAA6B;EAC5D,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,OAC5B,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,UAAU,EAAE,OAAQ;EACxB,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;EACF,MAAM,KAAK,YAAY,IAAI;EAC3B,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;CAED,MAAM,gBAAgBP,OAAgBO,OAA6B;EACjE,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,OAC5B,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,QAAQ,KAAK,eAAe,MAAM;EACtC,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;EACF,MAAM,KAAK,cAAc,IAAI;EAC7B,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;CAED,MAAM,kBAAkBmB,QAAqBnB,OAA8B;EACzE,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,QAC5B;EAEF,MAAM,WAAW;EACjB,SAAS,UAAU,SAAS,WAAW,CAAE;EACzC,SAAS,QAAQ,KAAK,OAAO;EAC7B,SAAS,OAAO,KAAK;GACnB,MAAM;GACN,uBAAM,IAAI,QAAO,aAAa;GAC9B,QAAQ,EAAE,OAAQ;EACnB,EAAC;EACF,MAAM,KAAK,gBAAgB,IAAgB;CAC5C;CAED,MAAM,eAAeoB,QAAqBpB,OAA8B;EACtE,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,QAC5B;EAEF,IAAI,OAAO,KAAK;GACd,MAAM;GACN,uBAAM,IAAI,QAAO,aAAa;GAC9B,QAAQ,EAAE,OAAQ;EACnB,EAAC;EACF,MAAM,KAAK,aAAa,IAAI;CAC7B;;;;;;CAOD,4BACEqB,WACAC,OACAtB,OACAC,aACAE,MACAC,UACAC,MACA;EACA,MAAM,kBAAkB,KAAK,mBAAmB,YAAY;EAC5D,MAAM,aAAa,KAAK,KAAK;EAC7B,MAAMT,MAAW;GACf,IAAI;GACJ,MAAM,QAAQ,UAAU,GAAG,UAAU,GAAG,SAAS;GACjD,eAAe;GACf;GACA,YAAY;GACZ,QAAQ,CACN;IACE,MAAM;IACN,MAAM,IAAI,KAAK,YAAY,aAAa;GACzC,CACF;GACD,QAAQ,EAAE,MAAO;GACjB;GACA,uBAAuB;GACvB,UAAU;GACV,YAAY,CAAE;GACd,OAAO,WAAW,EAAE,SAAU,IAAG,CAAE;GACnC,MAAM,QAAQ,CAAE;EACjB;AACD,SAAO,KAAK,gBAAgB,IAAI;CACjC;CAED,MAAM,qBACJyB,WACAC,OACAtB,OACAC,aACAE,MACAC,UACAC,MACc;EACd,MAAM,MACJ,KAAK,WAAW,MAAM,IACtB,KAAK,4BACH,WACA,OACA,OACA,aACA,MACA,UACA,KACD;EACH,MAAM,KAAK,cAAc,IAAI;EAC7B,MAAM,KAAK,mBAAmB,IAAI;AAClC,SAAO;CACR;CAED,MAAM,mBACJkB,WACAvB,OACc;EACd,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,YAC5B,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,UAAU,EAAE,UAAW;EAC3B,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;EACF,MAAM,KAAK,iBAAiB,IAAI;EAChC,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;CAED,MAAM,qBAAqBP,OAAgBO,OAA6B;EACtE,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,YAC5B,OAAM,IAAI,MAAM;EAElB,IAAI,WAAW,KAAK,KAAK;EACzB,IAAI,QAAQ,KAAK,eAAe,MAAM;EACtC,IAAI,OAAO,KAAK;GACd,MAAM;GACN,MAAM,IAAI,KAAK,IAAI,UAAU,aAAa;EAC3C,EAAC;EACF,MAAM,KAAK,mBAAmB,IAAI;EAClC,MAAM,KAAK,UAAU,IAAI;AACzB,SAAO;CACR;CAED,MAAM,WAAWwB,MAAcxB,OAA8B;EAC3D,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,QAC5B;EAEF,IAAI,OAAO,KAAK;GACd,MAAM;GACN,uBAAM,IAAI,QAAO,aAAa;GAC9B,QAAQ,EAAE,KAAM;EACjB,EAAC;EACF,MAAM,KAAK,SAAS,IAAI;CACzB;CAED,MAAM,kBACJyB,OACAC,KACA1B,OACAQ,cACAC,OACAkB,QACc;EACd,MAAM,MAAM,KAAK,WAAW,MAAM;AAClC,MAAI,CAAC,OAAO,KAAK,aAAa,MAC5B,OAAM,IAAI,MACR,CAAC,yDAAyD,CAAC;EAG/D,IAAI,OAAO,KAAK;GACd,MAAM;GACN,uBAAM,IAAI,QAAO,aAAa;GAC9B,QAAQ;IAAE;IAAO;IAAK,OAAO,QAAQ;GAAO;EAC7C,EAAC;EACF,MAAM,KAAK,gBAAgB,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAO,EAAC;AAChE,SAAO;CACR;AA4CF"}
|
|
1
|
+
{"version":3,"file":"base.js","names":["runTree?: RunTree","run?: Run","parentRun?: Run","value: any","defaultKey: string","x: BaseCallbackHandler","_fields?: BaseCallbackHandlerInput","runId?: string","error: unknown","parentRun: Run","childRun: Run","run: Run","parentRunId: string | undefined","llm: Serialized","prompts: string[]","runId: string","parentRunId?: string","extraParams?: KVMap","tags?: string[]","metadata?: KVMap","name?: string","messages: BaseMessage[][]","output: LLMResult","_parentRunId?: string","_tags?: string[]","extraParams?: Record<string, unknown>","chain: Serialized","inputs: ChainValues","runType?: string","extra?: Record<string, unknown>","outputs: ChainValues","kwargs?: { inputs?: Record<string, unknown> }","tool: Serialized","input: string","output: any","action: AgentAction","action: AgentFinish","retriever: Serialized","query: string","documents: Document<Record<string, unknown>>[]","text: string","token: string","idx: NewTokenIndices","fields?: HandleLLMNewTokenCallbackFields"],"sources":["../../src/tracers/base.ts"],"sourcesContent":["import { KVMap, BaseRun } from \"langsmith/schemas\";\nimport { RunTree, convertToDottedOrderFormat } from \"langsmith/run_trees\";\n\nimport type { ChainValues } from \"../utils/types/index.js\";\nimport type { AgentAction, AgentFinish } from \"../agents.js\";\nimport type { LLMResult } from \"../outputs.js\";\nimport type { BaseMessage } from \"../messages/base.js\";\nimport { Serialized } from \"../load/serializable.js\";\nimport {\n BaseCallbackHandler,\n BaseCallbackHandlerInput,\n HandleLLMNewTokenCallbackFields,\n NewTokenIndices,\n} from \"../callbacks/base.js\";\nimport type { Document } from \"../documents/document.js\";\nimport { getRuntimeEnvironment } from \"../utils/env.js\";\n\nexport type RunType = string;\n\n// TODO: Remove this type and just use the base LangSmith Run type.\nexport interface Run extends BaseRun {\n // some optional fields are always present here\n id: string;\n start_time: number;\n end_time?: number;\n execution_order: number;\n // some additional fields that don't exist in sdk runs\n child_runs: this[];\n child_execution_order: number;\n events: Array<{\n name: string;\n time: string;\n kwargs?: Record<string, unknown>;\n }>;\n trace_id?: string;\n dotted_order?: string;\n /** @internal */\n _serialized_start_time?: string;\n}\n\n// TODO: Remove and just use base LangSmith Run type\nconst convertRunTreeToRun = (runTree?: RunTree): Run | undefined => {\n if (!runTree) {\n return undefined;\n }\n // Important that we return the raw run tree object since the reference\n // is mutated in other places.\n // TODO: Remove places where this is being done.\n\n runTree.events = runTree.events ?? [];\n runTree.child_runs = runTree.child_runs ?? [];\n // TODO: Remove this cast and just use the LangSmith RunTree type.\n return runTree as unknown as Run;\n};\n\nfunction convertRunToRunTree(run?: Run, parentRun?: Run): RunTree | undefined {\n if (!run) {\n return undefined;\n }\n return new RunTree({\n ...run,\n start_time: run._serialized_start_time ?? run.start_time,\n parent_run: convertRunToRunTree(parentRun),\n child_runs: run.child_runs\n .map((r) => convertRunToRunTree(r))\n .filter((r): r is RunTree => r !== undefined),\n extra: {\n ...run.extra,\n runtime: getRuntimeEnvironment(),\n },\n tracingEnabled: false,\n });\n}\n\nexport interface AgentRun extends Run {\n actions: AgentAction[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _coerceToDict(value: any, defaultKey: string) {\n return value && !Array.isArray(value) && typeof value === \"object\"\n ? value\n : { [defaultKey]: value };\n}\n\nexport function isBaseTracer(x: BaseCallbackHandler): x is BaseTracer {\n return typeof (x as BaseTracer)._addRunToRunMap === \"function\";\n}\n\nexport abstract class BaseTracer extends BaseCallbackHandler {\n /** @deprecated Use `runTreeMap` instead. */\n protected runMap: Map<string, Run> = new Map();\n\n protected runTreeMap: Map<string, RunTree> = new Map();\n\n protected usesRunTreeMap = false;\n\n constructor(_fields?: BaseCallbackHandlerInput) {\n super(...arguments);\n }\n\n copy(): this {\n return this;\n }\n\n protected getRunById(runId?: string): Run | undefined {\n if (runId === undefined) {\n return undefined;\n }\n return this.usesRunTreeMap\n ? convertRunTreeToRun(this.runTreeMap.get(runId))\n : this.runMap.get(runId);\n }\n\n protected stringifyError(error: unknown) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (error instanceof Error) {\n return error.message + (error?.stack ? `\\n\\n${error.stack}` : \"\");\n }\n\n if (typeof error === \"string\") {\n return error;\n }\n\n return `${error}`;\n }\n\n protected abstract persistRun(run: Run): Promise<void>;\n\n protected _addChildRun(parentRun: Run, childRun: Run) {\n parentRun.child_runs.push(childRun);\n }\n\n _addRunToRunMap(run: Run) {\n const { dottedOrder: currentDottedOrder, microsecondPrecisionDatestring } =\n convertToDottedOrderFormat(\n new Date(run.start_time).getTime(),\n run.id,\n run.execution_order\n );\n const storedRun = { ...run };\n const parentRun = this.getRunById(storedRun.parent_run_id);\n if (storedRun.parent_run_id !== undefined) {\n if (parentRun) {\n this._addChildRun(parentRun, storedRun);\n parentRun.child_execution_order = Math.max(\n parentRun.child_execution_order,\n storedRun.child_execution_order\n );\n storedRun.trace_id = parentRun.trace_id;\n if (parentRun.dotted_order !== undefined) {\n storedRun.dotted_order = [\n parentRun.dotted_order,\n currentDottedOrder,\n ].join(\".\");\n storedRun._serialized_start_time = microsecondPrecisionDatestring;\n } else {\n // This can happen naturally for callbacks added within a run\n // console.debug(`Parent run with UUID ${storedRun.parent_run_id} has no dotted order.`);\n }\n } else {\n // This can happen naturally for callbacks added within a run\n // console.debug(\n // `Parent run with UUID ${storedRun.parent_run_id} not found.`\n // );\n\n // Child run with no trace_id and dotted_order causes 400 error on LangSmith.\n // So we set the parent_run_id to undefined as a workaround.\n // This run will be shown as isolated run on LangSmith.\n storedRun.parent_run_id = undefined;\n }\n } else {\n storedRun.trace_id = storedRun.id;\n storedRun.dotted_order = currentDottedOrder;\n storedRun._serialized_start_time = microsecondPrecisionDatestring;\n }\n if (this.usesRunTreeMap) {\n const runTree = convertRunToRunTree(storedRun, parentRun);\n if (runTree !== undefined) {\n this.runTreeMap.set(storedRun.id, runTree);\n }\n } else {\n this.runMap.set(storedRun.id, storedRun);\n }\n return storedRun;\n }\n\n protected async _endTrace(run: Run): Promise<void> {\n const parentRun =\n run.parent_run_id !== undefined && this.getRunById(run.parent_run_id);\n if (parentRun) {\n parentRun.child_execution_order = Math.max(\n parentRun.child_execution_order,\n run.child_execution_order\n );\n } else {\n await this.persistRun(run);\n }\n await this.onRunUpdate?.(run);\n if (this.usesRunTreeMap) {\n this.runTreeMap.delete(run.id);\n } else {\n this.runMap.delete(run.id);\n }\n }\n\n protected _getExecutionOrder(parentRunId: string | undefined): number {\n const parentRun = parentRunId !== undefined && this.getRunById(parentRunId);\n // If a run has no parent then execution order is 1\n if (!parentRun) {\n return 1;\n }\n\n return parentRun.child_execution_order + 1;\n }\n\n /**\n * Create and add a run to the run map for LLM start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const finalExtraParams = metadata\n ? { ...extraParams, metadata }\n : extraParams;\n const run: Run = {\n id: runId,\n name: name ?? llm.id[llm.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: llm,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { prompts },\n execution_order,\n child_runs: [],\n child_execution_order: execution_order,\n run_type: \"llm\",\n extra: finalExtraParams ?? {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForLLMStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onLLMStart?.(run);\n return run;\n }\n\n /**\n * Create and add a run to the run map for chat model start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const finalExtraParams = metadata\n ? { ...extraParams, metadata }\n : extraParams;\n const run: Run = {\n id: runId,\n name: name ?? llm.id[llm.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: llm,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { messages },\n execution_order,\n child_runs: [],\n child_execution_order: execution_order,\n run_type: \"llm\",\n extra: finalExtraParams ?? {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: KVMap,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForChatModelStart(\n llm,\n messages,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onLLMStart?.(run);\n return run;\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n extraParams?: Record<string, unknown>\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"llm\") {\n throw new Error(\"No LLM run to end.\");\n }\n run.end_time = Date.now();\n run.outputs = output;\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n run.extra = { ...run.extra, ...extraParams };\n await this.onLLMEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleLLMError(\n error: unknown,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n extraParams?: Record<string, unknown>\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"llm\") {\n throw new Error(\"No LLM run to end.\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n run.extra = { ...run.extra, ...extraParams };\n await this.onLLMError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n /**\n * Create and add a run to the run map for chain start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n runType?: string,\n name?: string,\n extra?: Record<string, unknown>\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const run: Run = {\n id: runId,\n name: name ?? chain.id[chain.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: chain,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs,\n execution_order,\n child_execution_order: execution_order,\n run_type: runType ?? \"chain\",\n child_runs: [],\n extra: metadata ? { ...extra, metadata } : { ...extra },\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n runType?: string,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForChainStart(\n chain,\n inputs,\n runId,\n parentRunId,\n tags,\n metadata,\n runType,\n name\n );\n await this.onRunCreate?.(run);\n await this.onChainStart?.(run);\n return run;\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run) {\n throw new Error(\"No chain run to end.\");\n }\n run.end_time = Date.now();\n run.outputs = _coerceToDict(outputs, \"output\");\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n if (kwargs?.inputs !== undefined) {\n run.inputs = _coerceToDict(kwargs.inputs, \"input\");\n }\n await this.onChainEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleChainError(\n error: unknown,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run) {\n throw new Error(\"No chain run to end.\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n if (kwargs?.inputs !== undefined) {\n run.inputs = _coerceToDict(kwargs.inputs, \"input\");\n }\n await this.onChainError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n /**\n * Create and add a run to the run map for tool start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const run: Run = {\n id: runId,\n name: name ?? tool.id[tool.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: tool,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { input },\n execution_order,\n child_execution_order: execution_order,\n run_type: \"tool\",\n child_runs: [],\n extra: metadata ? { metadata } : {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForToolStart(\n tool,\n input,\n runId,\n parentRunId,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onToolStart?.(run);\n return run;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async handleToolEnd(output: any, runId: string): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"tool\") {\n throw new Error(\"No tool run to end\");\n }\n run.end_time = Date.now();\n run.outputs = { output };\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onToolEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleToolError(error: unknown, runId: string): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"tool\") {\n throw new Error(\"No tool run to end\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onToolError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleAgentAction(action: AgentAction, runId: string): Promise<void> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"chain\") {\n return;\n }\n const agentRun = run as AgentRun;\n agentRun.actions = agentRun.actions || [];\n agentRun.actions.push(action);\n agentRun.events.push({\n name: \"agent_action\",\n time: new Date().toISOString(),\n kwargs: { action },\n });\n await this.onAgentAction?.(run as AgentRun);\n }\n\n async handleAgentEnd(action: AgentFinish, runId: string): Promise<void> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"chain\") {\n return;\n }\n run.events.push({\n name: \"agent_end\",\n time: new Date().toISOString(),\n kwargs: { action },\n });\n await this.onAgentEnd?.(run);\n }\n\n /**\n * Create and add a run to the run map for retriever start events.\n * This must sometimes be done synchronously to avoid race conditions\n * when callbacks are backgrounded, so we expose it as a separate method here.\n */\n _createRunForRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ) {\n const execution_order = this._getExecutionOrder(parentRunId);\n const start_time = Date.now();\n const run: Run = {\n id: runId,\n name: name ?? retriever.id[retriever.id.length - 1],\n parent_run_id: parentRunId,\n start_time,\n serialized: retriever,\n events: [\n {\n name: \"start\",\n time: new Date(start_time).toISOString(),\n },\n ],\n inputs: { query },\n execution_order,\n child_execution_order: execution_order,\n run_type: \"retriever\",\n child_runs: [],\n extra: metadata ? { metadata } : {},\n tags: tags || [],\n };\n return this._addRunToRunMap(run);\n }\n\n async handleRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: KVMap,\n name?: string\n ): Promise<Run> {\n const run =\n this.getRunById(runId) ??\n this._createRunForRetrieverStart(\n retriever,\n query,\n runId,\n parentRunId,\n tags,\n metadata,\n name\n );\n await this.onRunCreate?.(run);\n await this.onRetrieverStart?.(run);\n return run;\n }\n\n async handleRetrieverEnd(\n documents: Document<Record<string, unknown>>[],\n runId: string\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"retriever\") {\n throw new Error(\"No retriever run to end\");\n }\n run.end_time = Date.now();\n run.outputs = { documents };\n run.events.push({\n name: \"end\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onRetrieverEnd?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleRetrieverError(error: unknown, runId: string): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"retriever\") {\n throw new Error(\"No retriever run to end\");\n }\n run.end_time = Date.now();\n run.error = this.stringifyError(error);\n run.events.push({\n name: \"error\",\n time: new Date(run.end_time).toISOString(),\n });\n await this.onRetrieverError?.(run);\n await this._endTrace(run);\n return run;\n }\n\n async handleText(text: string, runId: string): Promise<void> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"chain\") {\n return;\n }\n run.events.push({\n name: \"text\",\n time: new Date().toISOString(),\n kwargs: { text },\n });\n await this.onText?.(run);\n }\n\n async handleLLMNewToken(\n token: string,\n idx: NewTokenIndices,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ): Promise<Run> {\n const run = this.getRunById(runId);\n if (!run || run?.run_type !== \"llm\") {\n throw new Error(\n `Invalid \"runId\" provided to \"handleLLMNewToken\" callback.`\n );\n }\n run.events.push({\n name: \"new_token\",\n time: new Date().toISOString(),\n kwargs: { token, idx, chunk: fields?.chunk },\n });\n await this.onLLMNewToken?.(run, token, { chunk: fields?.chunk });\n return run;\n }\n\n // custom event handlers\n\n onRunCreate?(run: Run): void | Promise<void>;\n\n onRunUpdate?(run: Run): void | Promise<void>;\n\n onLLMStart?(run: Run): void | Promise<void>;\n\n onLLMEnd?(run: Run): void | Promise<void>;\n\n onLLMError?(run: Run): void | Promise<void>;\n\n onChainStart?(run: Run): void | Promise<void>;\n\n onChainEnd?(run: Run): void | Promise<void>;\n\n onChainError?(run: Run): void | Promise<void>;\n\n onToolStart?(run: Run): void | Promise<void>;\n\n onToolEnd?(run: Run): void | Promise<void>;\n\n onToolError?(run: Run): void | Promise<void>;\n\n onAgentAction?(run: Run): void | Promise<void>;\n\n onAgentEnd?(run: Run): void | Promise<void>;\n\n onRetrieverStart?(run: Run): void | Promise<void>;\n\n onRetrieverEnd?(run: Run): void | Promise<void>;\n\n onRetrieverError?(run: Run): void | Promise<void>;\n\n onText?(run: Run): void | Promise<void>;\n\n onLLMNewToken?(\n run: Run,\n token: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: { chunk: any }\n ): void | Promise<void>;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_metadata = require('../messages/metadata.cjs');
|
|
3
|
+
const require_ai = require('../messages/ai.cjs');
|
|
2
4
|
const require_tracers_base = require('./base.cjs');
|
|
3
5
|
const require_tracer = require('../singletons/tracer.cjs');
|
|
4
6
|
const langsmith_singletons_traceable = require_rolldown_runtime.__toESM(require("langsmith/singletons/traceable"));
|
|
@@ -8,6 +10,17 @@ const langsmith = require_rolldown_runtime.__toESM(require("langsmith"));
|
|
|
8
10
|
//#region src/tracers/tracer_langchain.ts
|
|
9
11
|
var tracer_langchain_exports = {};
|
|
10
12
|
require_rolldown_runtime.__export(tracer_langchain_exports, { LangChainTracer: () => LangChainTracer });
|
|
13
|
+
/**
|
|
14
|
+
* Extract usage_metadata from chat generations.
|
|
15
|
+
*
|
|
16
|
+
* Iterates through generations to find and aggregates all usage_metadata
|
|
17
|
+
* found in chat messages. This is typically present in chat model outputs.
|
|
18
|
+
*/
|
|
19
|
+
function _getUsageMetadataFromGenerations(generations) {
|
|
20
|
+
let output = void 0;
|
|
21
|
+
for (const generationBatch of generations) for (const generation of generationBatch) if (require_ai.AIMessage.isInstance(generation.message) && generation.message.usage_metadata !== void 0) output = require_metadata.mergeUsageMetadata(output, generation.message.usage_metadata);
|
|
22
|
+
return output;
|
|
23
|
+
}
|
|
11
24
|
var LangChainTracer = class LangChainTracer extends require_tracers_base.BaseTracer {
|
|
12
25
|
name = "langchain_tracer";
|
|
13
26
|
projectName;
|
|
@@ -27,12 +40,27 @@ var LangChainTracer = class LangChainTracer extends require_tracers_base.BaseTra
|
|
|
27
40
|
}
|
|
28
41
|
async persistRun(_run) {}
|
|
29
42
|
async onRunCreate(run) {
|
|
30
|
-
|
|
31
|
-
|
|
43
|
+
if (!run.extra?.lc_defers_inputs) {
|
|
44
|
+
const runTree = this.getRunTreeWithTracingConfig(run.id);
|
|
45
|
+
await runTree?.postRun();
|
|
46
|
+
}
|
|
32
47
|
}
|
|
33
48
|
async onRunUpdate(run) {
|
|
34
49
|
const runTree = this.getRunTreeWithTracingConfig(run.id);
|
|
35
|
-
await runTree?.
|
|
50
|
+
if (run.extra?.lc_defers_inputs) await runTree?.postRun();
|
|
51
|
+
else await runTree?.patchRun();
|
|
52
|
+
}
|
|
53
|
+
onLLMEnd(run) {
|
|
54
|
+
const outputs = run.outputs;
|
|
55
|
+
if (outputs?.generations) {
|
|
56
|
+
const usageMetadata = _getUsageMetadataFromGenerations(outputs.generations);
|
|
57
|
+
if (usageMetadata !== void 0) {
|
|
58
|
+
run.extra = run.extra ?? {};
|
|
59
|
+
const metadata = run.extra.metadata ?? {};
|
|
60
|
+
metadata.usage_metadata = usageMetadata;
|
|
61
|
+
run.extra.metadata = metadata;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
36
64
|
}
|
|
37
65
|
getRun(id) {
|
|
38
66
|
return this.runTreeMap.get(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.cjs","names":["BaseTracer","fields: LangChainTracerFields","getDefaultLangChainClientSingleton","_run: Run","run: Run","id: string","runTree: RunTree","rootRun: RunTree","RunTree"],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n constructor(fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n
|
|
1
|
+
{"version":3,"file":"tracer_langchain.cjs","names":["generations: ChatGeneration[][]","output: UsageMetadata | undefined","AIMessage","mergeUsageMetadata","BaseTracer","fields: LangChainTracerFields","getDefaultLangChainClientSingleton","_run: Run","run: Run","run: BaseTracerRun","id: string","runTree: RunTree","rootRun: RunTree","RunTree"],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\nimport { ChatGeneration } from \"../outputs.js\";\nimport { AIMessage } from \"../messages/ai.js\";\nimport { mergeUsageMetadata, UsageMetadata } from \"../messages/metadata.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\n\n/**\n * Extract usage_metadata from chat generations.\n *\n * Iterates through generations to find and aggregates all usage_metadata\n * found in chat messages. This is typically present in chat model outputs.\n */\nfunction _getUsageMetadataFromGenerations(\n generations: ChatGeneration[][]\n): UsageMetadata | undefined {\n let output: UsageMetadata | undefined = undefined;\n for (const generationBatch of generations) {\n for (const generation of generationBatch) {\n if (\n AIMessage.isInstance(generation.message) &&\n generation.message.usage_metadata !== undefined\n ) {\n output = mergeUsageMetadata(output, generation.message.usage_metadata);\n }\n }\n }\n return output;\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n constructor(fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n if (!run.extra?.lc_defers_inputs) {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n await runTree?.postRun();\n }\n }\n\n async onRunUpdate(run: Run): Promise<void> {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n if (run.extra?.lc_defers_inputs) {\n await runTree?.postRun();\n } else {\n await runTree?.patchRun();\n }\n }\n\n onLLMEnd(run: BaseTracerRun): void {\n // Extract usage_metadata from outputs and store in extra.metadata\n const outputs = run.outputs as\n | { generations?: ChatGeneration[][] }\n | undefined;\n if (outputs?.generations) {\n const usageMetadata = _getUsageMetadataFromGenerations(\n outputs.generations\n );\n if (usageMetadata !== undefined) {\n run.extra = run.extra ?? {};\n const metadata =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n metadata.usage_metadata = usageMetadata;\n run.extra.metadata = metadata;\n }\n }\n }\n\n getRun(id: string): Run | undefined {\n return this.runTreeMap.get(id);\n }\n\n updateFromRunTree(runTree: RunTree) {\n this.runTreeMap.set(runTree.id, runTree);\n let rootRun: RunTree = runTree;\n const visited = new Set<string>();\n while (rootRun.parent_run) {\n if (visited.has(rootRun.id)) break;\n visited.add(rootRun.id);\n\n if (!rootRun.parent_run) break;\n rootRun = rootRun.parent_run as RunTree;\n }\n visited.clear();\n\n const queue = [rootRun];\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || visited.has(current.id)) continue;\n visited.add(current.id);\n\n this.runTreeMap.set(current.id, current);\n if (current.child_runs) {\n queue.push(...current.child_runs);\n }\n }\n\n this.client = runTree.client ?? this.client;\n this.replicas = runTree.replicas ?? this.replicas;\n this.projectName = runTree.project_name ?? this.projectName;\n this.exampleId = runTree.reference_example_id ?? this.exampleId;\n }\n\n getRunTreeWithTracingConfig(id: string): RunTree | undefined {\n const runTree = this.runTreeMap.get(id);\n if (!runTree) return undefined;\n\n return new RunTree({\n ...runTree,\n client: this.client as Client,\n project_name: this.projectName,\n replicas: this.replicas,\n reference_example_id: this.exampleId,\n tracingEnabled: true,\n });\n }\n\n static getTraceableRunTree(): RunTree | undefined {\n try {\n return (\n // The type cast here provides forward compatibility. Old versions of LangSmith will just\n // ignore the permitAbsentRunTree arg.\n (\n getCurrentRunTree as (\n permitAbsentRunTree: boolean\n ) => ReturnType<typeof getCurrentRunTree> | undefined\n )(true)\n );\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAsDA,SAAS,iCACPA,aAC2B;CAC3B,IAAIC,SAAoC;AACxC,MAAK,MAAM,mBAAmB,YAC5B,MAAK,MAAM,cAAc,gBACvB,KACEC,qBAAU,WAAW,WAAW,QAAQ,IACxC,WAAW,QAAQ,mBAAmB,QAEtC,SAASC,oCAAmB,QAAQ,WAAW,QAAQ,eAAe;AAI5E,QAAO;AACR;AAED,IAAa,kBAAb,MAAa,wBACHC,gCAEV;CACE,OAAO;CAEP;CAEA;CAEA;CAEA;CAEA,iBAAiB;CAEjB,YAAYC,SAAgC,CAAE,GAAE;EAC9C,MAAM,OAAO;EACb,MAAM,EAAE,WAAW,aAAa,QAAQ,UAAU,GAAG;EAErD,KAAK,cAAc,qDAAsC;EACzD,KAAK,WAAW;EAChB,KAAK,YAAY;EACjB,KAAK,SAAS,UAAUC,mDAAoC;EAE5D,MAAM,gBAAgB,gBAAgB,qBAAqB;AAC3D,MAAI,eACF,KAAK,kBAAkB,cAAc;CAExC;CAED,MAAgB,WAAWC,MAA0B,CAEpD;CAED,MAAM,YAAYC,KAAyB;AACzC,MAAI,CAAC,IAAI,OAAO,kBAAkB;GAChC,MAAM,UAAU,KAAK,4BAA4B,IAAI,GAAG;GACxD,MAAM,SAAS,SAAS;EACzB;CACF;CAED,MAAM,YAAYA,KAAyB;EACzC,MAAM,UAAU,KAAK,4BAA4B,IAAI,GAAG;AACxD,MAAI,IAAI,OAAO,kBACb,MAAM,SAAS,SAAS;OAExB,MAAM,SAAS,UAAU;CAE5B;CAED,SAASC,KAA0B;EAEjC,MAAM,UAAU,IAAI;AAGpB,MAAI,SAAS,aAAa;GACxB,MAAM,gBAAgB,iCACpB,QAAQ,YACT;AACD,OAAI,kBAAkB,QAAW;IAC/B,IAAI,QAAQ,IAAI,SAAS,CAAE;IAC3B,MAAM,WACH,IAAI,MAAM,YAAoD,CAAE;IACnE,SAAS,iBAAiB;IAC1B,IAAI,MAAM,WAAW;GACtB;EACF;CACF;CAED,OAAOC,IAA6B;AAClC,SAAO,KAAK,WAAW,IAAI,GAAG;CAC/B;CAED,kBAAkBC,SAAkB;EAClC,KAAK,WAAW,IAAI,QAAQ,IAAI,QAAQ;EACxC,IAAIC,UAAmB;EACvB,MAAM,0BAAU,IAAI;AACpB,SAAO,QAAQ,YAAY;AACzB,OAAI,QAAQ,IAAI,QAAQ,GAAG,CAAE;GAC7B,QAAQ,IAAI,QAAQ,GAAG;AAEvB,OAAI,CAAC,QAAQ,WAAY;GACzB,UAAU,QAAQ;EACnB;EACD,QAAQ,OAAO;EAEf,MAAM,QAAQ,CAAC,OAAQ;AACvB,SAAO,MAAM,SAAS,GAAG;GACvB,MAAM,UAAU,MAAM,OAAO;AAC7B,OAAI,CAAC,WAAW,QAAQ,IAAI,QAAQ,GAAG,CAAE;GACzC,QAAQ,IAAI,QAAQ,GAAG;GAEvB,KAAK,WAAW,IAAI,QAAQ,IAAI,QAAQ;AACxC,OAAI,QAAQ,YACV,MAAM,KAAK,GAAG,QAAQ,WAAW;EAEpC;EAED,KAAK,SAAS,QAAQ,UAAU,KAAK;EACrC,KAAK,WAAW,QAAQ,YAAY,KAAK;EACzC,KAAK,cAAc,QAAQ,gBAAgB,KAAK;EAChD,KAAK,YAAY,QAAQ,wBAAwB,KAAK;CACvD;CAED,4BAA4BF,IAAiC;EAC3D,MAAM,UAAU,KAAK,WAAW,IAAI,GAAG;AACvC,MAAI,CAAC,QAAS,QAAO;AAErB,SAAO,IAAIG,4BAAQ;GACjB,GAAG;GACH,QAAQ,KAAK;GACb,cAAc,KAAK;GACnB,UAAU,KAAK;GACf,sBAAsB,KAAK;GAC3B,gBAAgB;EACjB;CACF;CAED,OAAO,sBAA2C;AAChD,MAAI;AACF,gEAOI,KAAK;EAEV,QAAO;AACN,UAAO;EACR;CACF;AACF"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BaseCallbackHandlerInput } from "../callbacks/base.cjs";
|
|
2
|
-
import { BaseTracer } from "./base.cjs";
|
|
2
|
+
import { BaseTracer, Run } from "./base.cjs";
|
|
3
3
|
import { BaseRun, KVMap, RunCreate, RunUpdate as RunUpdate$1 } from "langsmith/schemas";
|
|
4
4
|
import { RunTree, RunTreeConfig } from "langsmith/run_trees";
|
|
5
5
|
import { LangSmithTracingClientInterface } from "langsmith";
|
|
6
6
|
|
|
7
7
|
//#region src/tracers/tracer_langchain.d.ts
|
|
8
|
-
interface Run extends BaseRun {
|
|
8
|
+
interface Run$1 extends BaseRun {
|
|
9
9
|
id: string;
|
|
10
10
|
child_runs: this[];
|
|
11
11
|
child_execution_order: number;
|
|
@@ -36,14 +36,15 @@ declare class LangChainTracer extends BaseTracer implements LangChainTracerField
|
|
|
36
36
|
replicas?: RunTreeConfig["replicas"];
|
|
37
37
|
usesRunTreeMap: boolean;
|
|
38
38
|
constructor(fields?: LangChainTracerFields);
|
|
39
|
-
protected persistRun(_run: Run): Promise<void>;
|
|
40
|
-
onRunCreate(run: Run): Promise<void>;
|
|
41
|
-
onRunUpdate(run: Run): Promise<void>;
|
|
42
|
-
|
|
39
|
+
protected persistRun(_run: Run$1): Promise<void>;
|
|
40
|
+
onRunCreate(run: Run$1): Promise<void>;
|
|
41
|
+
onRunUpdate(run: Run$1): Promise<void>;
|
|
42
|
+
onLLMEnd(run: Run): void;
|
|
43
|
+
getRun(id: string): Run$1 | undefined;
|
|
43
44
|
updateFromRunTree(runTree: RunTree): void;
|
|
44
45
|
getRunTreeWithTracingConfig(id: string): RunTree | undefined;
|
|
45
46
|
static getTraceableRunTree(): RunTree | undefined;
|
|
46
47
|
}
|
|
47
48
|
//#endregion
|
|
48
|
-
export { LangChainTracer, LangChainTracerFields, Run, RunCreate2, RunUpdate };
|
|
49
|
+
export { LangChainTracer, LangChainTracerFields, Run$1 as Run, RunCreate2, RunUpdate };
|
|
49
50
|
//# sourceMappingURL=tracer_langchain.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.d.cts","names":["LangSmithTracingClientInterface","RunTree","RunTreeConfig","BaseRun","RunCreate","RunUpdate","BaseRunUpdate","KVMap","BaseTracer","
|
|
1
|
+
{"version":3,"file":"tracer_langchain.d.cts","names":["LangSmithTracingClientInterface","RunTree","RunTreeConfig","BaseRun","RunCreate","RunUpdate","BaseRunUpdate","KVMap","BaseTracer","Run","BaseTracerRun","BaseCallbackHandlerInput","RunCreate2","LangChainTracerFields","LangChainTracer","Promise"],"sources":["../../src/tracers/tracer_langchain.d.ts"],"sourcesContent":["import { type LangSmithTracingClientInterface } from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { BaseRun, RunCreate, RunUpdate as BaseRunUpdate, KVMap } from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\nexport declare class LangChainTracer extends BaseTracer implements LangChainTracerFields {\n name: string;\n projectName?: string;\n exampleId?: string;\n client: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n usesRunTreeMap: boolean;\n constructor(fields?: LangChainTracerFields);\n protected persistRun(_run: Run): Promise<void>;\n onRunCreate(run: Run): Promise<void>;\n onRunUpdate(run: Run): Promise<void>;\n onLLMEnd(run: BaseTracerRun): void;\n getRun(id: string): Run | undefined;\n updateFromRunTree(runTree: RunTree): void;\n getRunTreeWithTracingConfig(id: string): RunTree | undefined;\n static getTraceableRunTree(): RunTree | undefined;\n}\n//# sourceMappingURL=tracer_langchain.d.ts.map"],"mappings":";;;;;;;UAKiBS,KAAAA,SAAYN;;EAAZM,UAAG,EAAA,IAAA,EAAA;EAOHG,qBAAU,EAAA,MAASR;EAInBC,YAAS,CAAA,EAAA,MAAA;EACdF,QAAAA,CAAAA,EAAAA,MAAAA;;AADuBG,UAJlBM,UAAAA,SAAmBR,SAIDE,CAAAA;EAAa,QAAA,CAAA,EAAA,MAAA;EAM/BO,YAAAA,CAAAA,EAAAA,MAAAA;;AAIFX,UAVEG,SAAAA,SAAkBC,WAUpBJ,CAAAA;EAJgCS,MAAAA,EALnCR,OAKmCQ,CAAAA,QAAAA,CAAAA;EAAwB,MAAA,EAJ3DJ,KAI2D;EAMlDO,QAAAA,CAAAA,EAAAA,MAAAA;EAITd,YAAAA,CAAAA,EAAAA,MAAAA;;AAGaa,UAbRA,qBAAAA,SAA8BF,wBAatBE,CAAAA;EACMJ,SAAAA,CAAAA,EAAAA,MAAAA;EAAMM,WAAAA,CAAAA,EAAAA,MAAAA;EAChBN,MAAAA,CAAAA,EAZRT,+BAYQS;EAAMM,QAAAA,CAAAA,EAXZb,aAWYa,CAAAA,UAAAA,CAAAA;;AACAA,cAVND,eAAAA,SAAwBN,UAAAA,YAAsBK,qBAUxCE,CAAAA;EACTL,IAAAA,EAAAA,MAAAA;EACMD,WAAAA,CAAAA,EAAAA,MAAAA;EACOR,SAAAA,CAAAA,EAAAA,MAAAA;EACcA,MAAAA,EAVjCD,+BAUiCC;EACXA,QAAAA,CAAAA,EAVnBC,aAUmBD,CAAAA,UAAAA,CAAAA;EAfWO,cAAAA,EAAAA,OAAAA;EAAsBK,WAAAA,CAAAA,MAAAA,CAAAA,EAO1CA,qBAP0CA;EAAqB,UAAA,UAAA,CAAA,IAAA,EAQzDJ,KARyD,CAAA,EAQnDM,OARmD,CAAA,IAAA,CAAA;mBASnEN,QAAMM;mBACNN,QAAMM;gBACTL;sBACMD;6BACOR;2CACcA;gCACXA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BaseCallbackHandlerInput } from "../callbacks/base.js";
|
|
2
|
-
import { BaseTracer } from "./base.js";
|
|
2
|
+
import { BaseTracer, Run } from "./base.js";
|
|
3
3
|
import { RunTree, RunTreeConfig } from "langsmith/run_trees";
|
|
4
4
|
import { LangSmithTracingClientInterface } from "langsmith";
|
|
5
5
|
import { BaseRun, KVMap, RunCreate, RunUpdate as RunUpdate$1 } from "langsmith/schemas";
|
|
6
6
|
|
|
7
7
|
//#region src/tracers/tracer_langchain.d.ts
|
|
8
|
-
interface Run extends BaseRun {
|
|
8
|
+
interface Run$1 extends BaseRun {
|
|
9
9
|
id: string;
|
|
10
10
|
child_runs: this[];
|
|
11
11
|
child_execution_order: number;
|
|
@@ -36,14 +36,15 @@ declare class LangChainTracer extends BaseTracer implements LangChainTracerField
|
|
|
36
36
|
replicas?: RunTreeConfig["replicas"];
|
|
37
37
|
usesRunTreeMap: boolean;
|
|
38
38
|
constructor(fields?: LangChainTracerFields);
|
|
39
|
-
protected persistRun(_run: Run): Promise<void>;
|
|
40
|
-
onRunCreate(run: Run): Promise<void>;
|
|
41
|
-
onRunUpdate(run: Run): Promise<void>;
|
|
42
|
-
|
|
39
|
+
protected persistRun(_run: Run$1): Promise<void>;
|
|
40
|
+
onRunCreate(run: Run$1): Promise<void>;
|
|
41
|
+
onRunUpdate(run: Run$1): Promise<void>;
|
|
42
|
+
onLLMEnd(run: Run): void;
|
|
43
|
+
getRun(id: string): Run$1 | undefined;
|
|
43
44
|
updateFromRunTree(runTree: RunTree): void;
|
|
44
45
|
getRunTreeWithTracingConfig(id: string): RunTree | undefined;
|
|
45
46
|
static getTraceableRunTree(): RunTree | undefined;
|
|
46
47
|
}
|
|
47
48
|
//#endregion
|
|
48
|
-
export { LangChainTracer, LangChainTracerFields, Run, RunCreate2, RunUpdate };
|
|
49
|
+
export { LangChainTracer, LangChainTracerFields, Run$1 as Run, RunCreate2, RunUpdate };
|
|
49
50
|
//# sourceMappingURL=tracer_langchain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.d.ts","names":["LangSmithTracingClientInterface","RunTree","RunTreeConfig","BaseRun","RunCreate","RunUpdate","BaseRunUpdate","KVMap","BaseTracer","
|
|
1
|
+
{"version":3,"file":"tracer_langchain.d.ts","names":["LangSmithTracingClientInterface","RunTree","RunTreeConfig","BaseRun","RunCreate","RunUpdate","BaseRunUpdate","KVMap","BaseTracer","Run","BaseTracerRun","BaseCallbackHandlerInput","RunCreate2","LangChainTracerFields","LangChainTracer","Promise"],"sources":["../../src/tracers/tracer_langchain.d.ts"],"sourcesContent":["import { type LangSmithTracingClientInterface } from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { BaseRun, RunCreate, RunUpdate as BaseRunUpdate, KVMap } from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\nexport declare class LangChainTracer extends BaseTracer implements LangChainTracerFields {\n name: string;\n projectName?: string;\n exampleId?: string;\n client: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n usesRunTreeMap: boolean;\n constructor(fields?: LangChainTracerFields);\n protected persistRun(_run: Run): Promise<void>;\n onRunCreate(run: Run): Promise<void>;\n onRunUpdate(run: Run): Promise<void>;\n onLLMEnd(run: BaseTracerRun): void;\n getRun(id: string): Run | undefined;\n updateFromRunTree(runTree: RunTree): void;\n getRunTreeWithTracingConfig(id: string): RunTree | undefined;\n static getTraceableRunTree(): RunTree | undefined;\n}\n//# sourceMappingURL=tracer_langchain.d.ts.map"],"mappings":";;;;;;;UAKiBS,KAAAA,SAAYN;;EAAZM,UAAG,EAAA,IAAA,EAAA;EAOHG,qBAAU,EAAA,MAASR;EAInBC,YAAS,CAAA,EAAA,MAAA;EACdF,QAAAA,CAAAA,EAAAA,MAAAA;;AADuBG,UAJlBM,UAAAA,SAAmBR,SAIDE,CAAAA;EAAa,QAAA,CAAA,EAAA,MAAA;EAM/BO,YAAAA,CAAAA,EAAAA,MAAAA;;AAIFX,UAVEG,SAAAA,SAAkBC,WAUpBJ,CAAAA;EAJgCS,MAAAA,EALnCR,OAKmCQ,CAAAA,QAAAA,CAAAA;EAAwB,MAAA,EAJ3DJ,KAI2D;EAMlDO,QAAAA,CAAAA,EAAAA,MAAAA;EAITd,YAAAA,CAAAA,EAAAA,MAAAA;;AAGaa,UAbRA,qBAAAA,SAA8BF,wBAatBE,CAAAA;EACMJ,SAAAA,CAAAA,EAAAA,MAAAA;EAAMM,WAAAA,CAAAA,EAAAA,MAAAA;EAChBN,MAAAA,CAAAA,EAZRT,+BAYQS;EAAMM,QAAAA,CAAAA,EAXZb,aAWYa,CAAAA,UAAAA,CAAAA;;AACAA,cAVND,eAAAA,SAAwBN,UAAAA,YAAsBK,qBAUxCE,CAAAA;EACTL,IAAAA,EAAAA,MAAAA;EACMD,WAAAA,CAAAA,EAAAA,MAAAA;EACOR,SAAAA,CAAAA,EAAAA,MAAAA;EACcA,MAAAA,EAVjCD,+BAUiCC;EACXA,QAAAA,CAAAA,EAVnBC,aAUmBD,CAAAA,UAAAA,CAAAA;EAfWO,cAAAA,EAAAA,OAAAA;EAAsBK,WAAAA,CAAAA,MAAAA,CAAAA,EAO1CA,qBAP0CA;EAAqB,UAAA,UAAA,CAAA,IAAA,EAQzDJ,KARyD,CAAA,EAQnDM,OARmD,CAAA,IAAA,CAAA;mBASnEN,QAAMM;mBACNN,QAAMM;gBACTL;sBACMD;6BACOR;2CACcA;gCACXA"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { __export } from "../_virtual/rolldown_runtime.js";
|
|
2
|
+
import { mergeUsageMetadata } from "../messages/metadata.js";
|
|
3
|
+
import { AIMessage } from "../messages/ai.js";
|
|
2
4
|
import { BaseTracer } from "./base.js";
|
|
3
5
|
import { getDefaultLangChainClientSingleton } from "../singletons/tracer.js";
|
|
4
6
|
import { getCurrentRunTree } from "langsmith/singletons/traceable";
|
|
@@ -8,6 +10,17 @@ import { getDefaultProjectName } from "langsmith";
|
|
|
8
10
|
//#region src/tracers/tracer_langchain.ts
|
|
9
11
|
var tracer_langchain_exports = {};
|
|
10
12
|
__export(tracer_langchain_exports, { LangChainTracer: () => LangChainTracer });
|
|
13
|
+
/**
|
|
14
|
+
* Extract usage_metadata from chat generations.
|
|
15
|
+
*
|
|
16
|
+
* Iterates through generations to find and aggregates all usage_metadata
|
|
17
|
+
* found in chat messages. This is typically present in chat model outputs.
|
|
18
|
+
*/
|
|
19
|
+
function _getUsageMetadataFromGenerations(generations) {
|
|
20
|
+
let output = void 0;
|
|
21
|
+
for (const generationBatch of generations) for (const generation of generationBatch) if (AIMessage.isInstance(generation.message) && generation.message.usage_metadata !== void 0) output = mergeUsageMetadata(output, generation.message.usage_metadata);
|
|
22
|
+
return output;
|
|
23
|
+
}
|
|
11
24
|
var LangChainTracer = class LangChainTracer extends BaseTracer {
|
|
12
25
|
name = "langchain_tracer";
|
|
13
26
|
projectName;
|
|
@@ -27,12 +40,27 @@ var LangChainTracer = class LangChainTracer extends BaseTracer {
|
|
|
27
40
|
}
|
|
28
41
|
async persistRun(_run) {}
|
|
29
42
|
async onRunCreate(run) {
|
|
30
|
-
|
|
31
|
-
|
|
43
|
+
if (!run.extra?.lc_defers_inputs) {
|
|
44
|
+
const runTree = this.getRunTreeWithTracingConfig(run.id);
|
|
45
|
+
await runTree?.postRun();
|
|
46
|
+
}
|
|
32
47
|
}
|
|
33
48
|
async onRunUpdate(run) {
|
|
34
49
|
const runTree = this.getRunTreeWithTracingConfig(run.id);
|
|
35
|
-
await runTree?.
|
|
50
|
+
if (run.extra?.lc_defers_inputs) await runTree?.postRun();
|
|
51
|
+
else await runTree?.patchRun();
|
|
52
|
+
}
|
|
53
|
+
onLLMEnd(run) {
|
|
54
|
+
const outputs = run.outputs;
|
|
55
|
+
if (outputs?.generations) {
|
|
56
|
+
const usageMetadata = _getUsageMetadataFromGenerations(outputs.generations);
|
|
57
|
+
if (usageMetadata !== void 0) {
|
|
58
|
+
run.extra = run.extra ?? {};
|
|
59
|
+
const metadata = run.extra.metadata ?? {};
|
|
60
|
+
metadata.usage_metadata = usageMetadata;
|
|
61
|
+
run.extra.metadata = metadata;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
36
64
|
}
|
|
37
65
|
getRun(id) {
|
|
38
66
|
return this.runTreeMap.get(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.js","names":["fields: LangChainTracerFields","_run: Run","run: Run","id: string","runTree: RunTree","rootRun: RunTree"],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n constructor(fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n
|
|
1
|
+
{"version":3,"file":"tracer_langchain.js","names":["generations: ChatGeneration[][]","output: UsageMetadata | undefined","fields: LangChainTracerFields","_run: Run","run: Run","run: BaseTracerRun","id: string","runTree: RunTree","rootRun: RunTree"],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\nimport { ChatGeneration } from \"../outputs.js\";\nimport { AIMessage } from \"../messages/ai.js\";\nimport { mergeUsageMetadata, UsageMetadata } from \"../messages/metadata.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\n\n/**\n * Extract usage_metadata from chat generations.\n *\n * Iterates through generations to find and aggregates all usage_metadata\n * found in chat messages. This is typically present in chat model outputs.\n */\nfunction _getUsageMetadataFromGenerations(\n generations: ChatGeneration[][]\n): UsageMetadata | undefined {\n let output: UsageMetadata | undefined = undefined;\n for (const generationBatch of generations) {\n for (const generation of generationBatch) {\n if (\n AIMessage.isInstance(generation.message) &&\n generation.message.usage_metadata !== undefined\n ) {\n output = mergeUsageMetadata(output, generation.message.usage_metadata);\n }\n }\n }\n return output;\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n constructor(fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n if (!run.extra?.lc_defers_inputs) {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n await runTree?.postRun();\n }\n }\n\n async onRunUpdate(run: Run): Promise<void> {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n if (run.extra?.lc_defers_inputs) {\n await runTree?.postRun();\n } else {\n await runTree?.patchRun();\n }\n }\n\n onLLMEnd(run: BaseTracerRun): void {\n // Extract usage_metadata from outputs and store in extra.metadata\n const outputs = run.outputs as\n | { generations?: ChatGeneration[][] }\n | undefined;\n if (outputs?.generations) {\n const usageMetadata = _getUsageMetadataFromGenerations(\n outputs.generations\n );\n if (usageMetadata !== undefined) {\n run.extra = run.extra ?? {};\n const metadata =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n metadata.usage_metadata = usageMetadata;\n run.extra.metadata = metadata;\n }\n }\n }\n\n getRun(id: string): Run | undefined {\n return this.runTreeMap.get(id);\n }\n\n updateFromRunTree(runTree: RunTree) {\n this.runTreeMap.set(runTree.id, runTree);\n let rootRun: RunTree = runTree;\n const visited = new Set<string>();\n while (rootRun.parent_run) {\n if (visited.has(rootRun.id)) break;\n visited.add(rootRun.id);\n\n if (!rootRun.parent_run) break;\n rootRun = rootRun.parent_run as RunTree;\n }\n visited.clear();\n\n const queue = [rootRun];\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || visited.has(current.id)) continue;\n visited.add(current.id);\n\n this.runTreeMap.set(current.id, current);\n if (current.child_runs) {\n queue.push(...current.child_runs);\n }\n }\n\n this.client = runTree.client ?? this.client;\n this.replicas = runTree.replicas ?? this.replicas;\n this.projectName = runTree.project_name ?? this.projectName;\n this.exampleId = runTree.reference_example_id ?? this.exampleId;\n }\n\n getRunTreeWithTracingConfig(id: string): RunTree | undefined {\n const runTree = this.runTreeMap.get(id);\n if (!runTree) return undefined;\n\n return new RunTree({\n ...runTree,\n client: this.client as Client,\n project_name: this.projectName,\n replicas: this.replicas,\n reference_example_id: this.exampleId,\n tracingEnabled: true,\n });\n }\n\n static getTraceableRunTree(): RunTree | undefined {\n try {\n return (\n // The type cast here provides forward compatibility. Old versions of LangSmith will just\n // ignore the permitAbsentRunTree arg.\n (\n getCurrentRunTree as (\n permitAbsentRunTree: boolean\n ) => ReturnType<typeof getCurrentRunTree> | undefined\n )(true)\n );\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/utils/context.ts
|
|
4
|
+
var context_exports = {};
|
|
5
|
+
require_rolldown_runtime.__export(context_exports, { context: () => context });
|
|
6
|
+
/**
|
|
7
|
+
* A tagged template function for creating formatted strings.
|
|
8
|
+
*
|
|
9
|
+
* This utility provides a clean, template literal-based API for string formatting
|
|
10
|
+
* that can be used for prompts, descriptions, and other text formatting needs.
|
|
11
|
+
*
|
|
12
|
+
* It automatically handles whitespace normalization and indentation, making it
|
|
13
|
+
* ideal for multi-line strings in code.
|
|
14
|
+
*
|
|
15
|
+
* When using this utility, it will:
|
|
16
|
+
* - Strip common leading indentation from all lines
|
|
17
|
+
* - Trim leading/trailing whitespace
|
|
18
|
+
* - Align multi-line interpolated values to match indentation
|
|
19
|
+
* - Support escape sequences: `\\n` (newline), `\\`` (backtick), `\\$` (dollar), `\\{` (brace)
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { context } from "@langchain/core/utils/context";
|
|
24
|
+
*
|
|
25
|
+
* const role = "agent";
|
|
26
|
+
* const prompt = context`
|
|
27
|
+
* You are an ${role}.
|
|
28
|
+
* Your task is to help users.
|
|
29
|
+
* `;
|
|
30
|
+
* // Returns: "You are an agent.\nYour task is to help users."
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Multi-line interpolated values are aligned
|
|
36
|
+
* const items = "- Item 1\n- Item 2\n- Item 3";
|
|
37
|
+
* const message = context`
|
|
38
|
+
* Shopping list:
|
|
39
|
+
* ${items}
|
|
40
|
+
* End of list.
|
|
41
|
+
* `;
|
|
42
|
+
* // The items will be indented to match " " (4 spaces)
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
function context(strings, ...values) {
|
|
46
|
+
const raw = strings.raw;
|
|
47
|
+
let result = "";
|
|
48
|
+
for (let i = 0; i < raw.length; i++) {
|
|
49
|
+
const next = raw[i].replace(/\\\n[ \t]*/g, "").replace(/\\`/g, "`").replace(/\\\$/g, "$").replace(/\\\{/g, "{");
|
|
50
|
+
result += next;
|
|
51
|
+
if (i < values.length) {
|
|
52
|
+
const value = alignValue(values[i], result);
|
|
53
|
+
result += typeof value === "string" ? value : JSON.stringify(value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
result = stripIndent(result);
|
|
57
|
+
result = result.trim();
|
|
58
|
+
result = result.replace(/\\n/g, "\n");
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Adjusts the indentation of a multi-line interpolated value to match the current line.
|
|
63
|
+
*
|
|
64
|
+
* @param value - The interpolated value
|
|
65
|
+
* @param precedingText - The text that comes before this value
|
|
66
|
+
* @returns The value with adjusted indentation
|
|
67
|
+
*/
|
|
68
|
+
function alignValue(value, precedingText) {
|
|
69
|
+
if (typeof value !== "string" || !value.includes("\n")) return value;
|
|
70
|
+
const currentLine = precedingText.slice(precedingText.lastIndexOf("\n") + 1);
|
|
71
|
+
const indentMatch = currentLine.match(/^(\s+)/);
|
|
72
|
+
if (indentMatch) {
|
|
73
|
+
const indent = indentMatch[1];
|
|
74
|
+
return value.replace(/\n/g, `\n${indent}`);
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Strips common leading indentation from all lines.
|
|
80
|
+
*
|
|
81
|
+
* @param text - The text to process
|
|
82
|
+
* @returns The text with common indentation removed
|
|
83
|
+
*/
|
|
84
|
+
function stripIndent(text) {
|
|
85
|
+
const lines = text.split("\n");
|
|
86
|
+
let minIndent = null;
|
|
87
|
+
for (const line of lines) {
|
|
88
|
+
const match = line.match(/^(\s+)\S+/);
|
|
89
|
+
if (match) {
|
|
90
|
+
const indent = match[1].length;
|
|
91
|
+
if (minIndent === null) minIndent = indent;
|
|
92
|
+
else minIndent = Math.min(minIndent, indent);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (minIndent === null) return text;
|
|
96
|
+
return lines.map((line) => line[0] === " " || line[0] === " " ? line.slice(minIndent) : line).join("\n");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
//#endregion
|
|
100
|
+
exports.context = context;
|
|
101
|
+
Object.defineProperty(exports, 'context_exports', {
|
|
102
|
+
enumerable: true,
|
|
103
|
+
get: function () {
|
|
104
|
+
return context_exports;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=context.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.cjs","names":["strings: TemplateStringsArray","value: unknown","precedingText: string","text: string","minIndent: number | null"],"sources":["../../src/utils/context.ts"],"sourcesContent":["/**\n * A tagged template function for creating formatted strings.\n *\n * This utility provides a clean, template literal-based API for string formatting\n * that can be used for prompts, descriptions, and other text formatting needs.\n *\n * It automatically handles whitespace normalization and indentation, making it\n * ideal for multi-line strings in code.\n *\n * When using this utility, it will:\n * - Strip common leading indentation from all lines\n * - Trim leading/trailing whitespace\n * - Align multi-line interpolated values to match indentation\n * - Support escape sequences: `\\\\n` (newline), `\\\\`` (backtick), `\\\\$` (dollar), `\\\\{` (brace)\n *\n * @example\n * ```typescript\n * import { context } from \"@langchain/core/utils/context\";\n *\n * const role = \"agent\";\n * const prompt = context`\n * You are an ${role}.\n * Your task is to help users.\n * `;\n * // Returns: \"You are an agent.\\nYour task is to help users.\"\n * ```\n *\n * @example\n * ```typescript\n * // Multi-line interpolated values are aligned\n * const items = \"- Item 1\\n- Item 2\\n- Item 3\";\n * const message = context`\n * Shopping list:\n * ${items}\n * End of list.\n * `;\n * // The items will be indented to match \" \" (4 spaces)\n * ```\n */\nexport function context(\n strings: TemplateStringsArray,\n ...values: unknown[]\n): string {\n const raw = strings.raw;\n let result = \"\";\n\n for (let i = 0; i < raw.length; i++) {\n // Handle escaped characters in template literals\n const next = raw[i]\n .replace(/\\\\\\n[ \\t]*/g, \"\") // escaped newlines (line continuation)\n .replace(/\\\\`/g, \"`\") // escaped backticks\n .replace(/\\\\\\$/g, \"$\") // escaped dollar signs\n .replace(/\\\\\\{/g, \"{\"); // escaped braces\n\n result += next;\n\n if (i < values.length) {\n const value = alignValue(values[i], result);\n result += typeof value === \"string\" ? value : JSON.stringify(value);\n }\n }\n\n // Strip common indentation\n result = stripIndent(result);\n\n // Trim leading/trailing whitespace\n result = result.trim();\n\n // Handle escaped \\n at the end (preserve intentional newlines)\n result = result.replace(/\\\\n/g, \"\\n\");\n\n return result;\n}\n\n/**\n * Adjusts the indentation of a multi-line interpolated value to match the current line.\n *\n * @param value - The interpolated value\n * @param precedingText - The text that comes before this value\n * @returns The value with adjusted indentation\n */\nfunction alignValue(value: unknown, precedingText: string): unknown {\n if (typeof value !== \"string\" || !value.includes(\"\\n\")) {\n return value;\n }\n\n const currentLine = precedingText.slice(precedingText.lastIndexOf(\"\\n\") + 1);\n const indentMatch = currentLine.match(/^(\\s+)/);\n\n if (indentMatch) {\n const indent = indentMatch[1];\n return value.replace(/\\n/g, `\\n${indent}`);\n }\n\n return value;\n}\n\n/**\n * Strips common leading indentation from all lines.\n *\n * @param text - The text to process\n * @returns The text with common indentation removed\n */\nfunction stripIndent(text: string): string {\n const lines = text.split(\"\\n\");\n\n // Find minimum indentation (only from lines that have content)\n let minIndent: number | null = null;\n for (const line of lines) {\n const match = line.match(/^(\\s+)\\S+/);\n if (match) {\n const indent = match[1].length;\n if (minIndent === null) {\n minIndent = indent;\n } else {\n minIndent = Math.min(minIndent, indent);\n }\n }\n }\n\n if (minIndent === null) {\n return text;\n }\n\n // Remove the common indentation from all lines\n return lines\n .map((line) =>\n line[0] === \" \" || line[0] === \"\\t\" ? line.slice(minIndent) : line\n )\n .join(\"\\n\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,QACdA,SACA,GAAG,QACK;CACR,MAAM,MAAM,QAAQ;CACpB,IAAI,SAAS;AAEb,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;EAEnC,MAAM,OAAO,IAAI,GACd,QAAQ,eAAe,GAAG,CAC1B,QAAQ,QAAQ,IAAI,CACpB,QAAQ,SAAS,IAAI,CACrB,QAAQ,SAAS,IAAI;EAExB,UAAU;AAEV,MAAI,IAAI,OAAO,QAAQ;GACrB,MAAM,QAAQ,WAAW,OAAO,IAAI,OAAO;GAC3C,UAAU,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,MAAM;EACpE;CACF;CAGD,SAAS,YAAY,OAAO;CAG5B,SAAS,OAAO,MAAM;CAGtB,SAAS,OAAO,QAAQ,QAAQ,KAAK;AAErC,QAAO;AACR;;;;;;;;AASD,SAAS,WAAWC,OAAgBC,eAAgC;AAClE,KAAI,OAAO,UAAU,YAAY,CAAC,MAAM,SAAS,KAAK,CACpD,QAAO;CAGT,MAAM,cAAc,cAAc,MAAM,cAAc,YAAY,KAAK,GAAG,EAAE;CAC5E,MAAM,cAAc,YAAY,MAAM,SAAS;AAE/C,KAAI,aAAa;EACf,MAAM,SAAS,YAAY;AAC3B,SAAO,MAAM,QAAQ,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC;CAC3C;AAED,QAAO;AACR;;;;;;;AAQD,SAAS,YAAYC,MAAsB;CACzC,MAAM,QAAQ,KAAK,MAAM,KAAK;CAG9B,IAAIC,YAA2B;AAC/B,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,MAAI,OAAO;GACT,MAAM,SAAS,MAAM,GAAG;AACxB,OAAI,cAAc,MAChB,YAAY;QAEZ,YAAY,KAAK,IAAI,WAAW,OAAO;EAE1C;CACF;AAED,KAAI,cAAc,KAChB,QAAO;AAIT,QAAO,MACJ,IAAI,CAAC,SACJ,KAAK,OAAO,OAAO,KAAK,OAAO,MAAO,KAAK,MAAM,UAAU,GAAG,KAC/D,CACA,KAAK,KAAK;AACd"}
|