keepme-backend / src /services /_file_service.py
ramanjitsingh1368's picture
Add error handling to semantic_search method in FileService to give ai context
091afc0
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)