Spaces:
Build error
Build error
| import asyncio | |
| import httpx | |
| import websockets | |
| import json | |
| import sys | |
| API_URL = "http://localhost:8001/api/v1" | |
| WS_URL = "ws://localhost:8001/api/v1" | |
| async def demo_generation(): | |
| print("π΅ AudioForge Real-Time Generation Demo π΅") | |
| print("------------------------------------------") | |
| # 1. Create Generation Request | |
| prompt = "A fast-paced techno track with a thumping bassline" | |
| print(f"\n[1] Sending POST request...") | |
| print(f" Prompt: '{prompt}'") | |
| async with httpx.AsyncClient() as client: | |
| try: | |
| response = await client.post( | |
| f"{API_URL}/generations/", | |
| json={"prompt": prompt, "duration": 5} # Short duration for demo | |
| ) | |
| response.raise_for_status() | |
| data = response.json() | |
| gen_id = data["id"] | |
| print(f" β Request Accepted! Generation ID: {gen_id}") | |
| except Exception as e: | |
| print(f" β Failed to create generation: {e}") | |
| return | |
| # 2. Connect to WebSocket | |
| print(f"\n[2] Connecting to WebSocket for updates...") | |
| ws_endpoint = f"{WS_URL}/ws/generations/{gen_id}" | |
| try: | |
| async with websockets.connect(ws_endpoint) as websocket: | |
| print(" β Connected! Waiting for real-time updates...\n") | |
| print(" [STATUS] [PROGRESS] [MESSAGE]") | |
| print(" -------------------------------------") | |
| async for message in websocket: | |
| data = json.loads(message) | |
| # Format output nicely | |
| status = data.get("status", "unknown").upper() | |
| progress = f"{data.get('progress', 0)}%" | |
| msg = data.get("message", "") | |
| print(f" {status:<13} {progress:<13} {msg}") | |
| if data.get("status") in ["completed", "failed"]: | |
| if data.get("status") == "completed": | |
| print(f"\n π Generation Complete! Audio URL: {data.get('audio_url')}") | |
| else: | |
| print(f"\n β Generation Failed: {data.get('error')}") | |
| break | |
| except Exception as e: | |
| print(f"\n β WebSocket Error: {e}") | |
| if __name__ == "__main__": | |
| try: | |
| asyncio.run(demo_generation()) | |
| except KeyboardInterrupt: | |
| print("\nDemo cancelled.") | |