UNPKG

@langchain/community

Version:
1 lines 6.28 kB
{"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"}