| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import { createProviderToolFactoryWithOutputSchema } from "@ai-sdk/provider-utils"
- import type {
- OpenAIResponsesFileSearchToolComparisonFilter,
- OpenAIResponsesFileSearchToolCompoundFilter,
- } from "../openai-responses-api-types"
- import { z } from "zod/v4"
- const comparisonFilterSchema = z.object({
- key: z.string(),
- type: z.enum(["eq", "ne", "gt", "gte", "lt", "lte"]),
- value: z.union([z.string(), z.number(), z.boolean()]),
- })
- const compoundFilterSchema: z.ZodType<any> = z.object({
- type: z.enum(["and", "or"]),
- filters: z.array(z.union([comparisonFilterSchema, z.lazy(() => compoundFilterSchema)])),
- })
- export const fileSearchArgsSchema = z.object({
- vectorStoreIds: z.array(z.string()),
- maxNumResults: z.number().optional(),
- ranking: z
- .object({
- ranker: z.string().optional(),
- scoreThreshold: z.number().optional(),
- })
- .optional(),
- filters: z.union([comparisonFilterSchema, compoundFilterSchema]).optional(),
- })
- export const fileSearchOutputSchema = z.object({
- queries: z.array(z.string()),
- results: z
- .array(
- z.object({
- attributes: z.record(z.string(), z.unknown()),
- fileId: z.string(),
- filename: z.string(),
- score: z.number(),
- text: z.string(),
- }),
- )
- .nullable(),
- })
- export const fileSearch = createProviderToolFactoryWithOutputSchema<
- {},
- {
- /**
- * The search query to execute.
- */
- queries: string[]
- /**
- * The results of the file search tool call.
- */
- results:
- | null
- | {
- /**
- * Set of 16 key-value pairs that can be attached to an object.
- * This can be useful for storing additional information about the object
- * in a structured format, and querying for objects via API or the dashboard.
- * Keys are strings with a maximum length of 64 characters.
- * Values are strings with a maximum length of 512 characters, booleans, or numbers.
- */
- attributes: Record<string, unknown>
- /**
- * The unique ID of the file.
- */
- fileId: string
- /**
- * The name of the file.
- */
- filename: string
- /**
- * The relevance score of the file - a value between 0 and 1.
- */
- score: number
- /**
- * The text that was retrieved from the file.
- */
- text: string
- }[]
- },
- {
- /**
- * List of vector store IDs to search through.
- */
- vectorStoreIds: string[]
- /**
- * Maximum number of search results to return. Defaults to 10.
- */
- maxNumResults?: number
- /**
- * Ranking options for the search.
- */
- ranking?: {
- /**
- * The ranker to use for the file search.
- */
- ranker?: string
- /**
- * The score threshold for the file search, a number between 0 and 1.
- * Numbers closer to 1 will attempt to return only the most relevant results,
- * but may return fewer results.
- */
- scoreThreshold?: number
- }
- /**
- * A filter to apply.
- */
- filters?: OpenAIResponsesFileSearchToolComparisonFilter | OpenAIResponsesFileSearchToolCompoundFilter
- }
- >({
- id: "openai.file_search",
- inputSchema: z.object({}),
- outputSchema: fileSearchOutputSchema,
- })
|