Spaces:
Sleeping
Sleeping
| //#region src/tools/fileSearch.ts | |
| /** | |
| * Converts ranking options to the API format. | |
| */ | |
| function convertRankingOptions(options) { | |
| if (!options) return void 0; | |
| return { | |
| ranker: options.ranker, | |
| score_threshold: options.scoreThreshold, | |
| hybrid_search: options.hybridSearch ? { | |
| embedding_weight: options.hybridSearch.embeddingWeight, | |
| text_weight: options.hybridSearch.textWeight | |
| } : void 0 | |
| }; | |
| } | |
| /** | |
| * Creates a File Search tool that allows models to search your files | |
| * for relevant information using semantic and keyword search. | |
| * | |
| * File Search enables models to retrieve information from a knowledge base | |
| * of previously uploaded files stored in vector stores. This is a hosted tool | |
| * managed by OpenAI - you don't need to implement the search execution yourself. | |
| * | |
| * **Prerequisites**: Before using File Search, you must: | |
| * 1. Upload files to the File API with `purpose: "assistants"` | |
| * 2. Create a vector store | |
| * 3. Add files to the vector store | |
| * | |
| * @see {@link https://platform.openai.com/docs/guides/tools-file-search | OpenAI File Search Documentation} | |
| * | |
| * @param options - Configuration options for the File Search tool | |
| * @returns A File Search tool definition to be passed to the OpenAI Responses API | |
| * | |
| * @example | |
| * ```typescript | |
| * import { ChatOpenAI, tools } from "@langchain/openai"; | |
| * | |
| * const model = new ChatOpenAI({ model: "gpt-4.1" }); | |
| * | |
| * // Basic usage with a vector store | |
| * const response = await model.invoke( | |
| * "What is deep research by OpenAI?", | |
| * { | |
| * tools: [tools.fileSearch({ | |
| * vectorStoreIds: ["vs_abc123"] | |
| * })] | |
| * } | |
| * ); | |
| * | |
| * // Limit the number of results for lower latency | |
| * const response = await model.invoke( | |
| * "Find information about pricing", | |
| * { | |
| * tools: [tools.fileSearch({ | |
| * vectorStoreIds: ["vs_abc123"], | |
| * maxNumResults: 5 | |
| * })] | |
| * } | |
| * ); | |
| * | |
| * // With metadata filtering | |
| * const response = await model.invoke( | |
| * "Find recent blog posts about AI", | |
| * { | |
| * tools: [tools.fileSearch({ | |
| * vectorStoreIds: ["vs_abc123"], | |
| * filters: { | |
| * type: "eq", | |
| * key: "category", | |
| * value: "blog" | |
| * } | |
| * })] | |
| * } | |
| * ); | |
| * | |
| * // With compound filters (AND/OR) | |
| * const response = await model.invoke( | |
| * "Find technical docs from 2024", | |
| * { | |
| * tools: [tools.fileSearch({ | |
| * vectorStoreIds: ["vs_abc123"], | |
| * filters: { | |
| * type: "and", | |
| * filters: [ | |
| * { type: "eq", key: "category", value: "technical" }, | |
| * { type: "gte", key: "year", value: 2024 } | |
| * ] | |
| * } | |
| * })] | |
| * } | |
| * ); | |
| * | |
| * // With ranking options for more relevant results | |
| * const response = await model.invoke( | |
| * "Find the most relevant information", | |
| * { | |
| * tools: [tools.fileSearch({ | |
| * vectorStoreIds: ["vs_abc123"], | |
| * rankingOptions: { | |
| * scoreThreshold: 0.8, | |
| * ranker: "auto" | |
| * } | |
| * })] | |
| * } | |
| * ); | |
| * | |
| * // Search multiple vector stores | |
| * const response = await model.invoke( | |
| * "Search across all knowledge bases", | |
| * { | |
| * tools: [tools.fileSearch({ | |
| * vectorStoreIds: ["vs_abc123", "vs_def456"] | |
| * })] | |
| * } | |
| * ); | |
| * ``` | |
| * | |
| * @remarks | |
| * - Vector stores must be created and populated before using this tool | |
| * - The tool returns file citations in the response annotations | |
| * - Use `include: ["file_search_call.results"]` in the API call to get search results | |
| * - Supported file types include PDF, DOCX, TXT, MD, and many code file formats | |
| */ | |
| function fileSearch(options) { | |
| return { | |
| type: "file_search", | |
| vector_store_ids: options.vectorStoreIds, | |
| max_num_results: options.maxNumResults, | |
| filters: options.filters, | |
| ranking_options: convertRankingOptions(options.rankingOptions) | |
| }; | |
| } | |
| //#endregion | |
| export { fileSearch }; | |
| //# sourceMappingURL=fileSearch.js.map |