diff --git a/langchain-core/src/callbacks/base.ts b/langchain-core/src/callbacks/base.ts index 2dad82102fb9..9b5b051461ff 100644 --- a/langchain-core/src/callbacks/base.ts +++ b/langchain-core/src/callbacks/base.ts @@ -328,6 +328,10 @@ export abstract class BaseCallbackHandler return undefined; } + get lc_serializable_keys(): string[] | undefined { + return undefined; + } + /** * The name of the serializable. Override to provide an alias or * to preserve the serialized module name in minified environments. diff --git a/langchain-core/src/load/serializable.ts b/langchain-core/src/load/serializable.ts index d4f7cc7e947a..66eb46f1892b 100644 --- a/langchain-core/src/load/serializable.ts +++ b/langchain-core/src/load/serializable.ts @@ -140,8 +140,24 @@ export abstract class Serializable implements SerializableInterface { return undefined; } + /** + * A manual list of keys that should be serialized. + * If not overridden, all fields passed into the constructor will be serialized. + */ + get lc_serializable_keys(): string[] | undefined { + return undefined; + } + constructor(kwargs?: SerializedFields, ..._args: never[]) { - this.lc_kwargs = kwargs || {}; + if (this.lc_serializable_keys !== undefined) { + this.lc_kwargs = Object.fromEntries( + Object.entries(kwargs || {}).filter(([key]) => + this.lc_serializable_keys?.includes(key) + ) + ); + } else { + this.lc_kwargs = kwargs ?? {}; + } } toJSON(): Serialized {