Spaces:
Sleeping
Sleeping
File size: 3,509 Bytes
64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 a7ef914 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 ebbe4db 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc 64fd9b7 0d2dbdc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# app/api.py
from fastapi import FastAPI, UploadFile, File
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse, RedirectResponse
from pathlib import Path
import shutil
import traceback
# app/api.py (importların altından)
from fastapi.responses import JSONResponse
@app.get("/debug/translate")
def debug_translate():
try:
from transformers import pipeline
tr = pipeline("translation", model="Helsinki-NLP/opus-mt-az-en", cache_dir=str(CACHE_DIR), device=-1)
out = tr("Sənəd təmiri və quraşdırılması ilə bağlı işlər görülüb.", max_length=80)[0]["translation_text"]
return {"ok": True, "example_in": "Sənəd təmiri və quraşdırılması ilə bağlı işlər görülüb.", "example_out": out}
except Exception as e:
return JSONResponse(status_code=500, content={"ok": False, "error": str(e)})
from .rag_system import SimpleRAG, UPLOAD_DIR, synthesize_answer as summarize
from .schemas import AskRequest, AskResponse, UploadResponse, HistoryResponse, HistoryItem
from .store import add_history, get_history
from .utils import ensure_session, http400
app = FastAPI(title="RAG API", version="1.1.0")
# CORS (allow Streamlit or any origin; tighten later if you want)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # e.g., ["https://HamidOmarov-RAG-Dashboard.hf.space"]
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
rag = SimpleRAG()
@app.get("/")
def root():
# convenience: open docs instead of 404
return RedirectResponse(url="/docs")
@app.get("/health")
def health():
return {"status": "ok", "version": "1.1.0", "summarizer": "extractive_en"}
@app.post("/upload_pdf", response_model=UploadResponse)
async def upload_pdf(file: UploadFile = File(...)):
try:
if not file.filename.lower().endswith(".pdf"):
http400("Only PDF files are accepted.")
dest: Path = UPLOAD_DIR / file.filename
with dest.open("wb") as f:
shutil.copyfileobj(file.file, f)
chunks_added = rag.add_pdf(dest)
return UploadResponse(filename=file.filename, chunks_added=chunks_added)
except Exception as e:
traceback.print_exc()
return JSONResponse(status_code=500, content={"detail": f"Server error: {str(e)}"})
@app.post("/ask_question", response_model=AskResponse)
async def ask_question(payload: AskRequest):
try:
session_id = ensure_session(payload.session_id)
add_history(session_id, "user", payload.question)
results = rag.search(payload.question, k=payload.top_k)
contexts = [c for c, _ in results]
# Always use the English extractive summarizer
answer = summarize(payload.question, contexts)
add_history(session_id, "assistant", answer)
return AskResponse(answer=answer, contexts=contexts, session_id=session_id)
except Exception as e:
traceback.print_exc()
return JSONResponse(status_code=500, content={"detail": f"Server error: {str(e)}"})
@app.get("/get_history", response_model=HistoryResponse)
async def get_history_endpoint(session_id: str):
try:
hist_raw = get_history(session_id)
history = [HistoryItem(**h) for h in hist_raw]
return HistoryResponse(session_id=session_id, history=history)
except Exception as e:
traceback.print_exc()
return JSONResponse(status_code=500, content={"detail": f"Server error: {str(e)}"})
|