forked from open-webui/open-webui
		
	feat: full integration
This commit is contained in:
		
							parent
							
								
									28c1192ac0
								
							
						
					
					
						commit
						9634e2da3e
					
				
					 6 changed files with 116 additions and 25 deletions
				
			
		|  | @ -9,6 +9,7 @@ from fastapi import ( | |||
|     Form, | ||||
| ) | ||||
| from fastapi.middleware.cors import CORSMiddleware | ||||
| import os, shutil | ||||
| 
 | ||||
| from chromadb.utils import embedding_functions | ||||
| 
 | ||||
|  | @ -23,7 +24,7 @@ from typing import Optional | |||
| 
 | ||||
| import uuid | ||||
| 
 | ||||
| from config import EMBED_MODEL, CHROMA_CLIENT, CHUNK_SIZE, CHUNK_OVERLAP | ||||
| from config import UPLOAD_DIR, EMBED_MODEL, CHROMA_CLIENT, CHUNK_SIZE, CHUNK_OVERLAP | ||||
| from constants import ERROR_MESSAGES | ||||
| 
 | ||||
| EMBEDDING_FUNC = embedding_functions.SentenceTransformerEmbeddingFunction( | ||||
|  | @ -51,7 +52,7 @@ class StoreWebForm(CollectionNameForm): | |||
|     url: str | ||||
| 
 | ||||
| 
 | ||||
| def store_data_in_vector_db(data, collection_name): | ||||
| def store_data_in_vector_db(data, collection_name) -> bool: | ||||
|     text_splitter = RecursiveCharacterTextSplitter( | ||||
|         chunk_size=CHUNK_SIZE, chunk_overlap=CHUNK_OVERLAP | ||||
|     ) | ||||
|  | @ -60,13 +61,22 @@ def store_data_in_vector_db(data, collection_name): | |||
|     texts = [doc.page_content for doc in docs] | ||||
|     metadatas = [doc.metadata for doc in docs] | ||||
| 
 | ||||
|     collection = CHROMA_CLIENT.create_collection( | ||||
|         name=collection_name, embedding_function=EMBEDDING_FUNC | ||||
|     ) | ||||
|     try: | ||||
|         collection = CHROMA_CLIENT.create_collection( | ||||
|             name=collection_name, embedding_function=EMBEDDING_FUNC | ||||
|         ) | ||||
| 
 | ||||
|     collection.add( | ||||
|         documents=texts, metadatas=metadatas, ids=[str(uuid.uuid1()) for _ in texts] | ||||
|     ) | ||||
|         collection.add( | ||||
|             documents=texts, metadatas=metadatas, ids=[str(uuid.uuid1()) for _ in texts] | ||||
|         ) | ||||
|         return True | ||||
|     except Exception as e: | ||||
|         print(e) | ||||
|         print(e.__class__.__name__) | ||||
|         if e.__class__.__name__ == "UniqueConstraintError": | ||||
|             return True | ||||
| 
 | ||||
|         return False | ||||
| 
 | ||||
| 
 | ||||
| @app.get("/") | ||||
|  | @ -116,7 +126,7 @@ def store_doc(collection_name: str = Form(...), file: UploadFile = File(...)): | |||
| 
 | ||||
|     try: | ||||
|         filename = file.filename | ||||
|         file_path = f"./data/{filename}" | ||||
|         file_path = f"{UPLOAD_DIR}/{filename}" | ||||
|         contents = file.file.read() | ||||
|         with open(file_path, "wb") as f: | ||||
|             f.write(contents) | ||||
|  | @ -128,8 +138,15 @@ def store_doc(collection_name: str = Form(...), file: UploadFile = File(...)): | |||
|             loader = TextLoader(file_path) | ||||
| 
 | ||||
|         data = loader.load() | ||||
|         store_data_in_vector_db(data, collection_name) | ||||
|         return {"status": True, "collection_name": collection_name} | ||||
|         result = store_data_in_vector_db(data, collection_name) | ||||
| 
 | ||||
|         if result: | ||||
|             return {"status": True, "collection_name": collection_name} | ||||
|         else: | ||||
|             raise HTTPException( | ||||
|                 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | ||||
|                 detail=ERROR_MESSAGES.DEFAULT(), | ||||
|             ) | ||||
|     except Exception as e: | ||||
|         print(e) | ||||
|         raise HTTPException( | ||||
|  | @ -138,6 +155,27 @@ def store_doc(collection_name: str = Form(...), file: UploadFile = File(...)): | |||
|         ) | ||||
| 
 | ||||
| 
 | ||||
| @app.get("/reset/db") | ||||
| def reset_vector_db(): | ||||
|     CHROMA_CLIENT.reset() | ||||
| 
 | ||||
| 
 | ||||
| @app.get("/reset") | ||||
| def reset(): | ||||
|     folder = f"{UPLOAD_DIR}" | ||||
|     for filename in os.listdir(folder): | ||||
|         file_path = os.path.join(folder, filename) | ||||
|         try: | ||||
|             if os.path.isfile(file_path) or os.path.islink(file_path): | ||||
|                 os.unlink(file_path) | ||||
|             elif os.path.isdir(file_path): | ||||
|                 shutil.rmtree(file_path) | ||||
|         except Exception as e: | ||||
|             print("Failed to delete %s. Reason: %s" % (file_path, e)) | ||||
| 
 | ||||
|     try: | ||||
|         CHROMA_CLIENT.reset() | ||||
|     except Exception as e: | ||||
|         print(e) | ||||
| 
 | ||||
|     return {"status": True} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy J. Baek
						Timothy J. Baek