Spaces:
Build error
Build error
| from fastapi import FastAPI, HTTPException, Depends | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from pydantic import BaseModel | |
| from typing import List, Dict, Optional | |
| from supabase import create_client, Client | |
| import os | |
| from dotenv import load_dotenv | |
| from llm import LLMPipeline | |
| from chat import GeminiChat | |
| load_dotenv() | |
| app = FastAPI() | |
| # CORS middleware | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # In production, replace with your frontend URL | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Initialize Supabase client | |
| supabase_url = os.getenv("SUPABASE_URL") | |
| supabase_key = os.getenv("SUPABASE_SERVICE_KEY") | |
| if not supabase_url or not supabase_key: | |
| raise ValueError("Supabase environment variables not set") | |
| supabase: Client = create_client(supabase_url, supabase_key) | |
| # Initialize AI models | |
| llm = LLMPipeline() | |
| gemini = GeminiChat() | |
| class Message(BaseModel): | |
| role: str | |
| content: str | |
| class ChatRequest(BaseModel): | |
| messages: List[Message] | |
| use_gemini: bool = True | |
| temperature: float = 0.7 | |
| async def chat(request: ChatRequest): | |
| try: | |
| if request.use_gemini: | |
| # Use Gemini for interactive chat | |
| response = await gemini.chat( | |
| [{"role": m.role, "content": m.content} for m in request.messages], | |
| temperature=request.temperature | |
| ) | |
| else: | |
| # Use local LLM for specific tasks | |
| last_message = request.messages[-1].content | |
| response = await llm.generate(last_message) | |
| # Store chat history in Supabase | |
| supabase.table("chat_history").insert({ | |
| "messages": [m.dict() for m in request.messages], | |
| "response": response, | |
| "model": "gemini" if request.use_gemini else "local" | |
| }).execute() | |
| return {"response": response} | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |