@langchain/core 1.1.29 → 1.1.31
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 +29 -0
- package/dist/language_models/base.cjs +1 -1
- package/dist/language_models/base.cjs.map +1 -1
- package/dist/language_models/base.d.cts +6 -0
- package/dist/language_models/base.d.cts.map +1 -1
- package/dist/language_models/base.d.ts +6 -0
- package/dist/language_models/base.d.ts.map +1 -1
- package/dist/language_models/base.js +1 -1
- package/dist/language_models/base.js.map +1 -1
- package/dist/language_models/chat_models.cjs +8 -23
- package/dist/language_models/chat_models.cjs.map +1 -1
- package/dist/language_models/chat_models.d.cts +6 -0
- package/dist/language_models/chat_models.d.cts.map +1 -1
- package/dist/language_models/chat_models.d.ts +6 -0
- package/dist/language_models/chat_models.d.ts.map +1 -1
- package/dist/language_models/chat_models.js +9 -24
- package/dist/language_models/chat_models.js.map +1 -1
- package/dist/language_models/structured_output.cjs +88 -0
- package/dist/language_models/structured_output.cjs.map +1 -0
- package/dist/language_models/structured_output.d.cts +46 -0
- package/dist/language_models/structured_output.d.cts.map +1 -0
- package/dist/language_models/structured_output.d.ts +50 -0
- package/dist/language_models/structured_output.d.ts.map +1 -0
- package/dist/language_models/structured_output.js +79 -0
- package/dist/language_models/structured_output.js.map +1 -0
- package/dist/load/import_map.cjs +10 -4
- package/dist/load/import_map.cjs.map +1 -1
- package/dist/load/import_map.js +12 -6
- package/dist/load/import_map.js.map +1 -1
- package/dist/messages/base.cjs.map +1 -1
- package/dist/messages/base.d.cts +2 -2
- package/dist/messages/base.d.cts.map +1 -1
- package/dist/messages/base.d.ts +2 -2
- package/dist/messages/base.d.ts.map +1 -1
- package/dist/messages/base.js.map +1 -1
- package/dist/output_parsers/index.cjs +4 -1
- package/dist/output_parsers/index.cjs.map +1 -1
- package/dist/output_parsers/index.d.cts +2 -1
- package/dist/output_parsers/index.d.ts +2 -1
- package/dist/output_parsers/index.js +4 -2
- package/dist/output_parsers/index.js.map +1 -1
- package/dist/output_parsers/openai_tools/index.d.cts +2 -2
- package/dist/output_parsers/openai_tools/index.d.ts +2 -2
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs +8 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.cts +6 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.cts.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.ts +6 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.ts.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.js +8 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
- package/dist/output_parsers/standard_schema.cjs +40 -0
- package/dist/output_parsers/standard_schema.cjs.map +1 -0
- package/dist/output_parsers/standard_schema.d.cts +16 -0
- package/dist/output_parsers/standard_schema.d.cts.map +1 -0
- package/dist/output_parsers/standard_schema.d.ts +16 -0
- package/dist/output_parsers/standard_schema.d.ts.map +1 -0
- package/dist/output_parsers/standard_schema.js +40 -0
- package/dist/output_parsers/standard_schema.js.map +1 -0
- package/dist/runnables/base.cjs +1 -1
- package/dist/runnables/base.cjs.map +1 -1
- package/dist/runnables/base.js +2 -2
- package/dist/runnables/base.js.map +1 -1
- package/dist/testing/fake_model_builder.cjs +174 -0
- package/dist/testing/fake_model_builder.cjs.map +1 -0
- package/dist/testing/fake_model_builder.d.cts +87 -0
- package/dist/testing/fake_model_builder.d.cts.map +1 -0
- package/dist/testing/fake_model_builder.d.ts +88 -0
- package/dist/testing/fake_model_builder.d.ts.map +1 -0
- package/dist/testing/fake_model_builder.js +174 -0
- package/dist/testing/fake_model_builder.js.map +1 -0
- package/dist/testing/index.cjs +41 -0
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.d.cts +3 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.js +23 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/matchers.cjs +213 -0
- package/dist/testing/matchers.cjs.map +1 -0
- package/dist/testing/matchers.d.cts +94 -0
- package/dist/testing/matchers.d.cts.map +1 -0
- package/dist/testing/matchers.d.ts +94 -0
- package/dist/testing/matchers.d.ts.map +1 -0
- package/dist/testing/matchers.js +203 -0
- package/dist/testing/matchers.js.map +1 -0
- package/dist/utils/json_schema.cjs +3 -1
- package/dist/utils/json_schema.cjs.map +1 -1
- package/dist/utils/json_schema.d.cts +3 -2
- package/dist/utils/json_schema.d.cts.map +1 -1
- package/dist/utils/json_schema.d.ts +3 -2
- package/dist/utils/json_schema.d.ts.map +1 -1
- package/dist/utils/json_schema.js +3 -1
- package/dist/utils/json_schema.js.map +1 -1
- package/dist/utils/standard_schema.cjs +43 -0
- package/dist/utils/standard_schema.cjs.map +1 -0
- package/dist/utils/standard_schema.d.cts +27 -0
- package/dist/utils/standard_schema.d.cts.map +1 -0
- package/dist/utils/standard_schema.d.ts +27 -0
- package/dist/utils/standard_schema.d.ts.map +1 -0
- package/dist/utils/standard_schema.js +34 -0
- package/dist/utils/standard_schema.js.map +1 -0
- package/dist/utils/types/zod.cjs +1 -1
- package/dist/utils/types/zod.cjs.map +1 -1
- package/dist/utils/types/zod.d.cts +3 -2
- package/dist/utils/types/zod.d.cts.map +1 -1
- package/dist/utils/types/zod.d.ts +3 -2
- package/dist/utils/types/zod.d.ts.map +1 -1
- package/dist/utils/types/zod.js +1 -1
- package/dist/utils/types/zod.js.map +1 -1
- package/errors.cjs +1 -0
- package/errors.d.cts +1 -0
- package/errors.d.ts +1 -0
- package/errors.js +1 -0
- package/language_models/structured_output.cjs +1 -0
- package/language_models/structured_output.d.cts +1 -0
- package/language_models/structured_output.d.ts +1 -0
- package/language_models/structured_output.js +1 -0
- package/package.json +42 -3
- package/utils/standard_schema.cjs +1 -0
- package/utils/standard_schema.d.cts +1 -0
- package/utils/standard_schema.d.ts +1 -0
- package/utils/standard_schema.js +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json_output_tools_parsers.d.cts","names":[],"sources":["../../../src/output_parsers/openai_tools/json_output_tools_parsers.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"json_output_tools_parsers.d.cts","names":[],"sources":["../../../src/output_parsers/openai_tools/json_output_tools_parsers.ts"],"mappings":";;;;;;;;;KAiBY,cAAA;EACV,EAAA;EAEA,IAAA;EAGA,IAAA,EAAM,MAAA;AAAA;AAAA,KAGI,2BAAA;EARV,0CAUA,QAAA;AAAA,IACE,wCAAA;AAAA,iBAEY,aAAA,CAEd,WAAA,EAAa,MAAA,eACb,OAAA;EAAW,QAAA;EAAoB,OAAA;AAAA,IAC9B,QAAA;AAAA,iBACa,aAAA,CAEd,WAAA,EAAa,MAAA,eACb,OAAA;EAAY,QAAA;EAAoB,OAAA;AAAA,IAC/B,QAAA;AAAA,iBACa,aAAA,CAEd,WAAA,EAAa,MAAA,eACb,OAAA;EAAY,QAAA;EAAoB,OAAA;AAAA,IAC/B,QAAA;AAAA,iBA+Ca,gCAAA,CAAiC,QAAA,EAAU,QAAA;;;;;;;;iBAc3C,mBAAA,CAEd,WAAA,EAAa,MAAA,eACb,QAAA,YACC,eAAA;;;;cAaU,qBAAA,YAEH,mCAAA,CAAoC,CAAA;EAAA,OACrC,OAAA,CAAA;EAIP,QAAA;EAEA,YAAA;EAEA,eAAA;EAEA,WAAA,CAAY,MAAA,GAAS,2BAAA;EAAA,UAKX,KAAA,CAAA;EAIJ,KAAA,CAAA,GAAS,OAAA,CAAQ,CAAA;EAIjB,WAAA,CAAY,WAAA,EAAa,cAAA,KAAmB,OAAA,CAAQ,CAAA;EA5G/B;;;;;;EAuHrB,kBAAA,CACJ,WAAA,EAAa,mBAAA,KAAwB,cAAA,IACrC,OAAA,aAEC,OAAA;AAAA;AAAA,KAwCA,kCAAA;EACH,OAAA;EACA,YAAA;AAAA,IACE,2BAAA;AAAA,KAEC,gCAAA,WAEO,MAAA,gBAAsB,MAAA;EAC5B,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,CAAA;AAAA,IAAO,kCAAA;AAAA,KAE/B,gCAAA,WAEO,MAAA,gBAAsB,MAAA;EAC5B,SAAA,GAAY,EAAA,CAAG,QAAA,CAAS,CAAA,EAAG,CAAA;AAAA,IAAO,kCAAA;AAAA,KAE5B,qCAAA,WAEA,MAAA,gBAAsB,MAAA;EAC5B,SAAA,GAAY,cAAA,CAAe,CAAA;AAAA,IAAO,kCAAA;AAAA,KAE5B,0CAAA,WAEA,MAAA,gBAAsB,MAAA;EAEhC,kBAAA,GAAqB,kBAAA,CAAmB,CAAA;AAAA,IACtC,kCAAA;AAAA,KAGQ,8BAAA,WAEA,MAAA,gBAAsB,MAAA,iBAC9B,gCAAA,CAAiC,CAAA;;;;;cAMxB,wBAAA,WAED,MAAA,gBAAsB,MAAA,uBACxB,qBAAA,CAAsB,CAAA;EAAA,OACvB,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,QAAA;EAlIW;EAqIX,OAAA;EArIgC;EAwIhC,YAAA;EAEA,SAAA,GAAY,cAAA,CAAe,CAAA;EAE3B,kBAAA,GAAqB,kBAAA,CAAmB,CAAA;EAExC,WAAA,CAAY,MAAA,EAAQ,gCAAA,CAAiC,CAAA;EAErD,WAAA,CAAY,MAAA,EAAQ,gCAAA,CAAiC,CAAA;EAErD,WAAA,CAAY,MAAA,EAAQ,qCAAA,CAAsC,CAAA;EAAA,UAoB1C,eAAA,CAAgB,MAAA,YAAkB,OAAA,CAAQ,CAAA;EAmCpD,kBAAA,CAAmB,WAAA,EAAa,cAAA,KAAmB,OAAA;EAuBnD,WAAA,CAAY,WAAA,EAAa,cAAA,KAAmB,OAAA;AAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { InvalidToolCall, ToolCall } from "../../messages/tool.js";
|
|
2
2
|
import { ChatGeneration, ChatGenerationChunk } from "../../outputs.js";
|
|
3
|
+
import { SerializableSchema } from "../../utils/standard_schema.js";
|
|
3
4
|
import { InteropZodType } from "../../utils/types/zod.js";
|
|
4
5
|
import { BaseCumulativeTransformOutputParser, BaseCumulativeTransformOutputParserInput } from "../transform.js";
|
|
5
6
|
import * as z3 from "zod/v3";
|
|
@@ -68,6 +69,9 @@ type JsonOutputKeyToolsParserParamsV4<T extends Record<string, any> = Record<str
|
|
|
68
69
|
type JsonOutputKeyToolsParserParamsInterop<T extends Record<string, any> = Record<string, any>> = {
|
|
69
70
|
zodSchema?: InteropZodType<T>;
|
|
70
71
|
} & JsonOutputKeyToolsParserParamsBase;
|
|
72
|
+
type JsonOutputKeyToolsParserParamsSerializable<T extends Record<string, any> = Record<string, any>> = {
|
|
73
|
+
serializableSchema?: SerializableSchema<T>;
|
|
74
|
+
} & JsonOutputKeyToolsParserParamsBase;
|
|
71
75
|
type JsonOutputKeyToolsParserParams<T extends Record<string, any> = Record<string, any>> = JsonOutputKeyToolsParserParamsV3<T>;
|
|
72
76
|
/**
|
|
73
77
|
* Class for parsing the output of a tool-calling LLM into a JSON object if you are
|
|
@@ -83,6 +87,7 @@ declare class JsonOutputKeyToolsParser<T extends Record<string, any> = Record<st
|
|
|
83
87
|
/** Whether to return only the first tool call. */
|
|
84
88
|
returnSingle: boolean;
|
|
85
89
|
zodSchema?: InteropZodType<T>;
|
|
90
|
+
serializableSchema?: SerializableSchema<T>;
|
|
86
91
|
constructor(params: JsonOutputKeyToolsParserParamsV3<T>);
|
|
87
92
|
constructor(params: JsonOutputKeyToolsParserParamsV4<T>);
|
|
88
93
|
constructor(params: JsonOutputKeyToolsParserParamsInterop<T>);
|
|
@@ -91,5 +96,5 @@ declare class JsonOutputKeyToolsParser<T extends Record<string, any> = Record<st
|
|
|
91
96
|
parseResult(generations: ChatGeneration[]): Promise<any>;
|
|
92
97
|
}
|
|
93
98
|
//#endregion
|
|
94
|
-
export { JsonOutputKeyToolsParser, JsonOutputKeyToolsParserParams, JsonOutputKeyToolsParserParamsInterop, JsonOutputToolsParser, JsonOutputToolsParserParams, ParsedToolCall, convertLangChainToolCallToOpenAI, makeInvalidToolCall, parseToolCall };
|
|
99
|
+
export { JsonOutputKeyToolsParser, JsonOutputKeyToolsParserParams, JsonOutputKeyToolsParserParamsInterop, JsonOutputKeyToolsParserParamsSerializable, JsonOutputToolsParser, JsonOutputToolsParserParams, ParsedToolCall, convertLangChainToolCallToOpenAI, makeInvalidToolCall, parseToolCall };
|
|
95
100
|
//# sourceMappingURL=json_output_tools_parsers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json_output_tools_parsers.d.ts","names":[],"sources":["../../../src/output_parsers/openai_tools/json_output_tools_parsers.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"json_output_tools_parsers.d.ts","names":[],"sources":["../../../src/output_parsers/openai_tools/json_output_tools_parsers.ts"],"mappings":";;;;;;;;;KAiBY,cAAA;EACV,EAAA;EAEA,IAAA;EAGA,IAAA,EAAM,MAAA;AAAA;AAAA,KAGI,2BAAA;EARV,0CAUA,QAAA;AAAA,IACE,wCAAA;AAAA,iBAEY,aAAA,CAEd,WAAA,EAAa,MAAA,eACb,OAAA;EAAW,QAAA;EAAoB,OAAA;AAAA,IAC9B,QAAA;AAAA,iBACa,aAAA,CAEd,WAAA,EAAa,MAAA,eACb,OAAA;EAAY,QAAA;EAAoB,OAAA;AAAA,IAC/B,QAAA;AAAA,iBACa,aAAA,CAEd,WAAA,EAAa,MAAA,eACb,OAAA;EAAY,QAAA;EAAoB,OAAA;AAAA,IAC/B,QAAA;AAAA,iBA+Ca,gCAAA,CAAiC,QAAA,EAAU,QAAA;;;;;;;;iBAc3C,mBAAA,CAEd,WAAA,EAAa,MAAA,eACb,QAAA,YACC,eAAA;;;;cAaU,qBAAA,YAEH,mCAAA,CAAoC,CAAA;EAAA,OACrC,OAAA,CAAA;EAIP,QAAA;EAEA,YAAA;EAEA,eAAA;EAEA,WAAA,CAAY,MAAA,GAAS,2BAAA;EAAA,UAKX,KAAA,CAAA;EAIJ,KAAA,CAAA,GAAS,OAAA,CAAQ,CAAA;EAIjB,WAAA,CAAY,WAAA,EAAa,cAAA,KAAmB,OAAA,CAAQ,CAAA;EA5G/B;;;;;;EAuHrB,kBAAA,CACJ,WAAA,EAAa,mBAAA,KAAwB,cAAA,IACrC,OAAA,aAEC,OAAA;AAAA;AAAA,KAwCA,kCAAA;EACH,OAAA;EACA,YAAA;AAAA,IACE,2BAAA;AAAA,KAEC,gCAAA,WAEO,MAAA,gBAAsB,MAAA;EAC5B,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,CAAA;AAAA,IAAO,kCAAA;AAAA,KAE/B,gCAAA,WAEO,MAAA,gBAAsB,MAAA;EAC5B,SAAA,GAAY,EAAA,CAAG,QAAA,CAAS,CAAA,EAAG,CAAA;AAAA,IAAO,kCAAA;AAAA,KAE5B,qCAAA,WAEA,MAAA,gBAAsB,MAAA;EAC5B,SAAA,GAAY,cAAA,CAAe,CAAA;AAAA,IAAO,kCAAA;AAAA,KAE5B,0CAAA,WAEA,MAAA,gBAAsB,MAAA;EAEhC,kBAAA,GAAqB,kBAAA,CAAmB,CAAA;AAAA,IACtC,kCAAA;AAAA,KAGQ,8BAAA,WAEA,MAAA,gBAAsB,MAAA,iBAC9B,gCAAA,CAAiC,CAAA;;;;;cAMxB,wBAAA,WAED,MAAA,gBAAsB,MAAA,uBACxB,qBAAA,CAAsB,CAAA;EAAA,OACvB,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,QAAA;EAlIW;EAqIX,OAAA;EArIgC;EAwIhC,YAAA;EAEA,SAAA,GAAY,cAAA,CAAe,CAAA;EAE3B,kBAAA,GAAqB,kBAAA,CAAmB,CAAA;EAExC,WAAA,CAAY,MAAA,EAAQ,gCAAA,CAAiC,CAAA;EAErD,WAAA,CAAY,MAAA,EAAQ,gCAAA,CAAiC,CAAA;EAErD,WAAA,CAAY,MAAA,EAAQ,qCAAA,CAAsC,CAAA;EAAA,UAoB1C,eAAA,CAAgB,MAAA,YAAkB,OAAA,CAAQ,CAAA;EAmCpD,kBAAA,CAAmB,WAAA,EAAa,cAAA,KAAmB,OAAA;EAuBnD,WAAA,CAAY,WAAA,EAAa,cAAA,KAAmB,OAAA;AAAA"}
|
|
@@ -137,13 +137,20 @@ var JsonOutputKeyToolsParser = class extends JsonOutputToolsParser {
|
|
|
137
137
|
/** Whether to return only the first tool call. */
|
|
138
138
|
returnSingle = false;
|
|
139
139
|
zodSchema;
|
|
140
|
+
serializableSchema;
|
|
140
141
|
constructor(params) {
|
|
141
142
|
super(params);
|
|
142
143
|
this.keyName = params.keyName;
|
|
143
144
|
this.returnSingle = params.returnSingle ?? this.returnSingle;
|
|
144
|
-
this.zodSchema = params.zodSchema;
|
|
145
|
+
if ("zodSchema" in params) this.zodSchema = params.zodSchema;
|
|
146
|
+
if ("serializableSchema" in params) this.serializableSchema = params.serializableSchema;
|
|
145
147
|
}
|
|
146
148
|
async _validateResult(result) {
|
|
149
|
+
if (this.serializableSchema !== void 0) {
|
|
150
|
+
const validated = await this.serializableSchema["~standard"].validate(result);
|
|
151
|
+
if (validated.issues) throw new OutputParserException(`Failed to parse. Text: "${JSON.stringify(result, null, 2)}". Error: ${JSON.stringify(validated.issues)}`, JSON.stringify(result, null, 2));
|
|
152
|
+
return validated.value;
|
|
153
|
+
}
|
|
147
154
|
if (this.zodSchema === void 0) return result;
|
|
148
155
|
const zodParsedResult = await interopSafeParseAsync(this.zodSchema, result);
|
|
149
156
|
if (zodParsedResult.success) return zodParsedResult.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json_output_tools_parsers.js","names":[],"sources":["../../../src/output_parsers/openai_tools/json_output_tools_parsers.ts"],"sourcesContent":["import type * as z3 from \"zod/v3\";\nimport type * as z4 from \"zod/v4/core\";\nimport { ChatGeneration, ChatGenerationChunk } from \"../../outputs.js\";\nimport { OutputParserException } from \"../base.js\";\nimport { parsePartialJson } from \"../json.js\";\nimport { InvalidToolCall, ToolCall } from \"../../messages/tool.js\";\nimport {\n BaseCumulativeTransformOutputParser,\n BaseCumulativeTransformOutputParserInput,\n} from \"../transform.js\";\nimport { isAIMessage } from \"../../messages/ai.js\";\nimport {\n type InteropZodType,\n interopSafeParseAsync,\n} from \"../../utils/types/zod.js\";\n\nexport type ParsedToolCall = {\n id?: string;\n\n type: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args: Record<string, any>;\n};\n\nexport type JsonOutputToolsParserParams = {\n /** Whether to return the tool call id. */\n returnId?: boolean;\n} & BaseCumulativeTransformOutputParserInput;\n\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options: { returnId?: boolean; partial: true }\n): ToolCall | undefined;\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options?: { returnId?: boolean; partial?: false }\n): ToolCall;\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options?: { returnId?: boolean; partial?: boolean }\n): ToolCall | undefined;\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options?: { returnId?: boolean; partial?: boolean }\n): ToolCall | undefined {\n if (rawToolCall.function === undefined) {\n return undefined;\n }\n let functionArgs;\n if (options?.partial) {\n try {\n functionArgs = parsePartialJson(rawToolCall.function.arguments ?? \"{}\");\n } catch {\n return undefined;\n }\n } else {\n try {\n functionArgs = JSON.parse(rawToolCall.function.arguments);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n throw new OutputParserException(\n [\n `Function \"${rawToolCall.function.name}\" arguments:`,\n ``,\n rawToolCall.function.arguments,\n ``,\n `are not valid JSON.`,\n `Error: ${e.message}`,\n ].join(\"\\n\")\n );\n }\n }\n\n const parsedToolCall: ToolCall = {\n name: rawToolCall.function.name,\n args: functionArgs,\n type: \"tool_call\",\n };\n\n if (options?.returnId) {\n parsedToolCall.id = rawToolCall.id;\n }\n\n return parsedToolCall;\n}\n\nexport function convertLangChainToolCallToOpenAI(toolCall: ToolCall) {\n if (toolCall.id === undefined) {\n throw new Error(`All OpenAI tool calls must have an \"id\" field.`);\n }\n return {\n id: toolCall.id,\n type: \"function\",\n function: {\n name: toolCall.name,\n arguments: JSON.stringify(toolCall.args),\n },\n };\n}\n\nexport function makeInvalidToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n errorMsg?: string\n): InvalidToolCall {\n return {\n name: rawToolCall.function?.name,\n args: rawToolCall.function?.arguments,\n id: rawToolCall.id,\n error: errorMsg,\n type: \"invalid_tool_call\",\n };\n}\n\n/**\n * Class for parsing the output of a tool-calling LLM into a JSON object.\n */\nexport class JsonOutputToolsParser<\n T,\n> extends BaseCumulativeTransformOutputParser<T> {\n static lc_name() {\n return \"JsonOutputToolsParser\";\n }\n\n returnId = false;\n\n lc_namespace = [\"langchain\", \"output_parsers\", \"openai_tools\"];\n\n lc_serializable = true;\n\n constructor(fields?: JsonOutputToolsParserParams) {\n super(fields);\n this.returnId = fields?.returnId ?? this.returnId;\n }\n\n protected _diff() {\n throw new Error(\"Not supported.\");\n }\n\n async parse(): Promise<T> {\n throw new Error(\"Not implemented.\");\n }\n\n async parseResult(generations: ChatGeneration[]): Promise<T> {\n const result = await this.parsePartialResult(generations, false);\n return result;\n }\n\n /**\n * Parses the output and returns a JSON object. If `argsOnly` is true,\n * only the arguments of the function call are returned.\n * @param generations The output of the LLM to parse.\n * @returns A JSON object representation of the function call or its arguments.\n */\n async parsePartialResult(\n generations: ChatGenerationChunk[] | ChatGeneration[],\n partial = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n const message = generations[0].message;\n let toolCalls;\n if (isAIMessage(message) && message.tool_calls?.length) {\n toolCalls = message.tool_calls.map((toolCall) => {\n const { id, ...rest } = toolCall;\n if (!this.returnId) {\n return rest;\n }\n return {\n id,\n ...rest,\n };\n });\n } else if (message.additional_kwargs.tool_calls !== undefined) {\n const rawToolCalls = JSON.parse(\n JSON.stringify(message.additional_kwargs.tool_calls)\n );\n toolCalls = rawToolCalls.map((rawToolCall: Record<string, unknown>) => {\n return parseToolCall(rawToolCall, { returnId: this.returnId, partial });\n });\n }\n if (!toolCalls) {\n return [];\n }\n const parsedToolCalls = [];\n for (const toolCall of toolCalls) {\n if (toolCall !== undefined) {\n const backwardsCompatibleToolCall: ParsedToolCall = {\n type: toolCall.name,\n args: toolCall.args,\n id: toolCall.id,\n };\n parsedToolCalls.push(backwardsCompatibleToolCall);\n }\n }\n return parsedToolCalls;\n }\n}\n\ntype JsonOutputKeyToolsParserParamsBase = {\n keyName: string;\n returnSingle?: boolean;\n} & JsonOutputToolsParserParams;\n\ntype JsonOutputKeyToolsParserParamsV3<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = { zodSchema?: z3.ZodType<T> } & JsonOutputKeyToolsParserParamsBase;\n\ntype JsonOutputKeyToolsParserParamsV4<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = { zodSchema?: z4.$ZodType<T, T> } & JsonOutputKeyToolsParserParamsBase;\n\nexport type JsonOutputKeyToolsParserParamsInterop<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = { zodSchema?: InteropZodType<T> } & JsonOutputKeyToolsParserParamsBase;\n\n// Use Zod 3 for backwards compatibility\nexport type JsonOutputKeyToolsParserParams<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = JsonOutputKeyToolsParserParamsV3<T>;\n\n/**\n * Class for parsing the output of a tool-calling LLM into a JSON object if you are\n * expecting only a single tool to be called.\n */\nexport class JsonOutputKeyToolsParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> extends JsonOutputToolsParser<T> {\n static lc_name() {\n return \"JsonOutputKeyToolsParser\";\n }\n\n lc_namespace = [\"langchain\", \"output_parsers\", \"openai_tools\"];\n\n lc_serializable = true;\n\n returnId = false;\n\n /** The type of tool calls to return. */\n keyName: string;\n\n /** Whether to return only the first tool call. */\n returnSingle = false;\n\n zodSchema?: InteropZodType<T>;\n\n constructor(params: JsonOutputKeyToolsParserParamsV3<T>);\n\n constructor(params: JsonOutputKeyToolsParserParamsV4<T>);\n\n constructor(params: JsonOutputKeyToolsParserParamsInterop<T>);\n\n constructor(\n params:\n | JsonOutputKeyToolsParserParamsV3<T>\n | JsonOutputKeyToolsParserParamsV4<T>\n | JsonOutputKeyToolsParserParamsInterop<T>\n ) {\n super(params);\n this.keyName = params.keyName;\n this.returnSingle = params.returnSingle ?? this.returnSingle;\n this.zodSchema = params.zodSchema;\n }\n\n protected async _validateResult(result: unknown): Promise<T> {\n if (this.zodSchema === undefined) {\n return result as T;\n }\n const zodParsedResult = await interopSafeParseAsync(this.zodSchema, result);\n if (zodParsedResult.success) {\n return zodParsedResult.data;\n } else {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(zodParsedResult.error?.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async parsePartialResult(generations: ChatGeneration[]): Promise<any> {\n const results = await super.parsePartialResult(generations);\n const matchingResults = results.filter(\n (result: ParsedToolCall) => result.type === this.keyName\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let returnedValues: ParsedToolCall[] | Record<string, any>[] =\n matchingResults;\n if (!matchingResults.length) {\n return undefined;\n }\n if (!this.returnId) {\n returnedValues = matchingResults.map(\n (result: ParsedToolCall) => result.args\n );\n }\n if (this.returnSingle) {\n return returnedValues[0];\n }\n return returnedValues;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async parseResult(generations: ChatGeneration[]): Promise<any> {\n const results = await super.parsePartialResult(generations, false);\n const matchingResults = results.filter(\n (result: ParsedToolCall) => result.type === this.keyName\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let returnedValues: ParsedToolCall[] | Record<string, any>[] =\n matchingResults;\n if (!matchingResults.length) {\n return undefined;\n }\n if (!this.returnId) {\n returnedValues = matchingResults.map(\n (result: ParsedToolCall) => result.args\n );\n }\n if (this.returnSingle) {\n return this._validateResult(returnedValues[0]);\n }\n const toolCallResults = await Promise.all(\n returnedValues.map((value) => this._validateResult(value))\n );\n return toolCallResults;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json_output_tools_parsers.js","names":[],"sources":["../../../src/output_parsers/openai_tools/json_output_tools_parsers.ts"],"sourcesContent":["import type * as z3 from \"zod/v3\";\nimport type * as z4 from \"zod/v4/core\";\nimport { ChatGeneration, ChatGenerationChunk } from \"../../outputs.js\";\nimport { OutputParserException } from \"../base.js\";\nimport { parsePartialJson } from \"../json.js\";\nimport { InvalidToolCall, ToolCall } from \"../../messages/tool.js\";\nimport {\n BaseCumulativeTransformOutputParser,\n BaseCumulativeTransformOutputParserInput,\n} from \"../transform.js\";\nimport { isAIMessage } from \"../../messages/ai.js\";\nimport {\n type InteropZodType,\n interopSafeParseAsync,\n} from \"../../utils/types/zod.js\";\nimport { SerializableSchema } from \"../../utils/standard_schema.js\";\n\nexport type ParsedToolCall = {\n id?: string;\n\n type: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args: Record<string, any>;\n};\n\nexport type JsonOutputToolsParserParams = {\n /** Whether to return the tool call id. */\n returnId?: boolean;\n} & BaseCumulativeTransformOutputParserInput;\n\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options: { returnId?: boolean; partial: true }\n): ToolCall | undefined;\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options?: { returnId?: boolean; partial?: false }\n): ToolCall;\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options?: { returnId?: boolean; partial?: boolean }\n): ToolCall | undefined;\nexport function parseToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n options?: { returnId?: boolean; partial?: boolean }\n): ToolCall | undefined {\n if (rawToolCall.function === undefined) {\n return undefined;\n }\n let functionArgs;\n if (options?.partial) {\n try {\n functionArgs = parsePartialJson(rawToolCall.function.arguments ?? \"{}\");\n } catch {\n return undefined;\n }\n } else {\n try {\n functionArgs = JSON.parse(rawToolCall.function.arguments);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n throw new OutputParserException(\n [\n `Function \"${rawToolCall.function.name}\" arguments:`,\n ``,\n rawToolCall.function.arguments,\n ``,\n `are not valid JSON.`,\n `Error: ${e.message}`,\n ].join(\"\\n\")\n );\n }\n }\n\n const parsedToolCall: ToolCall = {\n name: rawToolCall.function.name,\n args: functionArgs,\n type: \"tool_call\",\n };\n\n if (options?.returnId) {\n parsedToolCall.id = rawToolCall.id;\n }\n\n return parsedToolCall;\n}\n\nexport function convertLangChainToolCallToOpenAI(toolCall: ToolCall) {\n if (toolCall.id === undefined) {\n throw new Error(`All OpenAI tool calls must have an \"id\" field.`);\n }\n return {\n id: toolCall.id,\n type: \"function\",\n function: {\n name: toolCall.name,\n arguments: JSON.stringify(toolCall.args),\n },\n };\n}\n\nexport function makeInvalidToolCall(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rawToolCall: Record<string, any>,\n errorMsg?: string\n): InvalidToolCall {\n return {\n name: rawToolCall.function?.name,\n args: rawToolCall.function?.arguments,\n id: rawToolCall.id,\n error: errorMsg,\n type: \"invalid_tool_call\",\n };\n}\n\n/**\n * Class for parsing the output of a tool-calling LLM into a JSON object.\n */\nexport class JsonOutputToolsParser<\n T,\n> extends BaseCumulativeTransformOutputParser<T> {\n static lc_name() {\n return \"JsonOutputToolsParser\";\n }\n\n returnId = false;\n\n lc_namespace = [\"langchain\", \"output_parsers\", \"openai_tools\"];\n\n lc_serializable = true;\n\n constructor(fields?: JsonOutputToolsParserParams) {\n super(fields);\n this.returnId = fields?.returnId ?? this.returnId;\n }\n\n protected _diff() {\n throw new Error(\"Not supported.\");\n }\n\n async parse(): Promise<T> {\n throw new Error(\"Not implemented.\");\n }\n\n async parseResult(generations: ChatGeneration[]): Promise<T> {\n const result = await this.parsePartialResult(generations, false);\n return result;\n }\n\n /**\n * Parses the output and returns a JSON object. If `argsOnly` is true,\n * only the arguments of the function call are returned.\n * @param generations The output of the LLM to parse.\n * @returns A JSON object representation of the function call or its arguments.\n */\n async parsePartialResult(\n generations: ChatGenerationChunk[] | ChatGeneration[],\n partial = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n const message = generations[0].message;\n let toolCalls;\n if (isAIMessage(message) && message.tool_calls?.length) {\n toolCalls = message.tool_calls.map((toolCall) => {\n const { id, ...rest } = toolCall;\n if (!this.returnId) {\n return rest;\n }\n return {\n id,\n ...rest,\n };\n });\n } else if (message.additional_kwargs.tool_calls !== undefined) {\n const rawToolCalls = JSON.parse(\n JSON.stringify(message.additional_kwargs.tool_calls)\n );\n toolCalls = rawToolCalls.map((rawToolCall: Record<string, unknown>) => {\n return parseToolCall(rawToolCall, { returnId: this.returnId, partial });\n });\n }\n if (!toolCalls) {\n return [];\n }\n const parsedToolCalls = [];\n for (const toolCall of toolCalls) {\n if (toolCall !== undefined) {\n const backwardsCompatibleToolCall: ParsedToolCall = {\n type: toolCall.name,\n args: toolCall.args,\n id: toolCall.id,\n };\n parsedToolCalls.push(backwardsCompatibleToolCall);\n }\n }\n return parsedToolCalls;\n }\n}\n\ntype JsonOutputKeyToolsParserParamsBase = {\n keyName: string;\n returnSingle?: boolean;\n} & JsonOutputToolsParserParams;\n\ntype JsonOutputKeyToolsParserParamsV3<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = { zodSchema?: z3.ZodType<T> } & JsonOutputKeyToolsParserParamsBase;\n\ntype JsonOutputKeyToolsParserParamsV4<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = { zodSchema?: z4.$ZodType<T, T> } & JsonOutputKeyToolsParserParamsBase;\n\nexport type JsonOutputKeyToolsParserParamsInterop<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = { zodSchema?: InteropZodType<T> } & JsonOutputKeyToolsParserParamsBase;\n\nexport type JsonOutputKeyToolsParserParamsSerializable<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = {\n serializableSchema?: SerializableSchema<T>;\n} & JsonOutputKeyToolsParserParamsBase;\n\n// Use Zod 3 for backwards compatibility\nexport type JsonOutputKeyToolsParserParams<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> = JsonOutputKeyToolsParserParamsV3<T>;\n\n/**\n * Class for parsing the output of a tool-calling LLM into a JSON object if you are\n * expecting only a single tool to be called.\n */\nexport class JsonOutputKeyToolsParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> extends JsonOutputToolsParser<T> {\n static lc_name() {\n return \"JsonOutputKeyToolsParser\";\n }\n\n lc_namespace = [\"langchain\", \"output_parsers\", \"openai_tools\"];\n\n lc_serializable = true;\n\n returnId = false;\n\n /** The type of tool calls to return. */\n keyName: string;\n\n /** Whether to return only the first tool call. */\n returnSingle = false;\n\n zodSchema?: InteropZodType<T>;\n\n serializableSchema?: SerializableSchema<T>;\n\n constructor(params: JsonOutputKeyToolsParserParamsV3<T>);\n\n constructor(params: JsonOutputKeyToolsParserParamsV4<T>);\n\n constructor(params: JsonOutputKeyToolsParserParamsInterop<T>);\n\n constructor(\n params:\n | JsonOutputKeyToolsParserParamsV3<T>\n | JsonOutputKeyToolsParserParamsV4<T>\n | JsonOutputKeyToolsParserParamsInterop<T>\n | JsonOutputKeyToolsParserParamsSerializable<T>\n ) {\n super(params);\n this.keyName = params.keyName;\n this.returnSingle = params.returnSingle ?? this.returnSingle;\n if (\"zodSchema\" in params) {\n this.zodSchema = params.zodSchema;\n }\n if (\"serializableSchema\" in params) {\n this.serializableSchema = params.serializableSchema;\n }\n }\n\n protected async _validateResult(result: unknown): Promise<T> {\n if (this.serializableSchema !== undefined) {\n const validated =\n await this.serializableSchema[\"~standard\"].validate(result);\n if (validated.issues) {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(validated.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n return validated.value as T;\n }\n if (this.zodSchema === undefined) {\n return result as T;\n }\n const zodParsedResult = await interopSafeParseAsync(this.zodSchema, result);\n if (zodParsedResult.success) {\n return zodParsedResult.data;\n } else {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(zodParsedResult.error?.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async parsePartialResult(generations: ChatGeneration[]): Promise<any> {\n const results = await super.parsePartialResult(generations);\n const matchingResults = results.filter(\n (result: ParsedToolCall) => result.type === this.keyName\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let returnedValues: ParsedToolCall[] | Record<string, any>[] =\n matchingResults;\n if (!matchingResults.length) {\n return undefined;\n }\n if (!this.returnId) {\n returnedValues = matchingResults.map(\n (result: ParsedToolCall) => result.args\n );\n }\n if (this.returnSingle) {\n return returnedValues[0];\n }\n return returnedValues;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async parseResult(generations: ChatGeneration[]): Promise<any> {\n const results = await super.parsePartialResult(generations, false);\n const matchingResults = results.filter(\n (result: ParsedToolCall) => result.type === this.keyName\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let returnedValues: ParsedToolCall[] | Record<string, any>[] =\n matchingResults;\n if (!matchingResults.length) {\n return undefined;\n }\n if (!this.returnId) {\n returnedValues = matchingResults.map(\n (result: ParsedToolCall) => result.args\n );\n }\n if (this.returnSingle) {\n return this._validateResult(returnedValues[0]);\n }\n const toolCallResults = await Promise.all(\n returnedValues.map((value) => this._validateResult(value))\n );\n return toolCallResults;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const require_json = require('../utils/json.cjs');
|
|
2
|
+
const require_base = require('./base.cjs');
|
|
3
|
+
require('./json.cjs');
|
|
4
|
+
|
|
5
|
+
//#region src/output_parsers/standard_schema.ts
|
|
6
|
+
var StandardSchemaOutputParser = class extends require_base.BaseOutputParser {
|
|
7
|
+
static lc_name() {
|
|
8
|
+
return "StandardSchemaOutputParser";
|
|
9
|
+
}
|
|
10
|
+
lc_namespace = [
|
|
11
|
+
"langchain",
|
|
12
|
+
"output_parsers",
|
|
13
|
+
"standard_schema"
|
|
14
|
+
];
|
|
15
|
+
schema;
|
|
16
|
+
constructor(schema) {
|
|
17
|
+
super();
|
|
18
|
+
this.schema = schema;
|
|
19
|
+
}
|
|
20
|
+
static fromSerializableSchema(schema) {
|
|
21
|
+
return new this(schema);
|
|
22
|
+
}
|
|
23
|
+
async parse(text) {
|
|
24
|
+
try {
|
|
25
|
+
const json = require_json.parseJsonMarkdown(text, JSON.parse);
|
|
26
|
+
const result = await this.schema["~standard"].validate(json);
|
|
27
|
+
if (result.issues) throw new Error(`Validation failed: ${JSON.stringify(result.issues)}`);
|
|
28
|
+
return result.value;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
throw new require_base.OutputParserException(`Failed to parse. Text: "${text}". Error: ${e}`, text);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
getFormatInstructions() {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
exports.StandardSchemaOutputParser = StandardSchemaOutputParser;
|
|
40
|
+
//# sourceMappingURL=standard_schema.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard_schema.cjs","names":["BaseOutputParser","parseJsonMarkdown","OutputParserException"],"sources":["../../src/output_parsers/standard_schema.ts"],"sourcesContent":["import { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { BaseOutputParser, OutputParserException } from \"./base.js\";\nimport { parseJsonMarkdown } from \"./json.js\";\n\nexport class StandardSchemaOutputParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n> extends BaseOutputParser<RunOutput> {\n static lc_name() {\n return \"StandardSchemaOutputParser\";\n }\n\n lc_namespace = [\"langchain\", \"output_parsers\", \"standard_schema\"];\n\n private readonly schema: StandardSchemaV1<RunOutput>;\n\n constructor(schema: StandardSchemaV1<RunOutput>) {\n super();\n this.schema = schema;\n }\n\n static fromSerializableSchema<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(schema: StandardSchemaV1<RunOutput>) {\n return new this(schema);\n }\n\n async parse(text: string): Promise<RunOutput> {\n try {\n const json = parseJsonMarkdown(text, JSON.parse);\n const result = await this.schema[\"~standard\"].validate(json);\n if (result.issues) {\n throw new Error(`Validation failed: ${JSON.stringify(result.issues)}`);\n }\n return result.value as RunOutput;\n } catch (e) {\n throw new OutputParserException(\n `Failed to parse. Text: \"${text}\". Error: ${e}`,\n text\n );\n }\n }\n\n getFormatInstructions(): string {\n return \"\";\n }\n}\n"],"mappings":";;;;;AAIA,IAAa,6BAAb,cAGUA,8BAA4B;CACpC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAkB;EAAkB;CAEjE,AAAiB;CAEjB,YAAY,QAAqC;AAC/C,SAAO;AACP,OAAK,SAAS;;CAGhB,OAAO,uBAGL,QAAqC;AACrC,SAAO,IAAI,KAAK,OAAO;;CAGzB,MAAM,MAAM,MAAkC;AAC5C,MAAI;GACF,MAAM,OAAOC,+BAAkB,MAAM,KAAK,MAAM;GAChD,MAAM,SAAS,MAAM,KAAK,OAAO,aAAa,SAAS,KAAK;AAC5D,OAAI,OAAO,OACT,OAAM,IAAI,MAAM,sBAAsB,KAAK,UAAU,OAAO,OAAO,GAAG;AAExE,UAAO,OAAO;WACP,GAAG;AACV,SAAM,IAAIC,mCACR,2BAA2B,KAAK,YAAY,KAC5C,KACD;;;CAIL,wBAAgC;AAC9B,SAAO"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseOutputParser } from "./base.cjs";
|
|
2
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
3
|
+
|
|
4
|
+
//#region src/output_parsers/standard_schema.d.ts
|
|
5
|
+
declare class StandardSchemaOutputParser<RunOutput extends Record<string, any> = Record<string, any>> extends BaseOutputParser<RunOutput> {
|
|
6
|
+
static lc_name(): string;
|
|
7
|
+
lc_namespace: string[];
|
|
8
|
+
private readonly schema;
|
|
9
|
+
constructor(schema: StandardSchemaV1<RunOutput>);
|
|
10
|
+
static fromSerializableSchema<RunOutput extends Record<string, any> = Record<string, any>>(schema: StandardSchemaV1<RunOutput>): StandardSchemaOutputParser<RunOutput>;
|
|
11
|
+
parse(text: string): Promise<RunOutput>;
|
|
12
|
+
getFormatInstructions(): string;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { StandardSchemaOutputParser };
|
|
16
|
+
//# sourceMappingURL=standard_schema.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard_schema.d.cts","names":[],"sources":["../../src/output_parsers/standard_schema.ts"],"mappings":";;;;cAIa,0BAAA,mBAEO,MAAA,gBAAsB,MAAA,uBAChC,gBAAA,CAAiB,SAAA;EAAA,OAClB,OAAA,CAAA;EAIP,YAAA;EAAA,iBAEiB,MAAA;EAEjB,WAAA,CAAY,MAAA,EAAQ,gBAAA,CAAiB,SAAA;EAAA,OAK9B,sBAAA,mBAEa,MAAA,gBAAsB,MAAA,cAAA,CACxC,MAAA,EAAQ,gBAAA,CAAiB,SAAA,IAAU,0BAAA,CAAA,SAAA;EAI/B,KAAA,CAAM,IAAA,WAAe,OAAA,CAAQ,SAAA;EAgBnC,qBAAA,CAAA;AAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseOutputParser } from "./base.js";
|
|
2
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
3
|
+
|
|
4
|
+
//#region src/output_parsers/standard_schema.d.ts
|
|
5
|
+
declare class StandardSchemaOutputParser<RunOutput extends Record<string, any> = Record<string, any>> extends BaseOutputParser<RunOutput> {
|
|
6
|
+
static lc_name(): string;
|
|
7
|
+
lc_namespace: string[];
|
|
8
|
+
private readonly schema;
|
|
9
|
+
constructor(schema: StandardSchemaV1<RunOutput>);
|
|
10
|
+
static fromSerializableSchema<RunOutput extends Record<string, any> = Record<string, any>>(schema: StandardSchemaV1<RunOutput>): StandardSchemaOutputParser<RunOutput>;
|
|
11
|
+
parse(text: string): Promise<RunOutput>;
|
|
12
|
+
getFormatInstructions(): string;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { StandardSchemaOutputParser };
|
|
16
|
+
//# sourceMappingURL=standard_schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard_schema.d.ts","names":[],"sources":["../../src/output_parsers/standard_schema.ts"],"mappings":";;;;cAIa,0BAAA,mBAEO,MAAA,gBAAsB,MAAA,uBAChC,gBAAA,CAAiB,SAAA;EAAA,OAClB,OAAA,CAAA;EAIP,YAAA;EAAA,iBAEiB,MAAA;EAEjB,WAAA,CAAY,MAAA,EAAQ,gBAAA,CAAiB,SAAA;EAAA,OAK9B,sBAAA,mBAEa,MAAA,gBAAsB,MAAA,cAAA,CACxC,MAAA,EAAQ,gBAAA,CAAiB,SAAA,IAAU,0BAAA,CAAA,SAAA;EAI/B,KAAA,CAAM,IAAA,WAAe,OAAA,CAAQ,SAAA;EAgBnC,qBAAA,CAAA;AAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { parseJsonMarkdown } from "../utils/json.js";
|
|
2
|
+
import { BaseOutputParser, OutputParserException } from "./base.js";
|
|
3
|
+
import "./json.js";
|
|
4
|
+
|
|
5
|
+
//#region src/output_parsers/standard_schema.ts
|
|
6
|
+
var StandardSchemaOutputParser = class extends BaseOutputParser {
|
|
7
|
+
static lc_name() {
|
|
8
|
+
return "StandardSchemaOutputParser";
|
|
9
|
+
}
|
|
10
|
+
lc_namespace = [
|
|
11
|
+
"langchain",
|
|
12
|
+
"output_parsers",
|
|
13
|
+
"standard_schema"
|
|
14
|
+
];
|
|
15
|
+
schema;
|
|
16
|
+
constructor(schema) {
|
|
17
|
+
super();
|
|
18
|
+
this.schema = schema;
|
|
19
|
+
}
|
|
20
|
+
static fromSerializableSchema(schema) {
|
|
21
|
+
return new this(schema);
|
|
22
|
+
}
|
|
23
|
+
async parse(text) {
|
|
24
|
+
try {
|
|
25
|
+
const json = parseJsonMarkdown(text, JSON.parse);
|
|
26
|
+
const result = await this.schema["~standard"].validate(json);
|
|
27
|
+
if (result.issues) throw new Error(`Validation failed: ${JSON.stringify(result.issues)}`);
|
|
28
|
+
return result.value;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
throw new OutputParserException(`Failed to parse. Text: "${text}". Error: ${e}`, text);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
getFormatInstructions() {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { StandardSchemaOutputParser };
|
|
40
|
+
//# sourceMappingURL=standard_schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard_schema.js","names":[],"sources":["../../src/output_parsers/standard_schema.ts"],"sourcesContent":["import { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { BaseOutputParser, OutputParserException } from \"./base.js\";\nimport { parseJsonMarkdown } from \"./json.js\";\n\nexport class StandardSchemaOutputParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n> extends BaseOutputParser<RunOutput> {\n static lc_name() {\n return \"StandardSchemaOutputParser\";\n }\n\n lc_namespace = [\"langchain\", \"output_parsers\", \"standard_schema\"];\n\n private readonly schema: StandardSchemaV1<RunOutput>;\n\n constructor(schema: StandardSchemaV1<RunOutput>) {\n super();\n this.schema = schema;\n }\n\n static fromSerializableSchema<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(schema: StandardSchemaV1<RunOutput>) {\n return new this(schema);\n }\n\n async parse(text: string): Promise<RunOutput> {\n try {\n const json = parseJsonMarkdown(text, JSON.parse);\n const result = await this.schema[\"~standard\"].validate(json);\n if (result.issues) {\n throw new Error(`Validation failed: ${JSON.stringify(result.issues)}`);\n }\n return result.value as RunOutput;\n } catch (e) {\n throw new OutputParserException(\n `Failed to parse. Text: \"${text}\". Error: ${e}`,\n text\n );\n }\n }\n\n getFormatInstructions(): string {\n return \"\";\n }\n}\n"],"mappings":";;;;;AAIA,IAAa,6BAAb,cAGU,iBAA4B;CACpC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAkB;EAAkB;CAEjE,AAAiB;CAEjB,YAAY,QAAqC;AAC/C,SAAO;AACP,OAAK,SAAS;;CAGhB,OAAO,uBAGL,QAAqC;AACrC,SAAO,IAAI,KAAK,OAAO;;CAGzB,MAAM,MAAM,MAAkC;AAC5C,MAAI;GACF,MAAM,OAAO,kBAAkB,MAAM,KAAK,MAAM;GAChD,MAAM,SAAS,MAAM,KAAK,OAAO,aAAa,SAAS,KAAK;AAC5D,OAAI,OAAO,OACT,OAAM,IAAI,MAAM,sBAAsB,KAAK,UAAU,OAAO,OAAO,GAAG;AAExE,UAAO,OAAO;WACP,GAAG;AACV,SAAM,IAAI,sBACR,2BAA2B,KAAK,YAAY,KAC5C,KACD;;;CAIL,wBAAgC;AAC9B,SAAO"}
|
package/dist/runnables/base.cjs
CHANGED
|
@@ -369,7 +369,7 @@ var Runnable = class extends require_load_serializable.Serializable {
|
|
|
369
369
|
autoClose: false
|
|
370
370
|
});
|
|
371
371
|
const config = require_config.ensureConfig(options);
|
|
372
|
-
const runId = config.runId ?? (0, uuid.
|
|
372
|
+
const runId = config.runId ?? (0, uuid.v7)();
|
|
373
373
|
config.runId = runId;
|
|
374
374
|
const callbacks = config.callbacks;
|
|
375
375
|
if (callbacks === void 0) config.callbacks = [eventStreamer];
|