mirxakamran893's picture
Update app.py
b7552f5 verified
raw
history blame
2.41 kB
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import gradio as gr
import os
import json
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
import requests
import nest_asyncio
import uvicorn
# βœ… Load RAG-related files
with open("texts.json", "r", encoding="utf-8") as f:
texts = json.load(f)
index = faiss.read_index("faiss_index.bin")
embed_model = SentenceTransformer("all-MiniLM-L6-v2")
API_KEY = os.environ.get("OPENROUTER_API_KEY")
MODEL = "qwen/qwen-2.5-coder-32b-instruct:free"
# βœ… FastAPI app
app = FastAPI()
# βœ… Context Retriever
def get_context(query, top_k=5):
query_vec = embed_model.encode([query])
D, I = index.search(np.array(query_vec), top_k)
return "\n".join([texts[i] for i in I[0]])
# βœ… Chat Function
def chat_fn(message, history):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
context = get_context(message)
messages = [
{"role": "system", "content": "You are a helpful assistant. Use the following context to answer: " + context}
]
for user, assistant in history:
messages.append({"role": "user", "content": user})
messages.append({"role": "assistant", "content": assistant})
messages.append({"role": "user", "content": message})
payload = {"model": MODEL, "messages": messages}
try:
response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=payload)
response.raise_for_status()
reply = response.json()["choices"][0]["message"]["content"]
except Exception as e:
reply = f"❌ Error: {e}"
return reply
# βœ… FastAPI POST endpoint
@app.post("/chat")
async def chat_api(request: Request):
body = await request.json()
message = body.get("message")
history = body.get("history", [])
response = chat_fn(message, history)
return JSONResponse(content={"response": response})
# βœ… Gradio Interface
demo = gr.ChatInterface(
fn=chat_fn,
title="CODEX MIRXA KAMRAN",
description="Chat with AI MODEL trained by Mirxa Kamran",
theme="soft"
)
# βœ… Mount Gradio at root
app = gr.mount_gradio_app(app, demo, path="/")
# βœ… For local dev (optional on Hugging Face)
if __name__ == "__main__":
nest_asyncio.apply()
uvicorn.run(app, host="0.0.0.0", port=7860)