Spaces:
Runtime error
Runtime error
| from typing import Any | |
| from fastapi import APIRouter, Depends, HTTPException, UploadFile, File | |
| from starlette.responses import Response | |
| from app.schemas.document import UpsertResponse | |
| from app.parser.parser import get_document_from_file | |
| from app.parser.chunk import chunk_text | |
| import requests | |
| from app.deps.users import current_user | |
| from app.models.user import User | |
| from app.parser.parser import get_document_from_file | |
| from sqlalchemy.ext.asyncio.session import AsyncSession | |
| from app.deps.db import get_async_session | |
| from app.models.document import Document | |
| from uuid import uuid4 | |
| from app.vectorstore.qdrant import QdrantManager | |
| from app.openai.base import OpenAiManager | |
| from sqlalchemy.future import select | |
| router = APIRouter(prefix="/documents") | |
| async def upsert_file( | |
| file: UploadFile = File(...), | |
| session: AsyncSession = Depends(get_async_session), | |
| user: User = Depends(current_user), | |
| ): | |
| document = await get_document_from_file(file) | |
| chunks = chunk_text(document.text, max_size=2000) | |
| db_document = Document(user_id=str(user.id).replace("-", ""), name=file.filename) | |
| session.add(db_document) | |
| await session.commit() | |
| openai_manager = OpenAiManager() | |
| ids = [uuid4().hex for chunk in chunks] | |
| payloads = [ | |
| { | |
| "user_id": str(user.id).replace("-", ""), | |
| "document_id": db_document.id, | |
| "chunk": chunk, | |
| } | |
| for chunk in chunks | |
| ] | |
| embeddings = openai_manager.get_embeddings(chunks) | |
| vector_manager = QdrantManager() | |
| response = vector_manager.upsert_points(ids, payloads, embeddings) | |
| return UpsertResponse(id=db_document.id) | |
| async def get_documents( | |
| session: AsyncSession = Depends(get_async_session), | |
| user: User = Depends(current_user), | |
| ): | |
| statement = select(Document).where( | |
| Document.user_id == str(user.id).replace("-", "") | |
| ) | |
| db_documents = await session.execute(statement) | |
| documents = [ | |
| {"id": document.id, "name": document.name} | |
| for document in db_documents.scalars().all() | |
| ] | |
| return {"documents": documents} | |