fastapi-chat2 / main.py
deepak191z's picture
Update main.py
a45ae1a verified
raw
history blame
1.68 kB
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from duckai import DuckAI
from g4f.client import Client
app = FastAPI()
# Configure CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allow_headers=["*"],
)
class ChatQuery(BaseModel):
query: str
@app.get("/chat/")
async def chat(query: str):
if not query:
raise HTTPException(status_code=400, detail="Query parameter is required")
client = Client()
duck = DuckAI() # Initialize DuckAI here
try:
results = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": query}],
web_search=False
)
return {"results": results}
except Exception as e1:
print(f"Primary model (gpt-4o-mini) failed: {e1}")
try:
results = duck.chat(query, model='claude-3-haiku')
return {"results": results}
except Exception as e2:
print(f"Fallback model (claude-3-haiku) also failed: {e2}")
raise HTTPException(
status_code=500,
detail={
"error": "Both models failed",
"primary_error": str(e1),
"fallback_error": str(e2)
}
)
@app.get("/health")
@app.get("/")
async def health_check():
return {"status": "healthy"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860, log_level="info", reload=True)