{"version":3,"file":"index.cjs","names":["AsymmetricStructuredOutputParser","QueryTransformer","StructuredQuery","DEFAULT_EXAMPLES","Comparators","Operators","DEFAULT_PREFIX","DEFAULT_SCHEMA","FewShotPromptTemplate","EXAMPLE_PROMPT","DEFAULT_SUFFIX"],"sources":["../../../src/chains/query_constructor/index.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport {\n  Example,\n  interpolateFString,\n  FewShotPromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n  InferInteropZodOutput,\n  InputValues,\n} from \"@langchain/core/utils/types\";\nimport {\n  Comparator,\n  Comparators,\n  Operator,\n  Operators,\n  StructuredQuery,\n} from \"@langchain/core/structured_query\";\nimport { Runnable, RunnableConfig } from \"@langchain/core/runnables\";\nimport { QueryTransformer, TraverseType } from \"./parser.js\";\nimport {\n  DEFAULT_EXAMPLES,\n  DEFAULT_PREFIX,\n  DEFAULT_SCHEMA,\n  DEFAULT_SUFFIX,\n  EXAMPLE_PROMPT,\n} from \"./prompt.js\";\nimport { AsymmetricStructuredOutputParser } from \"../../output_parsers/structured.js\";\n\n/**\n * A simple data structure that holds information about an attribute. It\n * is typically used to provide metadata about attributes in other classes\n * or data structures within the LangChain framework.\n */\nexport class AttributeInfo {\n  constructor(\n    public name: string,\n    public type: string,\n    public description: string\n  ) {}\n}\n\nexport { QueryTransformer, type TraverseType };\nexport {\n  DEFAULT_EXAMPLES,\n  DEFAULT_PREFIX,\n  DEFAULT_SCHEMA,\n  DEFAULT_SUFFIX,\n  EXAMPLE_PROMPT,\n};\n\nconst queryInputSchema = /* #__PURE__ */ z.object({\n  query: /* #__PURE__ */ z\n    .string()\n    .describe(\"text string to compare to document contents\"),\n  filter: /* #__PURE__ */ z\n    .string()\n    .optional()\n    .describe(\"logical condition statement for filtering documents\"),\n});\n\n/**\n * A class that extends AsymmetricStructuredOutputParser to parse\n * structured query output.\n */\nexport class StructuredQueryOutputParser extends AsymmetricStructuredOutputParser<\n  typeof queryInputSchema,\n  StructuredQuery\n> {\n  lc_namespace = [\"langchain\", \"chains\", \"query_constructor\"];\n\n  queryTransformer: QueryTransformer;\n\n  constructor(fields: {\n    allowedComparators: Comparator[];\n    allowedOperators: Operator[];\n  }) {\n    super({ ...fields, inputSchema: queryInputSchema });\n\n    const { allowedComparators, allowedOperators } = fields;\n    this.queryTransformer = new QueryTransformer(\n      allowedComparators,\n      allowedOperators\n    );\n  }\n\n  /**\n   * Processes the output of a structured query.\n   * @param query The query string.\n   * @param filter The filter condition.\n   * @returns A Promise that resolves to a StructuredQuery instance.\n   */\n  async outputProcessor({\n    query,\n    filter,\n  }: InferInteropZodOutput<typeof queryInputSchema>): Promise<StructuredQuery> {\n    let myQuery = query;\n    if (myQuery.length === 0) {\n      myQuery = \" \";\n    }\n    if (filter === \"NO_FILTER\" || filter === undefined) {\n      return new StructuredQuery(query);\n    } else {\n      const parsedFilter = await this.queryTransformer.parse(filter);\n      return new StructuredQuery(query, parsedFilter);\n    }\n  }\n\n  /**\n   * Creates a new StructuredQueryOutputParser instance from the provided\n   * components.\n   * @param allowedComparators An array of allowed Comparator instances.\n   * @param allowedOperators An array of allowed Operator instances.\n   * @returns A new StructuredQueryOutputParser instance.\n   */\n  static fromComponents(\n    allowedComparators: Comparator[] = [],\n    allowedOperators: Operator[] = []\n  ) {\n    return new StructuredQueryOutputParser({\n      allowedComparators,\n      allowedOperators,\n    });\n  }\n}\n\nexport function formatAttributeInfo(info: AttributeInfo[]) {\n  const infoObj = info.reduce(\n    (acc, attr) => {\n      acc[attr.name] = {\n        type: attr.type,\n        description: attr.description,\n      };\n      return acc;\n    },\n    {} as { [name: string]: { type: string; description: string } }\n  );\n\n  return JSON.stringify(infoObj, null, 2)\n    .replaceAll(\"{\", \"{{\")\n    .replaceAll(\"}\", \"}}\");\n}\n\nconst defaultExample = DEFAULT_EXAMPLES.map((EXAMPLE) => EXAMPLE as Example);\n\nfunction _getPrompt(\n  documentContents: string,\n  attributeInfo: AttributeInfo[],\n  allowedComparators?: Comparator[],\n  allowedOperators?: Operator[],\n  examples: InputValues[] = defaultExample\n) {\n  const myAllowedComparators: Comparator[] =\n    allowedComparators ?? Object.values(Comparators);\n  const myAllowedOperators: Operator[] =\n    allowedOperators ?? Object.values(Operators);\n  const attributeJSON = formatAttributeInfo(attributeInfo);\n  const schema = interpolateFString(DEFAULT_SCHEMA, {\n    allowed_comparators: myAllowedComparators.join(\" | \"),\n    allowed_operators: myAllowedOperators.join(\" | \"),\n  });\n  const prefix = interpolateFString(DEFAULT_PREFIX, {\n    schema,\n  });\n  const suffix = interpolateFString(DEFAULT_SUFFIX, {\n    i: examples.length + 1,\n    content: documentContents,\n    attributes: attributeJSON,\n  });\n\n  const outputParser = StructuredQueryOutputParser.fromComponents(\n    allowedComparators,\n    allowedOperators\n  );\n\n  return new FewShotPromptTemplate({\n    examples,\n    examplePrompt: EXAMPLE_PROMPT,\n    inputVariables: [\"query\"],\n    suffix,\n    prefix,\n    outputParser,\n  });\n}\n\n/**\n * A type that represents options for the query constructor chain.\n */\nexport type QueryConstructorRunnableOptions = {\n  llm: BaseLanguageModelInterface;\n  documentContents: string;\n  attributeInfo: AttributeInfo[];\n  examples?: InputValues[];\n  allowedComparators?: Comparator[];\n  allowedOperators?: Operator[];\n};\n\n/** @deprecated */\nexport type QueryConstructorChainOptions = QueryConstructorRunnableOptions;\n\nexport function loadQueryConstructorRunnable(\n  opts: QueryConstructorRunnableOptions\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n): Runnable<any, StructuredQuery, RunnableConfig<Record<string, any>>> {\n  const prompt = _getPrompt(\n    opts.documentContents,\n    opts.attributeInfo,\n    opts.allowedComparators,\n    opts.allowedOperators,\n    opts.examples\n  );\n  const outputParser = StructuredQueryOutputParser.fromComponents(\n    opts.allowedComparators,\n    opts.allowedOperators\n  );\n  return prompt.pipe(opts.llm).pipe(outputParser);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,IAAa,gBAAb,MAA2B;CACzB,YACE,MACA,MACA,aACA;AAHO,OAAA,OAAA;AACA,OAAA,OAAA;AACA,OAAA,cAAA;;;AAaX,MAAM,mBAAmC,uBAAA,EAAE,OAAO;CAChD,OAAuB,uBAAA,EACpB,QAAQ,CACR,SAAS,8CAA8C;CAC1D,QAAwB,uBAAA,EACrB,QAAQ,CACR,UAAU,CACV,SAAS,sDAAsD;CACnE,CAAC;;;;;AAMF,IAAa,8BAAb,MAAa,oCAAoCA,mBAAAA,iCAG/C;CACA,eAAe;EAAC;EAAa;EAAU;EAAoB;CAE3D;CAEA,YAAY,QAGT;AACD,QAAM;GAAE,GAAG;GAAQ,aAAa;GAAkB,CAAC;EAEnD,MAAM,EAAE,oBAAoB,qBAAqB;AACjD,OAAK,mBAAmB,IAAIC,eAAAA,iBAC1B,oBACA,iBACD;;;;;;;;CASH,MAAM,gBAAgB,EACpB,OACA,UAC2E;EAC3E,IAAI,UAAU;AACd,MAAI,QAAQ,WAAW,EACrB,WAAU;AAEZ,MAAI,WAAW,eAAe,WAAW,KAAA,EACvC,QAAO,IAAIC,iCAAAA,gBAAgB,MAAM;MAGjC,QAAO,IAAIA,iCAAAA,gBAAgB,OADN,MAAM,KAAK,iBAAiB,MAAM,OAAO,CACf;;;;;;;;;CAWnD,OAAO,eACL,qBAAmC,EAAE,EACrC,mBAA+B,EAAE,EACjC;AACA,SAAO,IAAI,4BAA4B;GACrC;GACA;GACD,CAAC;;;AAIN,SAAgB,oBAAoB,MAAuB;CACzD,MAAM,UAAU,KAAK,QAClB,KAAK,SAAS;AACb,MAAI,KAAK,QAAQ;GACf,MAAM,KAAK;GACX,aAAa,KAAK;GACnB;AACD,SAAO;IAET,EAAE,CACH;AAED,QAAO,KAAK,UAAU,SAAS,MAAM,EAAE,CACpC,WAAW,KAAK,KAAK,CACrB,WAAW,KAAK,KAAK;;AAG1B,MAAM,iBAAiBC,eAAAA,iBAAiB,KAAK,YAAY,QAAmB;AAE5E,SAAS,WACP,kBACA,eACA,oBACA,kBACA,WAA0B,gBAC1B;CACA,MAAM,uBACJ,sBAAsB,OAAO,OAAOC,iCAAAA,YAAY;CAClD,MAAM,qBACJ,oBAAoB,OAAO,OAAOC,iCAAAA,UAAU;CAC9C,MAAM,gBAAgB,oBAAoB,cAAc;CAKxD,MAAM,UAAA,GAAA,wBAAA,oBAA4BC,eAAAA,gBAAgB,EAChD,SAAA,GAAA,wBAAA,oBALgCC,eAAAA,gBAAgB;EAChD,qBAAqB,qBAAqB,KAAK,MAAM;EACrD,mBAAmB,mBAAmB,KAAK,MAAM;EAClD,CAAC,EAGD,CAAC;AAYF,QAAO,IAAIC,wBAAAA,sBAAsB;EAC/B;EACA,eAAeC,eAAAA;EACf,gBAAgB,CAAC,QAAQ;EACzB,SAAA,GAAA,wBAAA,oBAfgCC,eAAAA,gBAAgB;GAChD,GAAG,SAAS,SAAS;GACrB,SAAS;GACT,YAAY;GACb,CAAC;EAYA;EACA,cAXmB,4BAA4B,eAC/C,oBACA,iBACD;EASA,CAAC;;AAkBJ,SAAgB,6BACd,MAEqE;CACrE,MAAM,SAAS,WACb,KAAK,kBACL,KAAK,eACL,KAAK,oBACL,KAAK,kBACL,KAAK,SACN;CACD,MAAM,eAAe,4BAA4B,eAC/C,KAAK,oBACL,KAAK,iBACN;AACD,QAAO,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,aAAa"}