Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,10 @@ class QueryMultipleBody(BaseModel):
query: str
file_ids: List[str]
k: int = 4


class QueryMultipleDocs(BaseModel):
query: str
docs: List[str]
config: dict
k: int = 4
40 changes: 40 additions & 0 deletions app/routes/document_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import aiofiles.os
from shutil import copyfileobj
from typing import List, Iterable
from rerankers import Reranker, Document as ReRankDocument
from fastapi import (
APIRouter,
Request,
Expand All @@ -29,6 +30,7 @@
QueryRequestBody,
DocumentResponse,
QueryMultipleBody,
QueryMultipleDocs,
)
from app.services.vector_store.async_pg_vector import AsyncPgVector
from app.utils.document_loader import (
Expand Down Expand Up @@ -702,6 +704,44 @@ async def query_embeddings_by_file_ids(request: Request, body: QueryMultipleBody
)
raise HTTPException(status_code=500, detail=str(e))

@router.post("/rerank")
async def rerank_documents_by_query(request: Request, body: QueryMultipleDocs):
try:
rk = Reranker(
body.config.get("model_name", "flashrank"),
model_type=body.config.get("model_type"),
lang=body.config.get("lang"),
api_provider=body.config.get("api_provider"),
api_key=body.config.get("api_key"),
)

docs = []
for i, d in enumerate(body.docs):
if isinstance(d, str):
docs.append(ReRankDocument(text=d, doc_id=i))
else:
docs.append(
ReRankDocument(
text=d.get("text", ""),
doc_id=d.get("doc_id", i),
metadata=d.get("metadata", {}) or {},
)
)

top_k = body.k

results = rk.rank(query=body.query, docs=docs)
items = results.top_k(top_k) if top_k else results

return [[getattr(r.document, "text", None), r.score] for r in items]
except Exception as e:
logger.error(
"Error in reranking documents | Query: %s | Error: %s | Traceback: %s",
body.query,
str(e),
traceback.format_exc(),
)
raise HTTPException(status_code=500, detail=str(e))

@router.post("/text")
async def extract_text_from_file(
Expand Down
2 changes: 2 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ services:
- DB_PORT=5432
ports:
- "8000:8000"
runtime: nvidia
volumes:
- ./uploads:/app/uploads
- ~/.cache/huggingface:/root/.cache/huggingface:rw
depends_on:
- db
env_file:
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,5 @@ python-magic==0.4.27
python-pptx==1.0.2
xlrd==2.0.2
pydantic==2.9.2
rerankers[transformers]==0.6.0
chardet==5.2.0