Browse Source

Merge pull request #12571 from hurxxxx/feat/reindex-knowledge-files

feat: reindex knowledge files
Tim Jaeryang Baek 3 months ago
parent
commit
b130b55f5b
55 changed files with 236 additions and 5 deletions
  1. 69 0
      backend/open_webui/routers/knowledge.py
  2. 29 0
      src/lib/apis/knowledge/index.ts
  3. 34 5
      src/lib/components/admin/Settings/Documents.svelte
  4. 2 0
      src/lib/i18n/locales/ar-BH/translation.json
  5. 2 0
      src/lib/i18n/locales/ar/translation.json
  6. 2 0
      src/lib/i18n/locales/bg-BG/translation.json
  7. 2 0
      src/lib/i18n/locales/bn-BD/translation.json
  8. 2 0
      src/lib/i18n/locales/bo-TB/translation.json
  9. 2 0
      src/lib/i18n/locales/ca-ES/translation.json
  10. 2 0
      src/lib/i18n/locales/ceb-PH/translation.json
  11. 2 0
      src/lib/i18n/locales/cs-CZ/translation.json
  12. 2 0
      src/lib/i18n/locales/da-DK/translation.json
  13. 2 0
      src/lib/i18n/locales/de-DE/translation.json
  14. 2 0
      src/lib/i18n/locales/dg-DG/translation.json
  15. 2 0
      src/lib/i18n/locales/el-GR/translation.json
  16. 2 0
      src/lib/i18n/locales/en-GB/translation.json
  17. 2 0
      src/lib/i18n/locales/en-US/translation.json
  18. 2 0
      src/lib/i18n/locales/es-ES/translation.json
  19. 2 0
      src/lib/i18n/locales/et-EE/translation.json
  20. 2 0
      src/lib/i18n/locales/eu-ES/translation.json
  21. 2 0
      src/lib/i18n/locales/fa-IR/translation.json
  22. 2 0
      src/lib/i18n/locales/fi-FI/translation.json
  23. 2 0
      src/lib/i18n/locales/fr-CA/translation.json
  24. 2 0
      src/lib/i18n/locales/fr-FR/translation.json
  25. 2 0
      src/lib/i18n/locales/he-IL/translation.json
  26. 2 0
      src/lib/i18n/locales/hi-IN/translation.json
  27. 2 0
      src/lib/i18n/locales/hr-HR/translation.json
  28. 2 0
      src/lib/i18n/locales/hu-HU/translation.json
  29. 2 0
      src/lib/i18n/locales/id-ID/translation.json
  30. 2 0
      src/lib/i18n/locales/ie-GA/translation.json
  31. 2 0
      src/lib/i18n/locales/it-IT/translation.json
  32. 2 0
      src/lib/i18n/locales/ja-JP/translation.json
  33. 2 0
      src/lib/i18n/locales/ka-GE/translation.json
  34. 2 0
      src/lib/i18n/locales/ko-KR/translation.json
  35. 2 0
      src/lib/i18n/locales/lt-LT/translation.json
  36. 2 0
      src/lib/i18n/locales/ms-MY/translation.json
  37. 2 0
      src/lib/i18n/locales/nb-NO/translation.json
  38. 2 0
      src/lib/i18n/locales/nl-NL/translation.json
  39. 2 0
      src/lib/i18n/locales/pa-IN/translation.json
  40. 2 0
      src/lib/i18n/locales/pl-PL/translation.json
  41. 2 0
      src/lib/i18n/locales/pt-BR/translation.json
  42. 2 0
      src/lib/i18n/locales/pt-PT/translation.json
  43. 2 0
      src/lib/i18n/locales/ro-RO/translation.json
  44. 2 0
      src/lib/i18n/locales/ru-RU/translation.json
  45. 2 0
      src/lib/i18n/locales/sk-SK/translation.json
  46. 2 0
      src/lib/i18n/locales/sr-RS/translation.json
  47. 2 0
      src/lib/i18n/locales/sv-SE/translation.json
  48. 2 0
      src/lib/i18n/locales/th-TH/translation.json
  49. 2 0
      src/lib/i18n/locales/tk-TW/translation.json
  50. 2 0
      src/lib/i18n/locales/tr-TR/translation.json
  51. 2 0
      src/lib/i18n/locales/uk-UA/translation.json
  52. 2 0
      src/lib/i18n/locales/ur-PK/translation.json
  53. 2 0
      src/lib/i18n/locales/vi-VN/translation.json
  54. 2 0
      src/lib/i18n/locales/zh-CN/translation.json
  55. 2 0
      src/lib/i18n/locales/zh-TW/translation.json

