from fastapi import FastAPI, Form from fastapi.responses import HTMLResponse import time from ingest import ingest from query import retrieve, rerank, answer app = FastAPI() @app.get("/", response_class=HTMLResponse) def home(): return """ Mini RAG App

Mini RAG Demo

1. Upload / Paste Text


2. Ask Question


""" # Upload endpoint @app.post("/upload") def upload(text: str = Form(...)): ingest(text) return {"status": "success"} # Ask endpoint @app.post("/ask", response_class=HTMLResponse) def ask(question: str = Form(...)): start_time = time.time() docs = retrieve(question) reranked_docs = rerank(question, docs) if not reranked_docs: return "

No relevant context found.

Back" context_text = "\n\n".join([d["text"] for d in reranked_docs]) ans = answer(question, context_text) elapsed = round(time.time() - start_time, 2) html = f"""

Answer

{ans}

Sources

""" for i, d in enumerate(reranked_docs): html += f"""
[{i+1}] {d['metadata'].get('source', 'unknown')} | position {d['metadata'].get('position')}
""" html += f"""

Time taken: {elapsed} seconds

Ask another question """ return html if __name__=="__main__": import uvicorn uvicorn.run("app:app", host="0.0.0.0", port=7860)