Spaces:
Sleeping
Sleeping
File size: 3,766 Bytes
64fd9b7 78bd110 64fd9b7 a7ef914 78bd110 a7ef914 78bd110 a7ef914 78bd110 a7ef914 78bd110 a7ef914 78bd110 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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# app/api.py
from fastapi import FastAPI, UploadFile, File, Form
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from pydantic import BaseModel
from typing import List, Optional
from .rag_system import SimpleRAG, UPLOAD_DIR, synthesize_answer as summarize
app = FastAPI(title="RAG API", version="1.2.2")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
rag = SimpleRAG()
# --- Debug: translator test ---
@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(rag.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_out": out}
except Exception as e:
return JSONResponse(status_code=500, content={"ok": False, "error": str(e)})
# ... qalan endpointlər (health, upload_pdf, ask_question, get_history) buradan sonra gəlir ...
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)}"})
|