From a265d7663aa1e8e69880b876ca6f31239f4abd8d Mon Sep 17 00:00:00 2001 From: Quinn Slack Date: Sun, 24 Dec 2023 22:05:40 -0600 Subject: [PATCH] wip --- provider/docs/src/corpus/corpus.ts | 7 +++---- provider/docs/src/corpus/search/multi.ts | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 provider/docs/src/corpus/search/multi.ts diff --git a/provider/docs/src/corpus/corpus.ts b/provider/docs/src/corpus/corpus.ts index d3d68330..2fcaae22 100644 --- a/provider/docs/src/corpus/corpus.ts +++ b/provider/docs/src/corpus/corpus.ts @@ -1,6 +1,5 @@ import { Chunk, chunk } from '../doc/chunker' -import { embeddingsSearch } from './search/embeddings' -import { keywordSearch } from './search/keyword' +import { multiSearch } from './search/multi' /** * A documentation corpus. @@ -44,8 +43,8 @@ export function createCorpus(docs: Document[]): Corpus { const storage = createStoredCorpus(docs) return { - search: (query, keyword) => { - return Promise.resolve(keyword ? keywordSearch(storage, query) : embeddingsSearch(storage, query)) + search: query => { + return multiSearch(storage, query) }, get length(): number { return docs.length diff --git a/provider/docs/src/corpus/search/multi.ts b/provider/docs/src/corpus/search/multi.ts new file mode 100644 index 00000000..a2fede7f --- /dev/null +++ b/provider/docs/src/corpus/search/multi.ts @@ -0,0 +1,16 @@ +import { CorpusSearchResult, StoredCorpus } from '../corpus' +import { embeddingsSearch } from './embeddings' +import { keywordSearch } from './keyword' + +/** + * Search using multiple search methods. + */ +export async function multiSearch(storage: StoredCorpus, query: string): Promise { + const allResults = await Promise.all(SEARCH_METHODS.map(method => method(storage, query))) + return allResults.flat() +} + +const SEARCH_METHODS: (( + storage: StoredCorpus, + query: string +) => CorpusSearchResult[] | Promise)[] = [keywordSearch, embeddingsSearch]