@langchain/core 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @langchain/core
|
|
2
2
|
|
|
3
|
+
## 1.0.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#9431](https://github.com/langchain-ai/langchainjs/pull/9431) [`5709cb6`](https://github.com/langchain-ai/langchainjs/commit/5709cb64cc3e4eb300bde5ec8ae90686d2aa3d8e) Thanks [@dqbd](https://github.com/dqbd)! - fix(core): `store` should be accessible from tools
|
|
8
|
+
|
|
3
9
|
## 1.0.5
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/dist/load/import_map.cjs
CHANGED
|
@@ -30,8 +30,8 @@ const require_caches_base = require('../caches/base.cjs');
|
|
|
30
30
|
const require_document_loaders_base = require('../document_loaders/base.cjs');
|
|
31
31
|
const require_document_loaders_langsmith = require('../document_loaders/langsmith.cjs');
|
|
32
32
|
const require_documents_index = require('../documents/index.cjs');
|
|
33
|
-
const require_indexing_index = require('../indexing/index.cjs');
|
|
34
33
|
const require_example_selectors_index = require('../example_selectors/index.cjs');
|
|
34
|
+
const require_indexing_index = require('../indexing/index.cjs');
|
|
35
35
|
const require_utils_tiktoken = require('../utils/tiktoken.cjs');
|
|
36
36
|
const require_language_models_base = require('../language_models/base.cjs');
|
|
37
37
|
const require_language_models_chat_models = require('../language_models/chat_models.cjs');
|
package/dist/load/import_map.js
CHANGED
|
@@ -30,8 +30,8 @@ import { base_exports as base_exports$2 } from "../caches/base.js";
|
|
|
30
30
|
import { base_exports as base_exports$3 } from "../document_loaders/base.js";
|
|
31
31
|
import { langsmith_exports } from "../document_loaders/langsmith.js";
|
|
32
32
|
import { documents_exports } from "../documents/index.js";
|
|
33
|
-
import { indexing_exports } from "../indexing/index.js";
|
|
34
33
|
import { example_selectors_exports } from "../example_selectors/index.js";
|
|
34
|
+
import { indexing_exports } from "../indexing/index.js";
|
|
35
35
|
import { tiktoken_exports } from "../utils/tiktoken.js";
|
|
36
36
|
import { base_exports as base_exports$4 } from "../language_models/base.js";
|
|
37
37
|
import { chat_models_exports } from "../language_models/chat_models.js";
|
|
@@ -125,7 +125,8 @@ function patchConfig(config = {}, { callbacks, maxConcurrency, recursionLimit, r
|
|
|
125
125
|
return newConfig;
|
|
126
126
|
}
|
|
127
127
|
function pickRunnableConfigKeys(config) {
|
|
128
|
-
|
|
128
|
+
if (!config) return void 0;
|
|
129
|
+
return {
|
|
129
130
|
configurable: config.configurable,
|
|
130
131
|
recursionLimit: config.recursionLimit,
|
|
131
132
|
callbacks: config.callbacks,
|
|
@@ -133,8 +134,9 @@ function pickRunnableConfigKeys(config) {
|
|
|
133
134
|
metadata: config.metadata,
|
|
134
135
|
maxConcurrency: config.maxConcurrency,
|
|
135
136
|
timeout: config.timeout,
|
|
136
|
-
signal: config.signal
|
|
137
|
-
|
|
137
|
+
signal: config.signal,
|
|
138
|
+
store: config.store
|
|
139
|
+
};
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.cjs","names":["config?: RunnableConfig","CallbackManager","copy: Partial<CallOptions>","baseKeys: string[]","ensureHandler","config?: CallOptions","AsyncLocalStorageProviderSingleton","empty: RunnableConfig","currentConfig: Record<string, any>","config: Partial<CallOptions>"],"sources":["../../src/runnables/config.ts"],"sourcesContent":["import { CallbackManager, ensureHandler } from \"../callbacks/manager.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport { RunnableConfig } from \"./types.js\";\n\nexport const DEFAULT_RECURSION_LIMIT = 25;\n\nexport { type RunnableConfig };\n\nexport async function getCallbackManagerForConfig(config?: RunnableConfig) {\n return CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n}\n\nexport function mergeConfigs<CallOptions extends RunnableConfig>(\n ...configs: (CallOptions | RunnableConfig | undefined | null)[]\n): Partial<CallOptions> {\n // We do not want to call ensureConfig on the empty state here as this may cause\n // double loading of callbacks if async local storage is being used.\n const copy: Partial<CallOptions> = {};\n for (const options of configs.filter((c): c is CallOptions => !!c)) {\n for (const key of Object.keys(options)) {\n if (key === \"metadata\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"tags\") {\n const baseKeys: string[] = copy[key] ?? [];\n copy[key] = [...new Set(baseKeys.concat(options[key] ?? []))];\n } else if (key === \"configurable\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"timeout\") {\n if (copy.timeout === undefined) {\n copy.timeout = options.timeout;\n } else if (options.timeout !== undefined) {\n copy.timeout = Math.min(copy.timeout, options.timeout);\n }\n } else if (key === \"signal\") {\n if (copy.signal === undefined) {\n copy.signal = options.signal;\n } else if (options.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n copy.signal = (AbortSignal as any).any([\n copy.signal,\n options.signal,\n ]);\n } else {\n copy.signal = options.signal;\n }\n }\n } else if (key === \"callbacks\") {\n const baseCallbacks = copy.callbacks;\n const providedCallbacks = options.callbacks;\n // callbacks can be either undefined, Array<handler> or manager\n // so merging two callbacks values has 6 cases\n if (Array.isArray(providedCallbacks)) {\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n copy.callbacks = baseCallbacks.concat(providedCallbacks);\n } else {\n // baseCallbacks is a manager\n const manager = baseCallbacks.copy();\n for (const callback of providedCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n }\n } else if (providedCallbacks) {\n // providedCallbacks is a manager\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n const manager = providedCallbacks.copy();\n for (const callback of baseCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n } else {\n // baseCallbacks is also a manager\n copy.callbacks = new CallbackManager(\n providedCallbacks._parentRunId,\n {\n handlers: baseCallbacks.handlers.concat(\n providedCallbacks.handlers\n ),\n inheritableHandlers: baseCallbacks.inheritableHandlers.concat(\n providedCallbacks.inheritableHandlers\n ),\n tags: Array.from(\n new Set(baseCallbacks.tags.concat(providedCallbacks.tags))\n ),\n inheritableTags: Array.from(\n new Set(\n baseCallbacks.inheritableTags.concat(\n providedCallbacks.inheritableTags\n )\n )\n ),\n metadata: {\n ...baseCallbacks.metadata,\n ...providedCallbacks.metadata,\n },\n }\n );\n }\n }\n } else {\n const typedKey = key as keyof CallOptions;\n copy[typedKey] = options[typedKey] ?? copy[typedKey];\n }\n }\n }\n return copy as Partial<CallOptions>;\n}\n\nconst PRIMITIVES = new Set([\"string\", \"number\", \"boolean\"]);\n\n/**\n * Ensure that a passed config is an object with all required keys present.\n */\nexport function ensureConfig<CallOptions extends RunnableConfig>(\n config?: CallOptions\n): CallOptions {\n const implicitConfig = AsyncLocalStorageProviderSingleton.getRunnableConfig();\n let empty: RunnableConfig = {\n tags: [],\n metadata: {},\n recursionLimit: 25,\n runId: undefined,\n };\n if (implicitConfig) {\n // Don't allow runId and runName to be loaded implicitly, as this can cause\n // child runs to improperly inherit their parents' run ids.\n const { runId, runName, ...rest } = implicitConfig;\n empty = Object.entries(rest).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (config) {\n empty = Object.entries(config).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (empty?.configurable) {\n for (const key of Object.keys(empty.configurable)) {\n if (\n PRIMITIVES.has(typeof empty.configurable[key]) &&\n !empty.metadata?.[key]\n ) {\n if (!empty.metadata) {\n empty.metadata = {};\n }\n empty.metadata[key] = empty.configurable[key];\n }\n }\n }\n if (empty.timeout !== undefined) {\n if (empty.timeout <= 0) {\n throw new Error(\"Timeout must be a positive number\");\n }\n const timeoutSignal = AbortSignal.timeout(empty.timeout);\n if (empty.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n empty.signal = (AbortSignal as any).any([empty.signal, timeoutSignal]);\n }\n } else {\n empty.signal = timeoutSignal;\n }\n delete empty.timeout;\n }\n return empty as CallOptions;\n}\n\n/**\n * Helper function that patches runnable configs with updated properties.\n */\nexport function patchConfig<CallOptions extends RunnableConfig>(\n config: Partial<CallOptions> = {},\n {\n callbacks,\n maxConcurrency,\n recursionLimit,\n runName,\n configurable,\n runId,\n }: RunnableConfig = {}\n): Partial<CallOptions> {\n const newConfig = ensureConfig(config);\n if (callbacks !== undefined) {\n /**\n * If we're replacing callbacks we need to unset runName\n * since that should apply only to the same run as the original callbacks\n */\n delete newConfig.runName;\n newConfig.callbacks = callbacks;\n }\n if (recursionLimit !== undefined) {\n newConfig.recursionLimit = recursionLimit;\n }\n if (maxConcurrency !== undefined) {\n newConfig.maxConcurrency = maxConcurrency;\n }\n if (runName !== undefined) {\n newConfig.runName = runName;\n }\n if (configurable !== undefined) {\n newConfig.configurable = { ...newConfig.configurable, ...configurable };\n }\n if (runId !== undefined) {\n delete newConfig.runId;\n }\n return newConfig;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function pickRunnableConfigKeys<CallOptions extends Record<string, any>>(\n config?: CallOptions\n): Partial<RunnableConfig> | undefined {\n return config\n ? {\n configurable: config.configurable,\n recursionLimit: config.recursionLimit,\n callbacks: config.callbacks,\n tags: config.tags,\n metadata: config.metadata,\n maxConcurrency: config.maxConcurrency,\n timeout: config.timeout,\n signal: config.signal,\n }\n : undefined;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.cjs","names":["config?: RunnableConfig","CallbackManager","copy: Partial<CallOptions>","baseKeys: string[]","ensureHandler","config?: CallOptions","AsyncLocalStorageProviderSingleton","empty: RunnableConfig","currentConfig: Record<string, any>","config: Partial<CallOptions>"],"sources":["../../src/runnables/config.ts"],"sourcesContent":["import { CallbackManager, ensureHandler } from \"../callbacks/manager.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport { RunnableConfig } from \"./types.js\";\n\nexport const DEFAULT_RECURSION_LIMIT = 25;\n\nexport { type RunnableConfig };\n\nexport async function getCallbackManagerForConfig(config?: RunnableConfig) {\n return CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n}\n\nexport function mergeConfigs<CallOptions extends RunnableConfig>(\n ...configs: (CallOptions | RunnableConfig | undefined | null)[]\n): Partial<CallOptions> {\n // We do not want to call ensureConfig on the empty state here as this may cause\n // double loading of callbacks if async local storage is being used.\n const copy: Partial<CallOptions> = {};\n for (const options of configs.filter((c): c is CallOptions => !!c)) {\n for (const key of Object.keys(options)) {\n if (key === \"metadata\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"tags\") {\n const baseKeys: string[] = copy[key] ?? [];\n copy[key] = [...new Set(baseKeys.concat(options[key] ?? []))];\n } else if (key === \"configurable\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"timeout\") {\n if (copy.timeout === undefined) {\n copy.timeout = options.timeout;\n } else if (options.timeout !== undefined) {\n copy.timeout = Math.min(copy.timeout, options.timeout);\n }\n } else if (key === \"signal\") {\n if (copy.signal === undefined) {\n copy.signal = options.signal;\n } else if (options.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n copy.signal = (AbortSignal as any).any([\n copy.signal,\n options.signal,\n ]);\n } else {\n copy.signal = options.signal;\n }\n }\n } else if (key === \"callbacks\") {\n const baseCallbacks = copy.callbacks;\n const providedCallbacks = options.callbacks;\n // callbacks can be either undefined, Array<handler> or manager\n // so merging two callbacks values has 6 cases\n if (Array.isArray(providedCallbacks)) {\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n copy.callbacks = baseCallbacks.concat(providedCallbacks);\n } else {\n // baseCallbacks is a manager\n const manager = baseCallbacks.copy();\n for (const callback of providedCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n }\n } else if (providedCallbacks) {\n // providedCallbacks is a manager\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n const manager = providedCallbacks.copy();\n for (const callback of baseCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n } else {\n // baseCallbacks is also a manager\n copy.callbacks = new CallbackManager(\n providedCallbacks._parentRunId,\n {\n handlers: baseCallbacks.handlers.concat(\n providedCallbacks.handlers\n ),\n inheritableHandlers: baseCallbacks.inheritableHandlers.concat(\n providedCallbacks.inheritableHandlers\n ),\n tags: Array.from(\n new Set(baseCallbacks.tags.concat(providedCallbacks.tags))\n ),\n inheritableTags: Array.from(\n new Set(\n baseCallbacks.inheritableTags.concat(\n providedCallbacks.inheritableTags\n )\n )\n ),\n metadata: {\n ...baseCallbacks.metadata,\n ...providedCallbacks.metadata,\n },\n }\n );\n }\n }\n } else {\n const typedKey = key as keyof CallOptions;\n copy[typedKey] = options[typedKey] ?? copy[typedKey];\n }\n }\n }\n return copy as Partial<CallOptions>;\n}\n\nconst PRIMITIVES = new Set([\"string\", \"number\", \"boolean\"]);\n\n/**\n * Ensure that a passed config is an object with all required keys present.\n */\nexport function ensureConfig<CallOptions extends RunnableConfig>(\n config?: CallOptions\n): CallOptions {\n const implicitConfig = AsyncLocalStorageProviderSingleton.getRunnableConfig();\n let empty: RunnableConfig = {\n tags: [],\n metadata: {},\n recursionLimit: 25,\n runId: undefined,\n };\n if (implicitConfig) {\n // Don't allow runId and runName to be loaded implicitly, as this can cause\n // child runs to improperly inherit their parents' run ids.\n const { runId, runName, ...rest } = implicitConfig;\n empty = Object.entries(rest).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (config) {\n empty = Object.entries(config).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (empty?.configurable) {\n for (const key of Object.keys(empty.configurable)) {\n if (\n PRIMITIVES.has(typeof empty.configurable[key]) &&\n !empty.metadata?.[key]\n ) {\n if (!empty.metadata) {\n empty.metadata = {};\n }\n empty.metadata[key] = empty.configurable[key];\n }\n }\n }\n if (empty.timeout !== undefined) {\n if (empty.timeout <= 0) {\n throw new Error(\"Timeout must be a positive number\");\n }\n const timeoutSignal = AbortSignal.timeout(empty.timeout);\n if (empty.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n empty.signal = (AbortSignal as any).any([empty.signal, timeoutSignal]);\n }\n } else {\n empty.signal = timeoutSignal;\n }\n delete empty.timeout;\n }\n return empty as CallOptions;\n}\n\n/**\n * Helper function that patches runnable configs with updated properties.\n */\nexport function patchConfig<CallOptions extends RunnableConfig>(\n config: Partial<CallOptions> = {},\n {\n callbacks,\n maxConcurrency,\n recursionLimit,\n runName,\n configurable,\n runId,\n }: RunnableConfig = {}\n): Partial<CallOptions> {\n const newConfig = ensureConfig(config);\n if (callbacks !== undefined) {\n /**\n * If we're replacing callbacks we need to unset runName\n * since that should apply only to the same run as the original callbacks\n */\n delete newConfig.runName;\n newConfig.callbacks = callbacks;\n }\n if (recursionLimit !== undefined) {\n newConfig.recursionLimit = recursionLimit;\n }\n if (maxConcurrency !== undefined) {\n newConfig.maxConcurrency = maxConcurrency;\n }\n if (runName !== undefined) {\n newConfig.runName = runName;\n }\n if (configurable !== undefined) {\n newConfig.configurable = { ...newConfig.configurable, ...configurable };\n }\n if (runId !== undefined) {\n delete newConfig.runId;\n }\n return newConfig;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function pickRunnableConfigKeys<CallOptions extends Record<string, any>>(\n config?: CallOptions\n): Partial<RunnableConfig> | undefined {\n if (!config) return undefined;\n\n return {\n configurable: config.configurable,\n recursionLimit: config.recursionLimit,\n callbacks: config.callbacks,\n tags: config.tags,\n metadata: config.metadata,\n maxConcurrency: config.maxConcurrency,\n timeout: config.timeout,\n signal: config.signal,\n // @ts-expect-error - Store is a LangGraph-specific property\n // which wewant to pass through to all runnables.\n // (eg. tools should have access to writing to the store)\n store: config.store,\n };\n}\n"],"mappings":"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"}
|
package/dist/runnables/config.js
CHANGED
|
@@ -125,7 +125,8 @@ function patchConfig(config = {}, { callbacks, maxConcurrency, recursionLimit, r
|
|
|
125
125
|
return newConfig;
|
|
126
126
|
}
|
|
127
127
|
function pickRunnableConfigKeys(config) {
|
|
128
|
-
|
|
128
|
+
if (!config) return void 0;
|
|
129
|
+
return {
|
|
129
130
|
configurable: config.configurable,
|
|
130
131
|
recursionLimit: config.recursionLimit,
|
|
131
132
|
callbacks: config.callbacks,
|
|
@@ -133,8 +134,9 @@ function pickRunnableConfigKeys(config) {
|
|
|
133
134
|
metadata: config.metadata,
|
|
134
135
|
maxConcurrency: config.maxConcurrency,
|
|
135
136
|
timeout: config.timeout,
|
|
136
|
-
signal: config.signal
|
|
137
|
-
|
|
137
|
+
signal: config.signal,
|
|
138
|
+
store: config.store
|
|
139
|
+
};
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["config?: RunnableConfig","copy: Partial<CallOptions>","baseKeys: string[]","config?: CallOptions","empty: RunnableConfig","currentConfig: Record<string, any>","config: Partial<CallOptions>"],"sources":["../../src/runnables/config.ts"],"sourcesContent":["import { CallbackManager, ensureHandler } from \"../callbacks/manager.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport { RunnableConfig } from \"./types.js\";\n\nexport const DEFAULT_RECURSION_LIMIT = 25;\n\nexport { type RunnableConfig };\n\nexport async function getCallbackManagerForConfig(config?: RunnableConfig) {\n return CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n}\n\nexport function mergeConfigs<CallOptions extends RunnableConfig>(\n ...configs: (CallOptions | RunnableConfig | undefined | null)[]\n): Partial<CallOptions> {\n // We do not want to call ensureConfig on the empty state here as this may cause\n // double loading of callbacks if async local storage is being used.\n const copy: Partial<CallOptions> = {};\n for (const options of configs.filter((c): c is CallOptions => !!c)) {\n for (const key of Object.keys(options)) {\n if (key === \"metadata\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"tags\") {\n const baseKeys: string[] = copy[key] ?? [];\n copy[key] = [...new Set(baseKeys.concat(options[key] ?? []))];\n } else if (key === \"configurable\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"timeout\") {\n if (copy.timeout === undefined) {\n copy.timeout = options.timeout;\n } else if (options.timeout !== undefined) {\n copy.timeout = Math.min(copy.timeout, options.timeout);\n }\n } else if (key === \"signal\") {\n if (copy.signal === undefined) {\n copy.signal = options.signal;\n } else if (options.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n copy.signal = (AbortSignal as any).any([\n copy.signal,\n options.signal,\n ]);\n } else {\n copy.signal = options.signal;\n }\n }\n } else if (key === \"callbacks\") {\n const baseCallbacks = copy.callbacks;\n const providedCallbacks = options.callbacks;\n // callbacks can be either undefined, Array<handler> or manager\n // so merging two callbacks values has 6 cases\n if (Array.isArray(providedCallbacks)) {\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n copy.callbacks = baseCallbacks.concat(providedCallbacks);\n } else {\n // baseCallbacks is a manager\n const manager = baseCallbacks.copy();\n for (const callback of providedCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n }\n } else if (providedCallbacks) {\n // providedCallbacks is a manager\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n const manager = providedCallbacks.copy();\n for (const callback of baseCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n } else {\n // baseCallbacks is also a manager\n copy.callbacks = new CallbackManager(\n providedCallbacks._parentRunId,\n {\n handlers: baseCallbacks.handlers.concat(\n providedCallbacks.handlers\n ),\n inheritableHandlers: baseCallbacks.inheritableHandlers.concat(\n providedCallbacks.inheritableHandlers\n ),\n tags: Array.from(\n new Set(baseCallbacks.tags.concat(providedCallbacks.tags))\n ),\n inheritableTags: Array.from(\n new Set(\n baseCallbacks.inheritableTags.concat(\n providedCallbacks.inheritableTags\n )\n )\n ),\n metadata: {\n ...baseCallbacks.metadata,\n ...providedCallbacks.metadata,\n },\n }\n );\n }\n }\n } else {\n const typedKey = key as keyof CallOptions;\n copy[typedKey] = options[typedKey] ?? copy[typedKey];\n }\n }\n }\n return copy as Partial<CallOptions>;\n}\n\nconst PRIMITIVES = new Set([\"string\", \"number\", \"boolean\"]);\n\n/**\n * Ensure that a passed config is an object with all required keys present.\n */\nexport function ensureConfig<CallOptions extends RunnableConfig>(\n config?: CallOptions\n): CallOptions {\n const implicitConfig = AsyncLocalStorageProviderSingleton.getRunnableConfig();\n let empty: RunnableConfig = {\n tags: [],\n metadata: {},\n recursionLimit: 25,\n runId: undefined,\n };\n if (implicitConfig) {\n // Don't allow runId and runName to be loaded implicitly, as this can cause\n // child runs to improperly inherit their parents' run ids.\n const { runId, runName, ...rest } = implicitConfig;\n empty = Object.entries(rest).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (config) {\n empty = Object.entries(config).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (empty?.configurable) {\n for (const key of Object.keys(empty.configurable)) {\n if (\n PRIMITIVES.has(typeof empty.configurable[key]) &&\n !empty.metadata?.[key]\n ) {\n if (!empty.metadata) {\n empty.metadata = {};\n }\n empty.metadata[key] = empty.configurable[key];\n }\n }\n }\n if (empty.timeout !== undefined) {\n if (empty.timeout <= 0) {\n throw new Error(\"Timeout must be a positive number\");\n }\n const timeoutSignal = AbortSignal.timeout(empty.timeout);\n if (empty.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n empty.signal = (AbortSignal as any).any([empty.signal, timeoutSignal]);\n }\n } else {\n empty.signal = timeoutSignal;\n }\n delete empty.timeout;\n }\n return empty as CallOptions;\n}\n\n/**\n * Helper function that patches runnable configs with updated properties.\n */\nexport function patchConfig<CallOptions extends RunnableConfig>(\n config: Partial<CallOptions> = {},\n {\n callbacks,\n maxConcurrency,\n recursionLimit,\n runName,\n configurable,\n runId,\n }: RunnableConfig = {}\n): Partial<CallOptions> {\n const newConfig = ensureConfig(config);\n if (callbacks !== undefined) {\n /**\n * If we're replacing callbacks we need to unset runName\n * since that should apply only to the same run as the original callbacks\n */\n delete newConfig.runName;\n newConfig.callbacks = callbacks;\n }\n if (recursionLimit !== undefined) {\n newConfig.recursionLimit = recursionLimit;\n }\n if (maxConcurrency !== undefined) {\n newConfig.maxConcurrency = maxConcurrency;\n }\n if (runName !== undefined) {\n newConfig.runName = runName;\n }\n if (configurable !== undefined) {\n newConfig.configurable = { ...newConfig.configurable, ...configurable };\n }\n if (runId !== undefined) {\n delete newConfig.runId;\n }\n return newConfig;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function pickRunnableConfigKeys<CallOptions extends Record<string, any>>(\n config?: CallOptions\n): Partial<RunnableConfig> | undefined {\n return config\n ? {\n configurable: config.configurable,\n recursionLimit: config.recursionLimit,\n callbacks: config.callbacks,\n tags: config.tags,\n metadata: config.metadata,\n maxConcurrency: config.maxConcurrency,\n timeout: config.timeout,\n signal: config.signal,\n }\n : undefined;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","names":["config?: RunnableConfig","copy: Partial<CallOptions>","baseKeys: string[]","config?: CallOptions","empty: RunnableConfig","currentConfig: Record<string, any>","config: Partial<CallOptions>"],"sources":["../../src/runnables/config.ts"],"sourcesContent":["import { CallbackManager, ensureHandler } from \"../callbacks/manager.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport { RunnableConfig } from \"./types.js\";\n\nexport const DEFAULT_RECURSION_LIMIT = 25;\n\nexport { type RunnableConfig };\n\nexport async function getCallbackManagerForConfig(config?: RunnableConfig) {\n return CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n}\n\nexport function mergeConfigs<CallOptions extends RunnableConfig>(\n ...configs: (CallOptions | RunnableConfig | undefined | null)[]\n): Partial<CallOptions> {\n // We do not want to call ensureConfig on the empty state here as this may cause\n // double loading of callbacks if async local storage is being used.\n const copy: Partial<CallOptions> = {};\n for (const options of configs.filter((c): c is CallOptions => !!c)) {\n for (const key of Object.keys(options)) {\n if (key === \"metadata\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"tags\") {\n const baseKeys: string[] = copy[key] ?? [];\n copy[key] = [...new Set(baseKeys.concat(options[key] ?? []))];\n } else if (key === \"configurable\") {\n copy[key] = { ...copy[key], ...options[key] };\n } else if (key === \"timeout\") {\n if (copy.timeout === undefined) {\n copy.timeout = options.timeout;\n } else if (options.timeout !== undefined) {\n copy.timeout = Math.min(copy.timeout, options.timeout);\n }\n } else if (key === \"signal\") {\n if (copy.signal === undefined) {\n copy.signal = options.signal;\n } else if (options.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n copy.signal = (AbortSignal as any).any([\n copy.signal,\n options.signal,\n ]);\n } else {\n copy.signal = options.signal;\n }\n }\n } else if (key === \"callbacks\") {\n const baseCallbacks = copy.callbacks;\n const providedCallbacks = options.callbacks;\n // callbacks can be either undefined, Array<handler> or manager\n // so merging two callbacks values has 6 cases\n if (Array.isArray(providedCallbacks)) {\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n copy.callbacks = baseCallbacks.concat(providedCallbacks);\n } else {\n // baseCallbacks is a manager\n const manager = baseCallbacks.copy();\n for (const callback of providedCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n }\n } else if (providedCallbacks) {\n // providedCallbacks is a manager\n if (!baseCallbacks) {\n copy.callbacks = providedCallbacks;\n } else if (Array.isArray(baseCallbacks)) {\n const manager = providedCallbacks.copy();\n for (const callback of baseCallbacks) {\n manager.addHandler(ensureHandler(callback), true);\n }\n copy.callbacks = manager;\n } else {\n // baseCallbacks is also a manager\n copy.callbacks = new CallbackManager(\n providedCallbacks._parentRunId,\n {\n handlers: baseCallbacks.handlers.concat(\n providedCallbacks.handlers\n ),\n inheritableHandlers: baseCallbacks.inheritableHandlers.concat(\n providedCallbacks.inheritableHandlers\n ),\n tags: Array.from(\n new Set(baseCallbacks.tags.concat(providedCallbacks.tags))\n ),\n inheritableTags: Array.from(\n new Set(\n baseCallbacks.inheritableTags.concat(\n providedCallbacks.inheritableTags\n )\n )\n ),\n metadata: {\n ...baseCallbacks.metadata,\n ...providedCallbacks.metadata,\n },\n }\n );\n }\n }\n } else {\n const typedKey = key as keyof CallOptions;\n copy[typedKey] = options[typedKey] ?? copy[typedKey];\n }\n }\n }\n return copy as Partial<CallOptions>;\n}\n\nconst PRIMITIVES = new Set([\"string\", \"number\", \"boolean\"]);\n\n/**\n * Ensure that a passed config is an object with all required keys present.\n */\nexport function ensureConfig<CallOptions extends RunnableConfig>(\n config?: CallOptions\n): CallOptions {\n const implicitConfig = AsyncLocalStorageProviderSingleton.getRunnableConfig();\n let empty: RunnableConfig = {\n tags: [],\n metadata: {},\n recursionLimit: 25,\n runId: undefined,\n };\n if (implicitConfig) {\n // Don't allow runId and runName to be loaded implicitly, as this can cause\n // child runs to improperly inherit their parents' run ids.\n const { runId, runName, ...rest } = implicitConfig;\n empty = Object.entries(rest).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (config) {\n empty = Object.entries(config).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (currentConfig: Record<string, any>, [key, value]) => {\n if (value !== undefined) {\n currentConfig[key] = value;\n }\n return currentConfig;\n },\n empty\n );\n }\n if (empty?.configurable) {\n for (const key of Object.keys(empty.configurable)) {\n if (\n PRIMITIVES.has(typeof empty.configurable[key]) &&\n !empty.metadata?.[key]\n ) {\n if (!empty.metadata) {\n empty.metadata = {};\n }\n empty.metadata[key] = empty.configurable[key];\n }\n }\n }\n if (empty.timeout !== undefined) {\n if (empty.timeout <= 0) {\n throw new Error(\"Timeout must be a positive number\");\n }\n const timeoutSignal = AbortSignal.timeout(empty.timeout);\n if (empty.signal !== undefined) {\n if (\"any\" in AbortSignal) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n empty.signal = (AbortSignal as any).any([empty.signal, timeoutSignal]);\n }\n } else {\n empty.signal = timeoutSignal;\n }\n delete empty.timeout;\n }\n return empty as CallOptions;\n}\n\n/**\n * Helper function that patches runnable configs with updated properties.\n */\nexport function patchConfig<CallOptions extends RunnableConfig>(\n config: Partial<CallOptions> = {},\n {\n callbacks,\n maxConcurrency,\n recursionLimit,\n runName,\n configurable,\n runId,\n }: RunnableConfig = {}\n): Partial<CallOptions> {\n const newConfig = ensureConfig(config);\n if (callbacks !== undefined) {\n /**\n * If we're replacing callbacks we need to unset runName\n * since that should apply only to the same run as the original callbacks\n */\n delete newConfig.runName;\n newConfig.callbacks = callbacks;\n }\n if (recursionLimit !== undefined) {\n newConfig.recursionLimit = recursionLimit;\n }\n if (maxConcurrency !== undefined) {\n newConfig.maxConcurrency = maxConcurrency;\n }\n if (runName !== undefined) {\n newConfig.runName = runName;\n }\n if (configurable !== undefined) {\n newConfig.configurable = { ...newConfig.configurable, ...configurable };\n }\n if (runId !== undefined) {\n delete newConfig.runId;\n }\n return newConfig;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function pickRunnableConfigKeys<CallOptions extends Record<string, any>>(\n config?: CallOptions\n): Partial<RunnableConfig> | undefined {\n if (!config) return undefined;\n\n return {\n configurable: config.configurable,\n recursionLimit: config.recursionLimit,\n callbacks: config.callbacks,\n tags: config.tags,\n metadata: config.metadata,\n maxConcurrency: config.maxConcurrency,\n timeout: config.timeout,\n signal: config.signal,\n // @ts-expect-error - Store is a LangGraph-specific property\n // which wewant to pass through to all runnables.\n // (eg. tools should have access to writing to the store)\n store: config.store,\n };\n}\n"],"mappings":"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"}
|