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
TypeScript
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 | {