openpdf-backend / app /api /queries.py
zinoubm's picture
initial commit
66340f1
raw
history blame
2.24 kB
from typing import Any
from fastapi import APIRouter, Depends, HTTPException
from starlette.responses import Response
import requests
from app.deps.users import current_user
from app.models.user import User
from app.vectorstore.qdrant import qdrant_manager
from app.openai.base import openai_manager
from app.openai.core import ask, filter, summarize
from pydantic import BaseModel
class QueryRequest(BaseModel):
query: str
document_id: int
class QueryResponse(BaseModel):
answer: str
document_id: int
router = APIRouter(prefix="/queries")
@router.post("/")
async def query(
query_request: QueryRequest,
response: Response,
user: User = Depends(current_user),
) -> QueryResponse:
# add check that this user actually owns this document
query_vector = openai_manager.get_embedding(query_request.query)
# print(">>>>>>>>>>>>")
# print("query vector")
# print(query_vector)
# print(">>>>>>>>>>>>>>>")
# print("document_id: ", query_request.document_id)
# print("--------------")
# print(">>>>>>>>>>>>")
# print("user_id")
# print(user.id.hex)
points = qdrant_manager.search_point(
query_vector=query_vector,
user_id=str(user.id.hex),
document_id=int(query_request.document_id),
limit=1000,
)
# print(">>>>>>>>>>>>")
# print("points")
# print(points)
context = "\n\n\n".join([point.payload["chunk"] for point in points])
# print(">>>>>>>>>>>>")
# print("context")
# print(context)
# filter_response = filter(context, query_request.query, openai_manager)
# print(">>>>>>>>>>>>>>>>")
# print("filter resopnse")
# print(filter_response)
# print("----------------")
# remove later
filter_response = True
if filter_response:
answer = ask(
context,
query_request.query,
openai_manager,
)
query_response = QueryResponse(
answer=answer, document_id=query_request.document_id
)
else:
query_response = QueryResponse(
answer="Sorry, Your question is out of Context!",
document_id=query_request.document_id,
)
return query_response