# app.py from fastapi import FastAPI from pydantic import BaseModel from fastapi.middleware.cors import CORSMiddleware from bot_instance import gemini_bot, llama_bot # singleton ErrorBot instance from typing import List, Optional,Any import os from dotenv import load_dotenv from util import ErrorBot app = FastAPI(title="ErrorBot API") # ✅ Allow all origins (adjust in production) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # ---------------- Request Models ---------------- class MessageItem(BaseModel): role: str # "user" or "bot" content: str class ChatRequest(BaseModel): message: str history: Optional[List[MessageItem]] = [] # optional conversation history lastContext: List[Any] = None # ---------------- Endpoints ---------------- @app.get("/") def root(): return {"status": "ok"} # @app.post("/chat") # def chat(request: ChatRequest): # """ # Main chat endpoint: # - Accepts a message and optional conversation history # - Uses ErrorBot with RAG + LLM # """ # history_list = [ # {"role": msg.role, "content": msg.content} for msg in request.history # ] # # Ask bot with history # answer = bot.ask(request.message, history=history_list) # return {"reply": answer} load_dotenv() GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY") GROQ_API_KEY = os.getenv("GROQ_API_KEY") EMBEDDING_MODEL = "BAAI/bge-base-en-v1.5" @app.post("/gemini/chat") def gemini_chat(request: ChatRequest): history_list = [{"role": msg.role, "content": msg.content} for msg in request.history] gemini_bot = ErrorBot( embedding_model_name=EMBEDDING_MODEL, llm_model_name="gemini-2.5-flash", google_api_key=GOOGLE_API_KEY, llm_provider="gemini", last_context = request.lastContext ) print("In App.py") print(request.lastContext) answer, last_context = gemini_bot.ask(request.message, history=history_list) print(answer) print(last_context) return {"reply": answer, "last_context": last_context} @app.post("/llama/chat") def llama_chat(request: ChatRequest): history_list = [{"role": msg.role, "content": msg.content} for msg in request.history] llama_bot = ErrorBot( embedding_model_name=EMBEDDING_MODEL, llm_model_name="llama-3.3-70b-versatile", groq_api_key=GROQ_API_KEY, llm_provider="groq", last_context = request.lastContext ) answer, last_context = llama_bot.ask(request.message, history=history_list) print(answer) print(last_context) return {"reply": answer, "last_context": last_context}