+ 69 - 0
backend/open_webui/routers/knowledge.py

@@ -159,6 +159,72 @@ async def create_new_knowledge(
             status_code=status.HTTP_400_BAD_REQUEST,
             detail=ERROR_MESSAGES.FILE_EXISTS,
         )
+    
+
+
+############################
+# ReindexKnowledgeFiles
+############################
+
+
+@router.post("/reindex", response_model=bool)
+async def reindex_knowledge_files(
+    request: Request,
+    user=Depends(get_verified_user)
+):
+    if user.role != "admin":
+        raise HTTPException(
+            status_code=status.HTTP_401_UNAUTHORIZED,
+            detail=ERROR_MESSAGES.UNAUTHORIZED,
+        )
+    
+    knowledge_bases = Knowledges.get_knowledge_bases()
+         
+    log.info(f"Starting reindexing for {len(knowledge_bases)} knowledge bases")
+    
+    for knowledge_base in knowledge_bases:
+        try:
+            files = Files.get_files_by_ids(knowledge_base.data.get("file_ids", []))
+
+            try:
+                if VECTOR_DB_CLIENT.has_collection(collection_name=knowledge_base.id):
+                    VECTOR_DB_CLIENT.delete_collection(
+                        collection_name=knowledge_base.id
+                    )
+            except Exception as e:
+                log.error(f"Error deleting collection {knowledge_base.id}: {str(e)}")
+                raise HTTPException(
+                    status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
+                    detail=f"Error deleting vector DB collection"
+                )
+            
+            failed_files = []
+            for file in files:
+                try:
+                    process_file(
+                        request,
+                        ProcessFileForm(file_id=file.id, collection_name=knowledge_base.id),
+                        user=user,
+                    )
+                except Exception as e:
+                    log.error(f"Error processing file {file.filename} (ID: {file.id}): {str(e)}")
+                    failed_files.append({"file_id": file.id, "error": str(e)})
+                    continue
+          
+        except Exception as e:
+            log.error(f"Error processing knowledge base {knowledge_base.id}: {str(e)}")
+            raise HTTPException(
+                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
+                detail=f"Error processing knowledge base"
+            )
+        
+        if failed_files:
+            log.warning(f"Failed to process {len(failed_files)} files in knowledge base {knowledge_base.id}")
+            for failed in failed_files:
+                log.warning(f"File ID: {failed['file_id']}, Error: {failed['error']}")
+    
+    log.info("Reindexing completed successfully")
+    return True
 
 
 ############################
