{"version":3,"file":"structured_output.cjs","names":["isInteropZodSchema","StructuredOutputParser","isSerializableSchema","StandardSchemaOutputParser","JsonOutputParser","JsonOutputKeyToolsParser","RunnablePassthrough","RunnableSequence"],"sources":["../../src/language_models/structured_output.ts"],"sourcesContent":["import { BaseMessage } from \"../messages/index.js\";\nimport {\n  BaseLLMOutputParser,\n  BaseOutputParser,\n  JsonOutputParser,\n  StructuredOutputParser,\n} from \"../output_parsers/index.js\";\nimport { JsonOutputKeyToolsParser } from \"../output_parsers/openai_tools/json_output_tools_parsers.js\";\nimport { StandardSchemaOutputParser } from \"../output_parsers/standard_schema.js\";\nimport {\n  Runnable,\n  RunnablePassthrough,\n  RunnableSequence,\n} from \"../runnables/index.js\";\nimport {\n  isSerializableSchema,\n  SerializableSchema,\n} from \"../utils/standard_schema.js\";\nimport { InteropZodType, isInteropZodSchema } from \"../utils/types/index.js\";\nimport { BaseLanguageModelInput } from \"./base.js\";\n\n/**\n * Creates the appropriate content-based output parser for a schema. Use this for\n * jsonMode/jsonSchema methods where the LLM returns JSON text.\n *\n * - Zod schema -> StructuredOutputParser (Zod validation)\n * - Standard schema -> StandardSchemaOutputParser (standard schema validation)\n * - Plain JSON schema -> JsonOutputParser (no validation)\n */\nexport function createContentParser<\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  RunOutput extends Record<string, any> = Record<string, any>,\n>(\n  schema:\n    | InteropZodType<RunOutput>\n    | SerializableSchema<RunOutput>\n    // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n    | Record<string, any>\n): BaseOutputParser<RunOutput> {\n  if (isInteropZodSchema(schema)) {\n    return StructuredOutputParser.fromZodSchema(schema);\n  }\n  if (isSerializableSchema(schema)) {\n    return StandardSchemaOutputParser.fromSerializableSchema(schema);\n  }\n  return new JsonOutputParser<RunOutput>();\n}\n\ntype FunctionCallingParserConstructor<\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends Record<string, any> = Record<string, any>,\n> = new (params: {\n  keyName: string;\n  returnSingle?: boolean;\n  zodSchema?: InteropZodType<T>;\n  serializableSchema?: SerializableSchema<T>;\n}) => BaseLLMOutputParser<T>;\n\n/**\n * Creates the appropriate tool-calling output parser for a schema. Use this for\n * function calling / tool use methods where the LLM returns structured tool calls.\n *\n * - Zod schema -> parser with Zod validation\n * - Standard schema -> parser with standard schema validation\n * - Plain JSON schema -> parser with no validation\n */\nexport function createFunctionCallingParser<\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  RunOutput extends Record<string, any> = Record<string, any>,\n>(\n  schema:\n    | InteropZodType<RunOutput>\n    | SerializableSchema<RunOutput>\n    // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n    | Record<string, any>,\n  keyName: string,\n  ParserClass?: FunctionCallingParserConstructor<RunOutput>\n): BaseLLMOutputParser<RunOutput> {\n  const Ctor = ParserClass ?? JsonOutputKeyToolsParser;\n  if (isInteropZodSchema(schema)) {\n    return new Ctor({ returnSingle: true, keyName, zodSchema: schema });\n  }\n  if (isSerializableSchema(schema)) {\n    return new Ctor({\n      returnSingle: true,\n      keyName,\n      serializableSchema: schema,\n    });\n  }\n  return new Ctor({ returnSingle: true, keyName });\n}\n\n/**\n * Pipes an LLM through an output parser, optionally wrapping the result\n * to include the raw LLM response alongside the parsed output.\n *\n * When `includeRaw` is true, returns `{ raw: BaseMessage, parsed: RunOutput }`.\n * If parsing fails, `parsed` falls back to null.\n */\nexport function assembleStructuredOutputPipeline<\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  RunOutput extends Record<string, any> = Record<string, any>,\n>(\n  llm: Runnable<BaseLanguageModelInput>,\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  outputParser: Runnable<any, RunOutput>,\n  includeRaw?: boolean,\n  runName?: string\n):\n  | Runnable<BaseLanguageModelInput, RunOutput>\n  | Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }> {\n  if (!includeRaw) {\n    const result = llm.pipe(outputParser);\n    return runName ? result.withConfig({ runName }) : result;\n  }\n\n  const parserAssign = RunnablePassthrough.assign({\n    // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n    parsed: (input: any, config) => outputParser.invoke(input.raw, config),\n  });\n  const parserNone = RunnablePassthrough.assign({\n    parsed: () => null,\n  });\n  const parsedWithFallback = parserAssign.withFallbacks({\n    fallbacks: [parserNone],\n  });\n  const result = RunnableSequence.from<\n    BaseLanguageModelInput,\n    { raw: BaseMessage; parsed: RunOutput }\n  >([{ raw: llm }, parsedWithFallback]);\n  return runName ? result.withConfig({ runName }) : result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,oBAId,QAK6B;AAC7B,KAAIA,YAAAA,mBAAmB,OAAO,CAC5B,QAAOC,mBAAAA,uBAAuB,cAAc,OAAO;AAErD,KAAIC,8BAAAA,qBAAqB,OAAO,CAC9B,QAAOC,wBAAAA,2BAA2B,uBAAuB,OAAO;AAElE,QAAO,IAAIC,aAAAA,kBAA6B;;;;;;;;;;AAqB1C,SAAgB,4BAId,QAKA,SACA,aACgC;CAChC,MAAM,OAAO,eAAeC,kCAAAA;AAC5B,KAAIL,YAAAA,mBAAmB,OAAO,CAC5B,QAAO,IAAI,KAAK;EAAE,cAAc;EAAM;EAAS,WAAW;EAAQ,CAAC;AAErE,KAAIE,8BAAAA,qBAAqB,OAAO,CAC9B,QAAO,IAAI,KAAK;EACd,cAAc;EACd;EACA,oBAAoB;EACrB,CAAC;AAEJ,QAAO,IAAI,KAAK;EAAE,cAAc;EAAM;EAAS,CAAC;;;;;;;;;AAUlD,SAAgB,iCAId,KAEA,cACA,YACA,SAG4E;AAC5E,KAAI,CAAC,YAAY;EACf,MAAM,SAAS,IAAI,KAAK,aAAa;AACrC,SAAO,UAAU,OAAO,WAAW,EAAE,SAAS,CAAC,GAAG;;CAGpD,MAAM,eAAeI,oBAAAA,oBAAoB,OAAO,EAE9C,SAAS,OAAY,WAAW,aAAa,OAAO,MAAM,KAAK,OAAO,EACvE,CAAC;CACF,MAAM,aAAaA,oBAAAA,oBAAoB,OAAO,EAC5C,cAAc,MACf,CAAC;CACF,MAAM,qBAAqB,aAAa,cAAc,EACpD,WAAW,CAAC,WAAW,EACxB,CAAC;CACF,MAAM,SAASC,aAAAA,iBAAiB,KAG9B,CAAC,EAAE,KAAK,KAAK,EAAE,mBAAmB,CAAC;AACrC,QAAO,UAAU,OAAO,WAAW,EAAE,SAAS,CAAC,GAAG"}