askBot / app.py
Murali Chandran
hugging face implementation CPU/gguf
9dfc96d
Raw History Blame Contribute Delete
1.69 kB
from fastapi import FastAPI
from fastapi.responses import FileResponse
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
import os
# Import our custom modules
from schemas import BotRequest
from llm_cpu import load_llm, generate_answer
from rag import initialize_vector_store, retrieve_context
app = FastAPI(title="AskJulia-Modular-v1")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
# 1. Initialize Systems on Startup
llm = load_llm()
faiss_index = initialize_vector_store()
print("--- Server Ready ---")
# 2. Serve the HTML Interface
@app.get("/")
async def get_ui():
# Instead of a massive string in Python, we just serve the raw HTML file
return FileResponse("index.html")
# 3. Handle the Ask Julia API
@app.post("/explain")
async def explain(request: BotRequest):
clean_query = request.user_query.lower().replace("@bot", "").strip()
# Step A: Find relevant notes from the database
retrieved_context = retrieve_context(faiss_index, clean_query)
# Step B: Ask the LLM to generate the final answer
reply = generate_answer(llm, retrieved_context, clean_query)
return {"reply": reply}
if __name__ == "__main__":
# uvicorn.run(app, host="0.0.0.0", port=8000)
# Hugging Face provides the PORT environment variable.
# If it's not found (like when you run it locally), it defaults to 7860.
port = int(os.environ.get("PORT", 7860))
# "0.0.0.0" is critical. It tells the server to accept connections
# from outside the Docker container (which is how Hugging Face routes traffic).
uvicorn.run(app, host="0.0.0.0", port=port)