#!/usr/bin/env python3 """ π DroneAgent - HF Spaces Application FastAPI application for HuggingFace Spaces deployment """ import os import asyncio import uvicorn from pathlib import Path from fastapi import FastAPI, HTTPException, Request from fastapi.responses import HTMLResponse, FileResponse from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager # Import our DroneAgent modules from src.services.drone_agent import DroneAgent from src.core.websocket_server import start_websocket_server # Global drone agent instance drone_agent = None @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan manager.""" global drone_agent print("π Starting DroneAgent v3.0 for HF Spaces") print("π Initializing GPS coordinate systems...") print("π§ Loading AI knowledge base...") # Initialize DroneAgent first try: drone_agent = DroneAgent() print("β DroneAgent v3.0 initialized successfully") print("π§ Gemini 2.0 Flash AI Integration Ready") print("π‘ Real-Time Flight Management Ready") print("πΊοΈ 6-Decimal GPS Precision Ready") except Exception as e: print(f"β οΈ DroneAgent initialization warning: {e}") drone_agent = None # Start WebSocket server for real-time notifications print("π‘ Starting WebSocket notification server...") try: # Start WebSocket server in background asyncio.create_task(start_websocket_server()) print("β WebSocket server started successfully on port 8001") except Exception as e: print(f"β οΈ WebSocket server warning: {e}") # Create necessary directories Path("downloads").mkdir(exist_ok=True) Path("chat_testing").mkdir(exist_ok=True) print("π DroneAgent v3.0 fully operational!") print("π Ready to accept chat requests and mission planning") yield print("π Shutting down DroneAgent v3.0") # Initialize FastAPI with lifespan app = FastAPI( title="π DroneAgent", description="Professional AI-Powered Drone Mission Planner with Real-Time Flight Management", version="3.0.0", lifespan=lifespan ) # Add CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/", response_class=HTMLResponse) async def root(): """Serve the main DroneAgent interface.""" return """
Professional AI-Powered Drone Mission Planner
π Access Points:
Use the API endpoints directly: