{"version":3,"file":"tavily_search_api.cjs","names":["BaseRetriever","Document"],"sources":["../../src/retrievers/tavily_search_api.ts"],"sourcesContent":["import { Document } from \"@langchain/core/documents\";\nimport { CallbackManagerForRetrieverRun } from \"@langchain/core/callbacks/manager\";\nimport {\n  BaseRetriever,\n  type BaseRetrieverInput,\n} from \"@langchain/core/retrievers\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\n\n/**\n * Options for the TavilySearchAPIRetriever class, which includes a BaseLanguageModel\n * instance, a VectorStore instance, and an optional promptTemplate which\n * can either be a BasePromptTemplate instance or a PromptKey.\n */\nexport type TavilySearchAPIRetrieverFields = BaseRetrieverInput & {\n  k?: number;\n  includeGeneratedAnswer?: boolean;\n  includeRawContent?: boolean;\n  includeImages?: boolean;\n  searchDepth?: \"basic\" | \"advanced\";\n  includeDomains?: string[];\n  excludeDomains?: string[];\n  kwargs?: Record<string, unknown>;\n  apiKey?: string;\n};\n\n/**\n * A class for retrieving documents related to a given search term\n * using the Tavily Search API.\n */\nexport class TavilySearchAPIRetriever extends BaseRetriever {\n  static lc_name() {\n    return \"TavilySearchAPIRetriever\";\n  }\n\n  get lc_namespace(): string[] {\n    return [\"langchain\", \"retrievers\", \"tavily_search_api\"];\n  }\n\n  k = 10;\n\n  includeGeneratedAnswer = false;\n\n  includeRawContent = false;\n\n  includeImages = false;\n\n  searchDepth = \"basic\";\n\n  includeDomains?: string[];\n\n  excludeDomains?: string[];\n\n  kwargs: Record<string, unknown> = {};\n\n  apiKey?: string;\n\n  constructor(fields?: TavilySearchAPIRetrieverFields) {\n    super(fields);\n    this.k = fields?.k ?? this.k;\n    this.includeGeneratedAnswer =\n      fields?.includeGeneratedAnswer ?? this.includeGeneratedAnswer;\n    this.includeRawContent =\n      fields?.includeRawContent ?? this.includeRawContent;\n    this.includeImages = fields?.includeImages ?? this.includeImages;\n    this.searchDepth = fields?.searchDepth ?? this.searchDepth;\n    this.includeDomains = fields?.includeDomains ?? this.includeDomains;\n    this.excludeDomains = fields?.excludeDomains ?? this.excludeDomains;\n    this.kwargs = fields?.kwargs ?? this.kwargs;\n    this.apiKey = fields?.apiKey ?? getEnvironmentVariable(\"TAVILY_API_KEY\");\n    if (this.apiKey === undefined) {\n      throw new Error(\n        `No Tavily API key found. Either set an environment variable named \"TAVILY_API_KEY\" or pass an API key as \"apiKey\".`\n      );\n    }\n  }\n\n  async _getRelevantDocuments(\n    query: string,\n    _runManager?: CallbackManagerForRetrieverRun\n  ): Promise<Document[]> {\n    const body: Record<string, unknown> = {\n      query,\n      include_answer: this.includeGeneratedAnswer,\n      include_raw_content: this.includeRawContent,\n      include_images: this.includeImages,\n      max_results: this.k,\n      search_depth: this.searchDepth,\n      api_key: this.apiKey,\n    };\n    if (this.includeDomains) {\n      body.include_domains = this.includeDomains;\n    }\n    if (this.excludeDomains) {\n      body.exclude_domains = this.excludeDomains;\n    }\n\n    const response = await fetch(\"https://api.tavily.com/search\", {\n      method: \"POST\",\n      headers: {\n        \"content-type\": \"application/json\",\n      },\n      body: JSON.stringify({ ...body, ...this.kwargs }),\n    });\n    const json = await response.json();\n    if (!response.ok) {\n      throw new Error(\n        `Request failed with status code ${response.status}: ${json.error}`\n      );\n    }\n    if (!Array.isArray(json.results)) {\n      throw new Error(`Could not parse Tavily results. Please try again.`);\n    }\n    // oxlint-disable-next-line typescript/no-explicit-any\n    const docs: Document[] = json.results.map((result: any) => {\n      const pageContent = this.includeRawContent\n        ? result.raw_content\n        : result.content;\n      const metadata = {\n        title: result.title,\n        source: result.url,\n        ...Object.fromEntries(\n          Object.entries(result).filter(\n            ([k]) => ![\"content\", \"title\", \"url\", \"raw_content\"].includes(k)\n          )\n        ),\n        images: json.images,\n      };\n      return new Document({ pageContent, metadata });\n    });\n    if (this.includeGeneratedAnswer) {\n      docs.push(\n        new Document({\n          pageContent: json.answer,\n          metadata: {\n            title: \"Suggested Answer\",\n            source: \"https://tavily.com/\",\n          },\n        })\n      );\n    }\n    return docs;\n  }\n}\n"],"mappings":";;;;;;;;;;;AA6BA,IAAa,2BAAb,cAA8CA,2BAAAA,cAAc;CAC1D,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,eAAyB;AAC3B,SAAO;GAAC;GAAa;GAAc;GAAoB;;CAGzD,IAAI;CAEJ,yBAAyB;CAEzB,oBAAoB;CAEpB,gBAAgB;CAEhB,cAAc;CAEd;CAEA;CAEA,SAAkC,EAAE;CAEpC;CAEA,YAAY,QAAyC;AACnD,QAAM,OAAO;AACb,OAAK,IAAI,QAAQ,KAAK,KAAK;AAC3B,OAAK,yBACH,QAAQ,0BAA0B,KAAK;AACzC,OAAK,oBACH,QAAQ,qBAAqB,KAAK;AACpC,OAAK,gBAAgB,QAAQ,iBAAiB,KAAK;AACnD,OAAK,cAAc,QAAQ,eAAe,KAAK;AAC/C,OAAK,iBAAiB,QAAQ,kBAAkB,KAAK;AACrD,OAAK,iBAAiB,QAAQ,kBAAkB,KAAK;AACrD,OAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,OAAK,SAAS,QAAQ,WAAA,GAAA,0BAAA,wBAAiC,iBAAiB;AACxE,MAAI,KAAK,WAAW,KAAA,EAClB,OAAM,IAAI,MACR,qHACD;;CAIL,MAAM,sBACJ,OACA,aACqB;EACrB,MAAM,OAAgC;GACpC;GACA,gBAAgB,KAAK;GACrB,qBAAqB,KAAK;GAC1B,gBAAgB,KAAK;GACrB,aAAa,KAAK;GAClB,cAAc,KAAK;GACnB,SAAS,KAAK;GACf;AACD,MAAI,KAAK,eACP,MAAK,kBAAkB,KAAK;AAE9B,MAAI,KAAK,eACP,MAAK,kBAAkB,KAAK;EAG9B,MAAM,WAAW,MAAM,MAAM,iCAAiC;GAC5D,QAAQ;GACR,SAAS,EACP,gBAAgB,oBACjB;GACD,MAAM,KAAK,UAAU;IAAE,GAAG;IAAM,GAAG,KAAK;IAAQ,CAAC;GAClD,CAAC;EACF,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,mCAAmC,SAAS,OAAO,IAAI,KAAK,QAC7D;AAEH,MAAI,CAAC,MAAM,QAAQ,KAAK,QAAQ,CAC9B,OAAM,IAAI,MAAM,oDAAoD;EAGtE,MAAM,OAAmB,KAAK,QAAQ,KAAK,WAAgB;AAczD,UAAO,IAAIC,0BAAAA,SAAS;IAAE,aAbF,KAAK,oBACrB,OAAO,cACP,OAAO;IAWwB,UAVlB;KACf,OAAO,OAAO;KACd,QAAQ,OAAO;KACf,GAAG,OAAO,YACR,OAAO,QAAQ,OAAO,CAAC,QACpB,CAAC,OAAO,CAAC;MAAC;MAAW;MAAS;MAAO;MAAc,CAAC,SAAS,EAAE,CACjE,CACF;KACD,QAAQ,KAAK;KACd;IAC4C,CAAC;IAC9C;AACF,MAAI,KAAK,uBACP,MAAK,KACH,IAAIA,0BAAAA,SAAS;GACX,aAAa,KAAK;GAClB,UAAU;IACR,OAAO;IACP,QAAQ;IACT;GACF,CAAC,CACH;AAEH,SAAO"}