@@ -676,3 +742,6 @@ def add_files_to_knowledge_batch(
     return KnowledgeFilesResponse(
         **knowledge.model_dump(), files=Files.get_files_by_ids(existing_file_ids)
     )
+
+
+

+ 29 - 0
src/lib/apis/knowledge/index.ts

@@ -345,3 +345,32 @@ export const deleteKnowledgeById = async (token: string, id: string) => {
 
 	return res;
 };
+
+
+export const reindexKnowledgeFiles = async (token: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/knowledge/reindex`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		}
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};

+ 34 - 5
src/lib/components/admin/Settings/Documents.svelte

@@ -13,17 +13,16 @@
 		updateEmbeddingConfig,
 		getRerankingConfig,
 		updateRerankingConfig,
-		resetUploadDir,
 		getRAGConfig,
 		updateRAGConfig
 	} from '$lib/apis/retrieval';
 
-	import { knowledge, models } from '$lib/stores';
-	import { getKnowledgeBases } from '$lib/apis/knowledge';
-	import { uploadDir, deleteAllFiles, deleteFileById } from '$lib/apis/files';
+	import {  reindexKnowledgeFiles} from '$lib/apis/knowledge';
+	import {  deleteAllFiles } from '$lib/apis/files';
 
 	import ResetUploadDirConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
 	import ResetVectorDBConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
+	import ReindexKnowledgeFilesConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
 	import SensitiveInput from '$lib/components/common/SensitiveInput.svelte';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 	import Switch from '$lib/components/common/Switch.svelte';
@@ -31,12 +30,12 @@
 
 	const i18n = getContext('i18n');
 
-	let scanDirLoading = false;
 	let updateEmbeddingModelLoading = false;
 	let updateRerankingModelLoading = false;
 
 	let showResetConfirm = false;
 	let showResetUploadDirConfirm = false;
+	let showReindexConfirm = false;
 
 	let embeddingEngine = '';
 	let embeddingModel = '';
@@ -333,6 +332,21 @@
 	}}
 />
 
+
+<ReindexKnowledgeFilesConfirmDialog
+	bind:show={showReindexConfirm}
+	on:confirm={async () => {
+		const res = await reindexKnowledgeFiles(localStorage.token).catch((error) => {
+			toast.error(`${error}`);
+			return null;
+		});
+
+		if (res) {
+			toast.success($i18n.t('Success'));
+		}
+	}}
+/>
+
 <form
 	class="flex flex-col h-full justify-between space-y-3 text-sm"
 	on:submit|preventDefault={() => {
@@ -950,6 +964,21 @@
 						</button>
 					</div>
 				</div>
+				<div class="  mb-2.5 flex w-full justify-between">
+					<div class=" self-center text-xs font-medium">
+						{$i18n.t('Reindex Knowledge Base Vectors')}
+					</div>
+					<div class="flex items-center relative">
+						<button
+							class="text-xs"
+							on:click={() => {
+								showReindexConfirm = true;
+							}}
+						>
+							{$i18n.t('Reindex')}
+						</button>
+					</div>
+				</div>
 			</div>
 		</div>
 	</div>

+ 2 - 0
src/lib/i18n/locales/ar-BH/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "رفض عندما لا ينبغي أن يكون",
 	"Regenerate": "تجديد",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "ملاحظات الإصدار",
 	"Relevance": "",
 	"Remove": "إزالة",

+ 2 - 0
src/lib/i18n/locales/ar/translation.json

@@ -878,6 +878,8 @@
 	"References from": "مراجع من",
 	"Refused when it shouldn't have": "رفض عندما لا ينبغي أن يكون",
 	"Regenerate": "تجديد",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "ملاحظات الإصدار",
 	"Relevance": "الصلة",
 	"Remove": "إزالة",

+ 2 - 0
src/lib/i18n/locales/bg-BG/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Препратки от",
 	"Refused when it shouldn't have": "Отказано, когато не трябва да бъде",
 	"Regenerate": "Регенериране",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Бележки по изданието",
 	"Relevance": "Релевантност",
 	"Remove": "Изтриване",

+ 2 - 0
src/lib/i18n/locales/bn-BD/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "যদি উপযুক্ত নয়, তবে রেজিগেনেট করা হচ্ছে",
 	"Regenerate": "রেজিগেনেট করুন",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "রিলিজ নোটসমূহ",
 	"Relevance": "",
 	"Remove": "রিমুভ করুন",

+ 2 - 0
src/lib/i18n/locales/bo-TB/translation.json

@@ -878,6 +878,8 @@
 	"References from": "ནས་ལུང་འདྲེན།",
 	"Refused when it shouldn't have": "མི་དགོས་དུས་ཁས་མ་བླངས།",
 	"Regenerate": "བསྐྱར་བཟོ།",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "འགྲེམས་སྤེལ་མཆན་བུ།",
 	"Relevance": "འབྲེལ་ཡོད་རང་བཞིན།",
 	"Remove": "འདོར་བ།",

+ 2 - 0
src/lib/i18n/locales/ca-ES/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referències de",
 	"Refused when it shouldn't have": "Refusat quan no hauria d'haver estat",
 	"Regenerate": "Regenerar",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Notes de la versió",
 	"Relevance": "Rellevància",
 	"Remove": "Eliminar",

+ 2 - 0
src/lib/i18n/locales/ceb-PH/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "",
 	"Regenerate": "",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Release Notes",
 	"Relevance": "",
 	"Remove": "",

+ 2 - 0
src/lib/i18n/locales/cs-CZ/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Reference z",
 	"Refused when it shouldn't have": "Odmítnuto, když nemělo být.",
 	"Regenerate": "Regenerovat",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Záznamy o vydání",
 	"Relevance": "Relevance",
 	"Remove": "Odebrat",

+ 2 - 0
src/lib/i18n/locales/da-DK/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Afvist, når den ikke burde have været det",
 	"Regenerate": "Regenerer",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Udgivelsesnoter",
 	"Relevance": "",
 	"Remove": "Fjern",

+ 2 - 0
src/lib/i18n/locales/de-DE/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referenzen aus",
 	"Refused when it shouldn't have": "Abgelehnt, obwohl es nicht hätte abgelehnt werden sollen",
 	"Regenerate": "Neu generieren",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Veröffentlichungshinweise",
 	"Relevance": "Relevanz",
 	"Remove": "Entfernen",

+ 2 - 0
src/lib/i18n/locales/dg-DG/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "",
 	"Regenerate": "",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Release Borks",
 	"Relevance": "",
 	"Remove": "",

+ 2 - 0
src/lib/i18n/locales/el-GR/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Αναφορές από",
 	"Refused when it shouldn't have": "Αρνήθηκε όταν δεν έπρεπε",
 	"Regenerate": "Αναγεννήστε",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Σημειώσεις Έκδοσης",
 	"Relevance": "Σχετικότητα",
 	"Remove": "Αφαίρεση",

+ 2 - 0
src/lib/i18n/locales/en-GB/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "",
 	"Regenerate": "",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "",
 	"Relevance": "",
 	"Remove": "",

+ 2 - 0
src/lib/i18n/locales/en-US/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "",
 	"Regenerate": "",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "",
 	"Relevance": "",
 	"Remove": "",

+ 2 - 0
src/lib/i18n/locales/es-ES/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referencias desde",
 	"Refused when it shouldn't have": "Rechazado cuando no debería haberlo hecho",
 	"Regenerate": "Regenerar",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Notas de la Versión",
 	"Relevance": "Relevancia",
 	"Remove": "Eliminar",

+ 2 - 0
src/lib/i18n/locales/et-EE/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Viited allikast",
 	"Refused when it shouldn't have": "Keeldus, kui ei oleks pidanud",
 	"Regenerate": "Regenereeri",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Väljalaskemärkmed",
 	"Relevance": "Asjakohasus",
 	"Remove": "Eemalda",

+ 2 - 0
src/lib/i18n/locales/eu-ES/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Erreferentziak hemendik",
 	"Refused when it shouldn't have": "Ukatu duenean ukatu behar ez zuenean",
 	"Regenerate": "Bersortu",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Bertsio oharrak",
 	"Relevance": "Garrantzia",
 	"Remove": "Kendu",

+ 2 - 0
src/lib/i18n/locales/fa-IR/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "رد شده زمانی که باید نباشد",
 	"Regenerate": "ری\u200cسازی",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "یادداشت\u200cهای انتشار",
 	"Relevance": "ارتباط",
 	"Remove": "حذف",

+ 2 - 0
src/lib/i18n/locales/fi-FI/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Viitteet lähteistä",
 	"Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt",
 	"Regenerate": "Uudelleentuota",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Julkaisutiedot",
 	"Relevance": "Relevanssi",
 	"Remove": "Poista",

+ 2 - 0
src/lib/i18n/locales/fr-CA/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Refusé alors qu'il n'aurait pas dû l'être",
 	"Regenerate": "Regénérer",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Notes de publication",
 	"Relevance": "",
 	"Remove": "Retirer",

+ 2 - 0
src/lib/i18n/locales/fr-FR/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Références de",
 	"Refused when it shouldn't have": "Refusé alors qu'il n'aurait pas dû l'être",
 	"Regenerate": "Regénérer",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Notes de mise à jour",
 	"Relevance": "Pertinence",
 	"Remove": "Retirer",

+ 2 - 0
src/lib/i18n/locales/he-IL/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "נדחה כאשר לא היה צריך",
 	"Regenerate": "הפק מחדש",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "הערות שחרור",
 	"Relevance": "",
 	"Remove": "הסר",

+ 2 - 0
src/lib/i18n/locales/hi-IN/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "जब ऐसा नहीं होना चाहिए था तो मना कर दिया",
 	"Regenerate": "पुनः जेनरेट",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "रिलीज नोट्स",
 	"Relevance": "",
 	"Remove": "हटा दें",

+ 2 - 0
src/lib/i18n/locales/hr-HR/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Odbijen kada nije trebao biti",
 	"Regenerate": "Regeneriraj",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Bilješke o izdanju",
 	"Relevance": "",
 	"Remove": "Ukloni",

+ 2 - 0
src/lib/i18n/locales/hu-HU/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Hivatkozások innen",
 	"Refused when it shouldn't have": "Elutasítva, amikor nem kellett volna",
 	"Regenerate": "Újragenerálás",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Kiadási jegyzetek",
 	"Relevance": "Relevancia",
 	"Remove": "Eltávolítás",

+ 2 - 0
src/lib/i18n/locales/id-ID/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Menolak ketika seharusnya tidak",
 	"Regenerate": "Regenerasi",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Catatan Rilis",
 	"Relevance": "",
 	"Remove": "Hapus",

+ 2 - 0
src/lib/i18n/locales/ie-GA/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Tagairtí ó",
 	"Refused when it shouldn't have": "Diúltaíodh nuair nár chóir dó",
 	"Regenerate": "Athghiniúint",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Nótaí Scaoilte",
 	"Relevance": "Ábharthacht",
 	"Remove": "Bain",

+ 2 - 0
src/lib/i18n/locales/it-IT/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Rifiutato quando non avrebbe dovuto",
 	"Regenerate": "Rigenera",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Note di rilascio",
 	"Relevance": "",
 	"Remove": "Rimuovi",

+ 2 - 0
src/lib/i18n/locales/ja-JP/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "拒否すべきでないのに拒否した",
 	"Regenerate": "再生成",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "リリースノート",
 	"Relevance": "",
 	"Remove": "削除",

+ 2 - 0
src/lib/i18n/locales/ka-GE/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "უარა, როგორც უნდა იყოს",
 	"Regenerate": "თავიდან გენერაცია",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "გამოცემის შენიშვნები",
 	"Relevance": "შესაბამისობა",
 	"Remove": "წაშლა",

+ 2 - 0
src/lib/i18n/locales/ko-KR/translation.json

@@ -878,6 +878,8 @@
 	"References from": "출처",
 	"Refused when it shouldn't have": "허용되지 않았지만 허용되어야 합니다.",
 	"Regenerate": "재생성",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "릴리스 노트",
 	"Relevance": "관련도",
 	"Remove": "삭제",

+ 2 - 0
src/lib/i18n/locales/lt-LT/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Atmesta kai neturėtų būti atmesta",
 	"Regenerate": "Generuoti iš naujo",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Naujovės",
 	"Relevance": "",
 	"Remove": "Pašalinti",

+ 2 - 0
src/lib/i18n/locales/ms-MY/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Menolak dimana ia tidak sepatutnya",
 	"Regenerate": "Jana semula",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Nota Keluaran",
 	"Relevance": "",
 	"Remove": "Hapuskan",

+ 2 - 0
src/lib/i18n/locales/nb-NO/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Henviser fra",
 	"Refused when it shouldn't have": "Avvist når det ikke burde ha blitt det",
 	"Regenerate": "Generer på nytt",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Utgivelsesnotater",
 	"Relevance": "Relevans",
 	"Remove": "Fjern",

+ 2 - 0
src/lib/i18n/locales/nl-NL/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referenties van",
 	"Refused when it shouldn't have": "Geweigerd terwijl het niet had moeten",
 	"Regenerate": "Regenereren",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Release-opmerkingen",
 	"Relevance": "Relevantie",
 	"Remove": "Verwijderen",

+ 2 - 0
src/lib/i18n/locales/pa-IN/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "ਜਦੋਂ ਇਹ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਸੀ ਤਾਂ ਇਨਕਾਰ ਕੀਤਾ",
 	"Regenerate": "ਮੁੜ ਬਣਾਓ",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "ਰਿਲੀਜ਼ ਨੋਟਸ",
 	"Relevance": "",
 	"Remove": "ਹਟਾਓ",

+ 2 - 0
src/lib/i18n/locales/pl-PL/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Odniesienia do",
 	"Refused when it shouldn't have": "Odmówił, gdy nie powinien",
 	"Regenerate": "Wygeneruj ponownie",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Notatki do wydania",
 	"Relevance": "Trafność",
 	"Remove": "Usuń",

+ 2 - 0
src/lib/i18n/locales/pt-BR/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referências de",
 	"Refused when it shouldn't have": "Recusado quando não deveria",
 	"Regenerate": "Gerar novamente",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Notas de Lançamento",
 	"Relevance": "Relevância",
 	"Remove": "Remover",

+ 2 - 0
src/lib/i18n/locales/pt-PT/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Recusado quando não deveria",
 	"Regenerate": "Regenerar",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Notas de Lançamento",
 	"Relevance": "",
 	"Remove": "Remover",

+ 2 - 0
src/lib/i18n/locales/ro-RO/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referințe din",
 	"Refused when it shouldn't have": "Refuzat când nu ar fi trebuit",
 	"Regenerate": "Regenerare",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Note de Lansare",
 	"Relevance": "Relevanță",
 	"Remove": "Înlătură",

+ 2 - 0
src/lib/i18n/locales/ru-RU/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Отсылки к",
 	"Refused when it shouldn't have": "Отказано в доступе, когда это не должно было произойти",
 	"Regenerate": "Перегенерировать",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Примечания к выпуску",
 	"Relevance": "Актуальность",
 	"Remove": "Удалить",

+ 2 - 0
src/lib/i18n/locales/sk-SK/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referencie z",
 	"Refused when it shouldn't have": "Odmietnuté, keď nemalo byť.",
 	"Regenerate": "Regenerovať",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Záznamy o vydaní",
 	"Relevance": "Relevancia",
 	"Remove": "Odstrániť",

+ 2 - 0
src/lib/i18n/locales/sr-RS/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Референце од",
 	"Refused when it shouldn't have": "Одбијено када није требало",
 	"Regenerate": "Поново створи",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Напомене о издању",
 	"Relevance": "Примењивост",
 	"Remove": "Уклони",

+ 2 - 0
src/lib/i18n/locales/sv-SE/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "Avvisades när det inte borde ha gjort det",
 	"Regenerate": "Regenerera",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Versionsinformation",
 	"Relevance": "",
 	"Remove": "Ta bort",

+ 2 - 0
src/lib/i18n/locales/th-TH/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "ปฏิเสธเมื่อไม่ควรทำ",
 	"Regenerate": "สร้างใหม่",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "บันทึกรุ่น",
 	"Relevance": "",
 	"Remove": "ลบ",

+ 2 - 0
src/lib/i18n/locales/tk-TW/translation.json

@@ -878,6 +878,8 @@
 	"References from": "",
 	"Refused when it shouldn't have": "",
 	"Regenerate": "",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "",
 	"Relevance": "",
 	"Remove": "",

+ 2 - 0
src/lib/i18n/locales/tr-TR/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Referanslar arasından",
 	"Refused when it shouldn't have": "Reddedilmemesi gerekirken reddedildi",
 	"Regenerate": "Tekrar Oluştur",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Sürüm Notları",
 	"Relevance": "İlgili",
 	"Remove": "Kaldır",

+ 2 - 0
src/lib/i18n/locales/uk-UA/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Посилання з",
 	"Refused when it shouldn't have": "Відмовив, коли не мав би",
 	"Regenerate": "Регенерувати",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Нотатки до випуску",
 	"Relevance": "Актуальність",
 	"Remove": "Видалити",

+ 2 - 0
src/lib/i18n/locales/ur-PK/translation.json

@@ -878,6 +878,8 @@
 	"References from": "سے حوالہ جات",
 	"Refused when it shouldn't have": "جب انکار نہیں ہونا چاہیے تھا، انکار کر دیا",
 	"Regenerate": "دوبارہ تخلیق کریں",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "ریلیز نوٹس",
 	"Relevance": "موزونیت",
 	"Remove": "ہٹا دیں",

+ 2 - 0
src/lib/i18n/locales/vi-VN/translation.json

@@ -878,6 +878,8 @@
 	"References from": "Tham khảo từ",
 	"Refused when it shouldn't have": "Từ chối trả lời mà nhẽ không nên làm vậy",
 	"Regenerate": "Tạo sinh lại câu trả lời",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "Mô tả những cập nhật mới",
 	"Relevance": "Mức độ liên quan",
 	"Remove": "Xóa",

+ 2 - 0
src/lib/i18n/locales/zh-CN/translation.json

@@ -878,6 +878,8 @@
 	"References from": "来自",
 	"Refused when it shouldn't have": "无理拒绝",
 	"Regenerate": "重新生成",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "更新日志",
 	"Relevance": "相关性",
 	"Remove": "移除",

+ 2 - 0
src/lib/i18n/locales/zh-TW/translation.json

@@ -878,6 +878,8 @@
 	"References from": "引用來源",
 	"Refused when it shouldn't have": "不應拒絕時拒絕了",
 	"Regenerate": "重新產生",
+	"Reindex": "",
+	"Reindex Knowledge Base Vectors": "",
 	"Release Notes": "釋出説明",
 	"Relevance": "相關性",
 	"Remove": "移除",