import { SelectVector } from '../../database/schema' import { t } from '../../lang/helpers' export type QueryProgressState = | { type: 'reading-mentionables' } | { type: 'reading-files' currentFile?: string totalFiles?: number completedFiles?: number } | { type: 'reading-files-done' fileContents: Array<{ path: string, content: string }> } | { type: 'reading-websites' currentUrl?: string totalUrls?: number completedUrls?: number } | { type: 'reading-websites-done' websiteContents: Array<{ url: string, content: string }> } | { type: 'indexing' indexProgress: IndexProgress } | { type: 'querying' } | { type: 'querying-done' queryResult: (Omit & { similarity: number })[] } | { type: 'idle' } export type IndexProgress = { completedChunks: number totalChunks: number totalFiles: number } // TODO: Update style export default function QueryProgress({ state, }: { state: QueryProgressState }) { switch (state.type) { case 'idle': return null case 'reading-mentionables': return (

{t('chat.queryProgress.readingMentionableFiles')}

) case 'reading-files': return (

{t('chat.queryProgress.readingFiles')}

{state.currentFile && (

{state.currentFile} {state.totalFiles && state.completedFiles !== undefined && ( ({state.completedFiles}/{state.totalFiles}) )}

)}
) case 'reading-files-done': return (

{t('chat.queryProgress.readingFilesDone')}

{t('chat.queryProgress.filesLoaded').replace('{count}', state.fileContents.length.toString())}

) case 'reading-websites': return (

{t('chat.queryProgress.readingWebsites')}

{state.currentUrl && (

{state.currentUrl} {state.totalUrls && state.completedUrls !== undefined && ( ({state.completedUrls}/{state.totalUrls}) )}

)}
) case 'reading-websites-done': return (

{t('chat.queryProgress.readingWebsitesDone')}

{t('chat.queryProgress.websitesLoaded').replace('{count}', state.websiteContents.length.toString())}

) case 'indexing': return (

{`${t('chat.queryProgress.indexing')} ${state.indexProgress.totalFiles} ${t('chat.queryProgress.file')}`}

{`${state.indexProgress.completedChunks}/${state.indexProgress.totalChunks} ${t('chat.queryProgress.chunkIndexed')}`}

) case 'querying': return (

{t('chat.queryProgress.queryingVault')}

) case 'querying-done': return (

{t('chat.queryProgress.readingRelatedFiles')}

{state.queryResult.map((result) => (

{result.path}

{result.similarity}

))}
) } } function DotLoader() { return }