UNPKG

vespa-ts

Version:

A reusable TypeScript package for interacting with Vespa search engine with dependency injection support

1,212 lines (1,211 loc) 53.8 kB
import { Apps, CalendarEntity, DriveEntity, MailEntity, type VespaDataSource, type VespaDataSourceFile, type VespaDataSourceSearch, type Intent, type Span, SlackEntity } from "./types"; import type { VespaAutocompleteResponse, VespaFile, VespaSearchResult, VespaSearchResponse, VespaUser, Entity, VespaSchema, Inserts, VespaQueryConfig, GetItemsParams, GetThreadItemsParams } from "./types"; import { SearchModes } from "./types"; import type { VespaDependencies } from "./types"; type YqlProfile = { profile: SearchModes; yql: string; }; interface EntityCounts { [entity: string]: number; } export interface AppEntityCounts { [app: string]: EntityCounts; } export declare class VespaService { private logger; private config; private vespa; private schemaSources; private fallbackVespa; private vespaEndpoint; constructor(dependencies: VespaDependencies); getSchemaSources(): string; /** * Deletes all documents from the specified schema and namespace in Vespa. */ deleteAllDocuments(): Promise<void>; insertDocument: (document: VespaFile) => Promise<void>; insertWithRetry: (document: Inserts, schema: VespaSchema, maxRetries?: number) => Promise<void>; insert: (document: Inserts, schema: VespaSchema) => Promise<void>; insertUser: (user: VespaUser) => Promise<void>; deduplicateAutocomplete: (resp: VespaAutocompleteResponse) => VespaAutocompleteResponse; autocomplete: (query: string, email: string, limit?: number) => Promise<VespaAutocompleteResponse>; handleAppsNotInYql: (app: Apps | null, includedApp: Apps[]) => never; HybridDefaultProfile: (hits: number, app: Apps | null, entity: Entity | null, profile?: SearchModes, timestampRange?: { to: number | null; from: number | null; } | null, excludedIds?: string[], notInMailLabels?: string[], excludedApps?: Apps[], intent?: Intent | null) => YqlProfile; buildIntentFilter: (intent: Intent | null) => string; HybridDefaultProfileForAgent: (hits: number, app: Apps | null, entity: Entity | null, profile?: SearchModes, timestampRange?: { to: number | null; from: number | null; } | null, excludedIds?: string[], notInMailLabels?: string[], AllowedApps?: Apps[] | null, dataSourceIds?: string[], intent?: Intent | null, channelIds?: string[]) => YqlProfile; HybridDefaultProfileInFiles: (hits: number, profile: SearchModes | undefined, fileIds: string[], notInMailLabels?: string[]) => YqlProfile; HybridDefaultProfileForSlack: (hits: number, profile?: SearchModes, channelIds?: string[], threadId?: string, userId?: string, timestampRange?: { to: number | null; from: number | null; } | null) => YqlProfile; HybridDefaultProfileAppEntityCounts: (hits: number, timestampRange: { to: number; from: number; } | null, notInMailLabels?: string[], excludedApps?: Apps[]) => YqlProfile; getAllDocumentsForAgent: (AllowedApps: Apps[] | null, dataSourceIds?: string[], limit?: number) => Promise<VespaSearchResponse | null>; groupVespaSearch: (query: string, email: string, limit?: number, timestampRange?: { to: number; from: number; } | null) => Promise<AppEntityCounts>; _groupVespaSearch(query: string, email: string, limit?: number, timestampRange?: { to: number; from: number; } | null, isSlackConnected?: boolean): Promise<AppEntityCounts>; searchVespa: (query: string, email: string, app: Apps | null, entity: Entity | null, { alpha, limit, offset, timestampRange, excludedIds, notInMailLabels, rankProfile, requestDebug, span, maxHits, recencyDecayRate, isIntentSearch, intent, }: Partial<VespaQueryConfig>) => Promise<VespaSearchResponse>; _searchVespa(query: string, email: string, app: Apps | null, entity: Entity | null, { alpha, limit, offset, timestampRange, excludedIds, notInMailLabels, rankProfile, requestDebug, span, maxHits, recencyDecayRate, isIntentSearch, intent, isSlackConnected, }: Partial<VespaQueryConfig>): Promise<VespaSearchResponse>; searchVespaInFiles: (query: string, email: string, fileIds: string[], { alpha, limit, offset, notInMailLabels, rankProfile, requestDebug, span, maxHits, }: Partial<VespaQueryConfig>) => Promise<VespaSearchResponse>; searchSlackInVespa: (query: string, email: string, { alpha, limit, offset, rankProfile, requestDebug, span, maxHits, channelIds, threadId, userId, timestampRange, }: Partial<VespaQueryConfig> & { channelIds?: string[]; threadId?: string; userId?: string; }) => Promise<VespaSearchResponse>; searchVespaThroughAgent: (query: string, email: string, apps: Apps[] | null, { alpha, limit, offset, rankProfile, requestDebug, span, maxHits, }: Partial<VespaQueryConfig>) => Promise<VespaSearchResponse>; searchVespaAgent: (query: string, email: string, app: Apps | null, entity: Entity | null, Apps: Apps[] | null, { alpha, limit, offset, timestampRange, excludedIds, notInMailLabels, rankProfile, requestDebug, span, maxHits, recencyDecayRate, dataSourceIds, intent, channelIds, }: Partial<VespaQueryConfig>) => Promise<VespaSearchResponse>; GetDocument: (schema: VespaSchema, docId: string) => Promise<{ id: string; relevance: number; fields: { matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(title)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; } | { chunk_scores: { cells: Record<string, number>; }; "bm25(subject)"?: number | undefined; "bm25(chunks)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; } | { chunk_scores: { cells: Record<string, number>; }; chunk_vector_score?: number | undefined; scaled_bm25_chunks?: number | undefined; scaled_bm25_filename?: number | undefined; } | { "bm25(fileName)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; chunk_scores?: { cells: Record<string, number>; } | undefined; } | { "bm25(name)"?: number | undefined; "bm25(email)"?: number | undefined; } | { "bm25(name)"?: number | undefined; "bm25(description)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; "bm25(attendeesNames)"?: number | undefined; } | { vector_score?: number | undefined; combined_nativeRank?: number | undefined; "nativeRank(text)"?: number | undefined; "nativeRank(username)"?: number | undefined; "nativeRank(name)"?: number | undefined; } | { "bm25(name)"?: number | undefined; "bm25(topic)"?: number | undefined; "bm25(description)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; }; sddocname: "file" | "user" | "event" | "mail_attachment" | "mail" | "chat_container" | "chat_team" | "chat_message" | "chat_user" | "user_query" | "datasource" | "datasource_file"; } & ({ docId: string; name: string; createdBy: string; createdAt: number; updatedAt: number; sddocname: "datasource"; relevance: number; source: string; documentid: string; matchfeatures?: any; rankfeatures?: any; } | { docId: string; app: Apps.DataSource; chunks: string[]; uploadedBy: string; createdAt: number; updatedAt: number; dataSourceRef: string; sddocname: "datasource_file"; matchfeatures: { "bm25(fileName)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; chunk_scores?: { cells: Record<string, number>; } | undefined; }; relevance: number; source: string; documentid: string; description?: string | undefined; fileName?: string | undefined; fileSize?: number | undefined; image_chunks?: string[] | undefined; chunks_pos?: number[] | undefined; image_chunks_pos?: number[] | undefined; duration?: number | undefined; mimeType?: string | undefined; metadata?: string | undefined; rankfeatures?: any; dataSourceName?: string | undefined; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; image_chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; chunks_pos_summary?: number[] | undefined; image_chunks_pos_summary?: number[] | undefined; } | { docId: string; email: string; app: Apps; entity: import("./types").GooglePeopleEntity; creationTime: number; sddocname: "user"; relevance: number; source: string; documentid: string; name?: string | undefined; gender?: string | undefined; photoLink?: string | undefined; aliases?: string[] | undefined; language?: string | undefined; includeInGlobalAddressList?: boolean | undefined; isAdmin?: boolean | undefined; isDelegatedAdmin?: boolean | undefined; suspended?: boolean | undefined; archived?: boolean | undefined; urls?: string[] | undefined; rankfeatures?: any; orgName?: string | undefined; orgJobTitle?: string | undefined; orgDepartment?: string | undefined; orgLocation?: string | undefined; orgDescription?: string | undefined; lastLoggedIn?: number | undefined; birthday?: number | undefined; occupations?: string[] | undefined; userDefined?: string[] | undefined; customerId?: string | undefined; clientData?: string[] | undefined; owner?: string | undefined; } | { docId: string; app: Apps; entity: DriveEntity; title: string; url: string | null; parentId: string | null; chunks: string[]; owner: string | null; ownerEmail: string | null; photoLink: string | null; permissions: string[]; mimeType: string | null; metadata: Record<string, never> | { spreadsheetId: string; totalSheets: number; }; createdAt: number; updatedAt: number; sddocname: "file"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(title)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; }; relevance: number; source: string; documentid: string; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { threadId: string; subject: string; chunks: string[]; timestamp: number; app: Apps; entity: MailEntity.Email; permissions: string[]; from: string; to: string[]; cc: string[]; bcc: string[]; mimeType: string; attachmentFilenames: string[]; attachments: { fileType: string; fileSize: number; }[]; labels: string[]; docId: string; sddocname: "mail"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(subject)"?: number | undefined; "bm25(chunks)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; }; relevance: number; source: string; documentid: string; mailId?: string | undefined; userMap?: Record<string, string> | undefined; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { docId: string; name: string; description: string; url: string; status: string; location: string; createdAt: number; updatedAt: number; app: Apps; entity: CalendarEntity.Event; creator: { email: string; displayName: string; }; organizer: { email: string; displayName: string; }; attendees: { email: string; displayName: string; }[]; attendeesNames: string[]; startTime: number; endTime: number; attachmentFilenames: string[]; attachments: { fileId: string; title: string; fileUrl: string; mimeType: string; }[]; recurrence: string[]; baseUrl: string; joiningLink: string; permissions: string[]; cancelledInstances: string[]; defaultStartTime: boolean; sddocname: "event"; relevance: number; source: string; documentid: string; rankfeatures?: any; } | { docId: string; query_text: string; timestamp: number; count: number; sddocname: "user_query"; relevance: number; source: string; documentid: string; } | { docId: string; mailId: string; threadId: string; app: Apps; entity: import("./types").MailAttachmentEntity; chunks: string[]; timestamp: number; permissions: string[]; filename: string; sddocname: "mail_attachment"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; chunk_vector_score?: number | undefined; scaled_bm25_chunks?: number | undefined; scaled_bm25_filename?: number | undefined; }; relevance: number; source: string; documentid: string; partId?: number | null | undefined; fileType?: string | null | undefined; fileSize?: number | null | undefined; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { docId: string; name: string; channelName: string; creator: string; app: Apps; entity: SlackEntity; isPrivate: boolean; isArchived: boolean; isGeneral: boolean; isIm: boolean; isMpim: boolean; permissions: string[]; createdAt: number; updatedAt: number; lastSyncedAt: number; topic: string; description: string; count: number; sddocname: "chat_container"; relevance: number; source: string; documentid: string; domain?: string | undefined; } | { docId: string; name: string; title: string; app: Apps; entity: SlackEntity; image: string; email: string; statusText: string; tz: string; teamId: string; deleted: boolean; isAdmin: boolean; updatedAt: number; sddocname: "chat_user"; relevance: number; source: string; documentid: string; } | { docId: string; teamId: string; channelId: string; text: string; userId: string; app: Apps; entity: SlackEntity; name: string; username: string; image: string; createdAt: number; teamRef: string; threadId: string; attachmentIds: string[]; mentions: string[]; updatedAt: number; deletedAt: number; metadata: string; sddocname: "chat_message"; matchfeatures: { vector_score?: number | undefined; combined_nativeRank?: number | undefined; "nativeRank(text)"?: number | undefined; "nativeRank(username)"?: number | undefined; "nativeRank(name)"?: number | undefined; }; relevance: number; source: string; documentid: string; channelName?: string | undefined; isIm?: boolean | undefined; isMpim?: boolean | undefined; isPrivate?: boolean | undefined; permissions?: string[] | undefined; teamName?: string | undefined; domain?: string | undefined; rankfeatures?: any; chunks_summary?: string[] | undefined; }); pathId?: string | undefined; }>; IfMailDocExist: (email: string, docId: string) => Promise<boolean>; GetDocumentsByDocIds: (docIds: string[], generateAnswerSpan: Span) => Promise<VespaSearchResponse>; /** * Fetches a single random document from a specific schema. */ GetRandomDocument: (namespace: string, schema: string, cluster: string) => Promise<any | null>; GetDocumentWithField: (fieldName: string, schema: VespaSchema, limit?: number, offset?: number) => Promise<VespaSearchResponse>; UpdateDocumentPermissions: (schema: VespaSchema, docId: string, updatedPermissions: string[]) => Promise<void>; UpdateEventCancelledInstances: (schema: VespaSchema, docId: string, updatedCancelledInstances: string[]) => Promise<void>; UpdateDocument: (schema: VespaSchema, docId: string, updatedFields: Record<string, any>) => Promise<void>; DeleteDocument: (docId: string, schema: VespaSchema) => Promise<void>; ifDocumentsExist: (docIds: string[]) => Promise<Record<string, { exists: boolean; updatedAt: number | null; }>>; ifMailDocumentsExist: (mailIds: string[]) => Promise<Record<string, { docId: string; exists: boolean; updatedAt: number | null; userMap: Record<string, string>; }>>; ifDocumentsExistInChatContainer: (docIds: string[]) => Promise<Record<string, { exists: boolean; updatedAt: number | null; permissions: string[]; }>>; ifDocumentsExistInSchema: (schema: string, docIds: string[]) => Promise<Record<string, { exists: boolean; updatedAt: number | null; }>>; getNDocuments: (n: number) => Promise<unknown>; hashQuery: (query: string) => string; updateUserQueryHistory: (query: string, owner: string) => Promise<void>; getDocumentOrNull: (schema: VespaSchema, docId: string) => Promise<{ id: string; relevance: number; fields: { matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(title)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; } | { chunk_scores: { cells: Record<string, number>; }; "bm25(subject)"?: number | undefined; "bm25(chunks)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; } | { chunk_scores: { cells: Record<string, number>; }; chunk_vector_score?: number | undefined; scaled_bm25_chunks?: number | undefined; scaled_bm25_filename?: number | undefined; } | { "bm25(fileName)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; chunk_scores?: { cells: Record<string, number>; } | undefined; } | { "bm25(name)"?: number | undefined; "bm25(email)"?: number | undefined; } | { "bm25(name)"?: number | undefined; "bm25(description)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; "bm25(attendeesNames)"?: number | undefined; } | { vector_score?: number | undefined; combined_nativeRank?: number | undefined; "nativeRank(text)"?: number | undefined; "nativeRank(username)"?: number | undefined; "nativeRank(name)"?: number | undefined; } | { "bm25(name)"?: number | undefined; "bm25(topic)"?: number | undefined; "bm25(description)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; }; sddocname: "file" | "user" | "event" | "mail_attachment" | "mail" | "chat_container" | "chat_team" | "chat_message" | "chat_user" | "user_query" | "datasource" | "datasource_file"; } & ({ docId: string; name: string; createdBy: string; createdAt: number; updatedAt: number; sddocname: "datasource"; relevance: number; source: string; documentid: string; matchfeatures?: any; rankfeatures?: any; } | { docId: string; app: Apps.DataSource; chunks: string[]; uploadedBy: string; createdAt: number; updatedAt: number; dataSourceRef: string; sddocname: "datasource_file"; matchfeatures: { "bm25(fileName)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; chunk_scores?: { cells: Record<string, number>; } | undefined; }; relevance: number; source: string; documentid: string; description?: string | undefined; fileName?: string | undefined; fileSize?: number | undefined; image_chunks?: string[] | undefined; chunks_pos?: number[] | undefined; image_chunks_pos?: number[] | undefined; duration?: number | undefined; mimeType?: string | undefined; metadata?: string | undefined; rankfeatures?: any; dataSourceName?: string | undefined; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; image_chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; chunks_pos_summary?: number[] | undefined; image_chunks_pos_summary?: number[] | undefined; } | { docId: string; email: string; app: Apps; entity: import("./types").GooglePeopleEntity; creationTime: number; sddocname: "user"; relevance: number; source: string; documentid: string; name?: string | undefined; gender?: string | undefined; photoLink?: string | undefined; aliases?: string[] | undefined; language?: string | undefined; includeInGlobalAddressList?: boolean | undefined; isAdmin?: boolean | undefined; isDelegatedAdmin?: boolean | undefined; suspended?: boolean | undefined; archived?: boolean | undefined; urls?: string[] | undefined; rankfeatures?: any; orgName?: string | undefined; orgJobTitle?: string | undefined; orgDepartment?: string | undefined; orgLocation?: string | undefined; orgDescription?: string | undefined; lastLoggedIn?: number | undefined; birthday?: number | undefined; occupations?: string[] | undefined; userDefined?: string[] | undefined; customerId?: string | undefined; clientData?: string[] | undefined; owner?: string | undefined; } | { docId: string; app: Apps; entity: DriveEntity; title: string; url: string | null; parentId: string | null; chunks: string[]; owner: string | null; ownerEmail: string | null; photoLink: string | null; permissions: string[]; mimeType: string | null; metadata: Record<string, never> | { spreadsheetId: string; totalSheets: number; }; createdAt: number; updatedAt: number; sddocname: "file"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(title)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; }; relevance: number; source: string; documentid: string; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { threadId: string; subject: string; chunks: string[]; timestamp: number; app: Apps; entity: MailEntity.Email; permissions: string[]; from: string; to: string[]; cc: string[]; bcc: string[]; mimeType: string; attachmentFilenames: string[]; attachments: { fileType: string; fileSize: number; }[]; labels: string[]; docId: string; sddocname: "mail"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(subject)"?: number | undefined; "bm25(chunks)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; }; relevance: number; source: string; documentid: string; mailId?: string | undefined; userMap?: Record<string, string> | undefined; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { docId: string; name: string; description: string; url: string; status: string; location: string; createdAt: number; updatedAt: number; app: Apps; entity: CalendarEntity.Event; creator: { email: string; displayName: string; }; organizer: { email: string; displayName: string; }; attendees: { email: string; displayName: string; }[]; attendeesNames: string[]; startTime: number; endTime: number; attachmentFilenames: string[]; attachments: { fileId: string; title: string; fileUrl: string; mimeType: string; }[]; recurrence: string[]; baseUrl: string; joiningLink: string; permissions: string[]; cancelledInstances: string[]; defaultStartTime: boolean; sddocname: "event"; relevance: number; source: string; documentid: string; rankfeatures?: any; } | { docId: string; query_text: string; timestamp: number; count: number; sddocname: "user_query"; relevance: number; source: string; documentid: string; } | { docId: string; mailId: string; threadId: string; app: Apps; entity: import("./types").MailAttachmentEntity; chunks: string[]; timestamp: number; permissions: string[]; filename: string; sddocname: "mail_attachment"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; chunk_vector_score?: number | undefined; scaled_bm25_chunks?: number | undefined; scaled_bm25_filename?: number | undefined; }; relevance: number; source: string; documentid: string; partId?: number | null | undefined; fileType?: string | null | undefined; fileSize?: number | null | undefined; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { docId: string; name: string; channelName: string; creator: string; app: Apps; entity: SlackEntity; isPrivate: boolean; isArchived: boolean; isGeneral: boolean; isIm: boolean; isMpim: boolean; permissions: string[]; createdAt: number; updatedAt: number; lastSyncedAt: number; topic: string; description: string; count: number; sddocname: "chat_container"; relevance: number; source: string; documentid: string; domain?: string | undefined; } | { docId: string; name: string; title: string; app: Apps; entity: SlackEntity; image: string; email: string; statusText: string; tz: string; teamId: string; deleted: boolean; isAdmin: boolean; updatedAt: number; sddocname: "chat_user"; relevance: number; source: string; documentid: string; } | { docId: string; teamId: string; channelId: string; text: string; userId: string; app: Apps; entity: SlackEntity; name: string; username: string; image: string; createdAt: number; teamRef: string; threadId: string; attachmentIds: string[]; mentions: string[]; updatedAt: number; deletedAt: number; metadata: string; sddocname: "chat_message"; matchfeatures: { vector_score?: number | undefined; combined_nativeRank?: number | undefined; "nativeRank(text)"?: number | undefined; "nativeRank(username)"?: number | undefined; "nativeRank(name)"?: number | undefined; }; relevance: number; source: string; documentid: string; channelName?: string | undefined; isIm?: boolean | undefined; isMpim?: boolean | undefined; isPrivate?: boolean | undefined; permissions?: string[] | undefined; teamName?: string | undefined; domain?: string | undefined; rankfeatures?: any; chunks_summary?: string[] | undefined; }); pathId?: string | undefined; } | null>; searchUsersByNamesAndEmails: (mentionedNames: string[], mentionedEmails: string[], limit?: number) => Promise<VespaSearchResponse>; /** * Helper function to calculate the timestamp based on LastUpdated value. */ getTimestamp: (lastUpdated: string) => number | null; getItems: (params: GetItemsParams) => Promise<VespaSearchResponse>; insertDataSource: (document: VespaDataSource) => Promise<void>; insertDataSourceFile: (document: VespaDataSourceFile) => Promise<void>; getDataSourceByNameAndCreator: (name: string, createdByEmail: string) => Promise<VespaDataSourceSearch | null>; getDataSourcesByCreator: (createdByEmail: string, limit?: number) => Promise<VespaSearchResponse>; checkIfDataSourceFileExistsByNameAndId: (fileName: string, dataSourceId: string, uploadedBy: string) => Promise<boolean>; fetchAllDataSourceFilesByName: (dataSourceName: string, userEmail: string, concurrency?: number, batchSize?: number) => Promise<VespaSearchResult[] | null>; SlackHybridProfile: (hits: number, entity: Entity | null, profile?: SearchModes, timestampRange?: { to: number | null; from: number | null; } | null, channelId?: string, userId?: string) => YqlProfile; SearchVespaThreads: (threadIdsInput: string[], generateAnswerSpan: Span) => Promise<VespaSearchResponse>; SearchEmailThreads: (threadIdsInput: string[], email: string) => Promise<VespaSearchResponse>; getThreadItems: (params: GetThreadItemsParams & { filterQuery?: string; }) => Promise<VespaSearchResponse>; getSlackUserDetails: (userEmail: string) => Promise<VespaSearchResponse>; getFolderItems: (docIds: string[], schema: string, entity: string, email: string) => Promise<{ root: { id: string; relevance: number; coverage: { coverage: number; documents: number; full: boolean; nodes: number; results: number; resultsFull: number; }; children: (import("./types").VespaGroupType | { id: string; relevance: number; fields: { matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(title)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; } | { chunk_scores: { cells: Record<string, number>; }; "bm25(subject)"?: number | undefined; "bm25(chunks)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; } | { chunk_scores: { cells: Record<string, number>; }; chunk_vector_score?: number | undefined; scaled_bm25_chunks?: number | undefined; scaled_bm25_filename?: number | undefined; } | { "bm25(fileName)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; chunk_scores?: { cells: Record<string, number>; } | undefined; } | { "bm25(name)"?: number | undefined; "bm25(email)"?: number | undefined; } | { "bm25(name)"?: number | undefined; "bm25(description)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; "bm25(attendeesNames)"?: number | undefined; } | { vector_score?: number | undefined; combined_nativeRank?: number | undefined; "nativeRank(text)"?: number | undefined; "nativeRank(username)"?: number | undefined; "nativeRank(name)"?: number | undefined; } | { "bm25(name)"?: number | undefined; "bm25(topic)"?: number | undefined; "bm25(description)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; }; sddocname: "file" | "user" | "event" | "mail_attachment" | "mail" | "chat_container" | "chat_team" | "chat_message" | "chat_user" | "user_query" | "datasource" | "datasource_file"; } & ({ docId: string; name: string; createdBy: string; createdAt: number; updatedAt: number; sddocname: "datasource"; relevance: number; source: string; documentid: string; matchfeatures?: any; rankfeatures?: any; } | { docId: string; app: Apps.DataSource; chunks: string[]; uploadedBy: string; createdAt: number; updatedAt: number; dataSourceRef: string; sddocname: "datasource_file"; matchfeatures: { "bm25(fileName)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; chunk_scores?: { cells: Record<string, number>; } | undefined; }; relevance: number; source: string; documentid: string; description?: string | undefined; fileName?: string | undefined; fileSize?: number | undefined; image_chunks?: string[] | undefined; chunks_pos?: number[] | undefined; image_chunks_pos?: number[] | undefined; duration?: number | undefined; mimeType?: string | undefined; metadata?: string | undefined; rankfeatures?: any; dataSourceName?: string | undefined; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; image_chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; chunks_pos_summary?: number[] | undefined; image_chunks_pos_summary?: number[] | undefined; } | { docId: string; email: string; app: Apps; entity: import("./types").GooglePeopleEntity; creationTime: number; sddocname: "user"; relevance: number; source: string; documentid: string; name?: string | undefined; gender?: string | undefined; photoLink?: string | undefined; aliases?: string[] | undefined; language?: string | undefined; includeInGlobalAddressList?: boolean | undefined; isAdmin?: boolean | undefined; isDelegatedAdmin?: boolean | undefined; suspended?: boolean | undefined; archived?: boolean | undefined; urls?: string[] | undefined; rankfeatures?: any; orgName?: string | undefined; orgJobTitle?: string | undefined; orgDepartment?: string | undefined; orgLocation?: string | undefined; orgDescription?: string | undefined; lastLoggedIn?: number | undefined; birthday?: number | undefined; occupations?: string[] | undefined; userDefined?: string[] | undefined; customerId?: string | undefined; clientData?: string[] | undefined; owner?: string | undefined; } | { docId: string; app: Apps; entity: DriveEntity; title: string; url: string | null; parentId: string | null; chunks: string[]; owner: string | null; ownerEmail: string | null; photoLink: string | null; permissions: string[]; mimeType: string | null; metadata: Record<string, never> | { spreadsheetId: string; totalSheets: number; }; createdAt: number; updatedAt: number; sddocname: "file"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(title)"?: number | undefined; "bm25(chunks)"?: number | undefined; "closeness(field, chunk_embeddings)"?: number | undefined; }; relevance: number; source: string; documentid: string; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { threadId: string; subject: string; chunks: string[]; timestamp: number; app: Apps; entity: MailEntity.Email; permissions: string[]; from: string; to: string[]; cc: string[]; bcc: string[]; mimeType: string; attachmentFilenames: string[]; attachments: { fileType: string; fileSize: number; }[]; labels: string[]; docId: string; sddocname: "mail"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; "bm25(subject)"?: number | undefined; "bm25(chunks)"?: number | undefined; "bm25(attachmentFilenames)"?: number | undefined; }; relevance: number; source: string; documentid: string; mailId?: string | undefined; userMap?: Record<string, string> | undefined; rankfeatures?: any; chunks_summary?: (string | { chunk: string; score: number; index: number; })[] | undefined; } | { docId: string; name: string; description: string; url: string; status: string; location: string; createdAt: number; updatedAt: number; app: Apps; entity: CalendarEntity.Event; creator: { email: string; displayName: string; }; organizer: { email: string; displayName: string; }; attendees: { email: string; displayName: string; }[]; attendeesNames: string[]; startTime: number; endTime: number; attachmentFilenames: string[]; attachments: { fileId: string; title: string; fileUrl: string; mimeType: string; }[]; recurrence: string[]; baseUrl: string; joiningLink: string; permissions: string[]; cancelledInstances: string[]; defaultStartTime: boolean; sddocname: "event"; relevance: number; source: string; documentid: string; rankfeatures?: any; } | { docId: string; query_text: string; timestamp: number; count: number; sddocname: "user_query"; relevance: number; source: string; documentid: string; } | { docId: string; mailId: string; threadId: string; app: Apps; entity: import("./types").MailAttachmentEntity; chunks: string[]; timestamp: number; permissions: string[]; filename: string; sddocname: "mail_attachment"; matchfeatures: { chunk_scores: { cells: Record<string, number>; }; chunk_vector_score?: number | undefined; scaled_bm25_chunks?: number | undefined; scaled_bm25_filename?: number | undefined; }; relevance: number; source: string; documentid: string; partId?: number | null | undefined; fileType?: string | null | undefined; fileSize?: number | null | undefined; rankfeatures?: any; chunks_summary?: (string | {