import base64 import uvicorn from fastapi import FastAPI, WebSocket from fastapi.responses import HTMLResponse from voice_agent import CrewVoiceAgent app = FastAPI() agent = CrewVoiceAgent() @app.get("/") async def home(): return HTMLResponse(""" Gemini CrewAI Voice Agent

šŸŽ¤ Gemini CrewAI Voice Agent

Status: Idle

""") # ------------------------------------------------------- # BACKEND: WEBSOCKET AUDIO ENDPOINT # ------------------------------------------------------- @app.websocket("/ws") async def websocket_endpoint(ws: WebSocket): await ws.accept() while True: try: # receive binary audio audio_bytes = await ws.receive_bytes() # send audio to Gemini voice agent reply_audio = await agent.handle_audio(audio_bytes) # if Gemini returned audio, send it to browser if reply_audio: b64 = base64.b64encode(reply_audio).decode() await ws.send_text(b64) except Exception as e: print("WebSocket error:", e) break if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=7860)