# main.py
from fastapi import FastAPI, HTTPException
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
from passy_client import passy
app = FastAPI(title="Passy FastAPI")
class ChatRequest(BaseModel):
message: str
model: str = "gpt-4o"
class ChatResponse(BaseModel):
reply: str
@app.post("/chat", response_model=ChatResponse)
async def chat(request: ChatRequest):
try:
completion = passy.chat.completions.create(
model=request.model,
messages=[{"role": "user", "content": request.message}],
)
return ChatResponse(reply=completion.choices[0].message.content)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/chat/stream")
async def chat_stream(request: ChatRequest):
async def generate():
stream = passy.chat.completions.create(
model=request.model,
messages=[{"role": "user", "content": request.message}],
stream=True,
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
yield content
return StreamingResponse(generate(), media_type="text/plain")
@app.get("/health")
async def health():
return {"status": "healthy"}