Spaces:
Runtime error
Runtime error
| from fastapi import UploadFile | |
| from src.utils import PineconeClient | |
| from src.models import File, VectorStoreRecordId | |
| from src.repositories import ( | |
| FileRepository, | |
| VectorStoreRecordIdRepository, | |
| UserRepository, | |
| ) | |
| class FileService: | |
| def __init__(self): | |
| self.pinecone_client = PineconeClient | |
| self.user_repository = UserRepository() | |
| self.file_repository = FileRepository() | |
| self.vector_store_record_id_repository = VectorStoreRecordIdRepository() | |
| async def __aenter__(self): | |
| return self | |
| async def __aexit__(self, *args): | |
| pass | |
| async def insert_file(self, file: UploadFile, user_id: str): | |
| try: | |
| user_object = await self.user_repository.get_by_id(user_id) | |
| metadata = [{"file_name": file.filename}] | |
| while content := await file.read(): | |
| async with self.pinecone_client() as client: | |
| ids = await client.insert_data( | |
| text=[content.decode()], metadata=metadata | |
| ) | |
| file_object = await self.file_repository.insert_one( | |
| File( | |
| user=user_object, | |
| file_name=file.filename, | |
| file_type=file.content_type, | |
| ) | |
| ) | |
| for id in ids: | |
| await self.vector_store_record_id_repository.insert_one( | |
| VectorStoreRecordId(file=file_object, record_id=id) | |
| ) | |
| return file_object | |
| finally: | |
| await file.close() | |
| async def semantic_search(self, query): | |
| try: | |
| async with self.pinecone_client() as client: | |
| return await client.similarity_search(query=query) | |
| except Exception as e: | |
| return str(e) | |