CoolFace
Apppublic

uxoxo/eb2ab

sourceHugging Faceapache-2.0updated 11mo agoView on Hugging Face
0likes
api_server.py120 linesDownload Raw Back to root
1"""2FastAPI server entry point for TTS REST API.3 4This server runs alongside the Gradio UI (app.py) to provide5REST API access to the TTS functionality.6 7Usage:8    python api_server.py [--host HOST] [--port PORT] [--help]9 10Environment Variables:11    API_PORT: Server port (default: 8000)12    API_HOST: Server host (default: 0.0.0.0)13    API_ENABLED: Enable/disable API (default: true)14    API_KEYS: Comma-separated list of API keys15    API_KEY_1, API_KEY_2, ...: Individual API keys16    CORS_ORIGINS: Comma-separated list of allowed CORS origins17    MAX_REQUESTS_PER_HOUR: Rate limit per API key (default: 100)18    AUDIO_RETENTION_HOURS: File retention period (default: 24)19    API_OUTPUT_DIR: Output directory for audio files (default: /app/audiobooks/api)20    CLEANUP_INTERVAL_SECONDS: Cleanup interval (default: 3600)21"""22 23import argparse24import os25import sys26import uvicorn27 28 29def main():30    """Main entry point for API server."""31    # Check if API is enabled32    api_enabled = os.environ.get("API_ENABLED", "true").lower() in ["true", "1", "yes"]33    if not api_enabled:34        print("API is disabled (API_ENABLED=false)")35        sys.exit(0)36 37    # Parse arguments38    parser = argparse.ArgumentParser(39        description="ebook2audiobook TTS REST API Server",40        formatter_class=argparse.RawTextHelpFormatter41    )42    parser.add_argument(43        "--host",44        type=str,45        default=os.environ.get("API_HOST", "0.0.0.0"),46        help="Server host (default: 0.0.0.0)"47    )48    parser.add_argument(49        "--port",50        type=int,51        default=int(os.environ.get("API_PORT", "8000")),52        help="Server port (default: 8000)"53    )54    parser.add_argument(55        "--reload",56        action="store_true",57        help="Enable auto-reload for development"58    )59    parser.add_argument(60        "--workers",61        type=int,62        default=1,63        help="Number of worker processes (default: 1)"64    )65 66    args = parser.parse_args()67 68    # Print startup information69    print(f"""70================================================================71           ebook2audiobook TTS REST API Server72================================================================73 74Server Configuration:75  Host: {args.host}76  Port: {args.port}77  Workers: {args.workers}78  Reload: {args.reload}79 80Environment Configuration:81  API Keys: {"Configured" if os.environ.get("API_KEYS") or os.environ.get("API_KEY_1") else "NOT CONFIGURED (WARNING)"}82  CORS Origins: {os.environ.get("CORS_ORIGINS", "* (all origins)")}83  Rate Limit: {os.environ.get("MAX_REQUESTS_PER_HOUR", "100")} requests/hour84  File Retention: {os.environ.get("AUDIO_RETENTION_HOURS", "24")} hours85  Output Directory: {os.environ.get("API_OUTPUT_DIR", "/app/audiobooks/api")}86 87Documentation:88  OpenAPI: http://{args.host if args.host != '0.0.0.0' else 'localhost'}:{args.port}/api/v1/docs89  ReDoc: http://{args.host if args.host != '0.0.0.0' else 'localhost'}:{args.port}/api/v1/redoc90 91Starting server...92""")93 94    # Check for API keys warning95    if not (os.environ.get("API_KEYS") or os.environ.get("API_KEY_1")):96        print("WARNING: No API keys configured!")97        print("WARNING: The API will be publicly accessible without authentication.")98        print("WARNING: Set API_KEY_1, API_KEY_2, or API_KEYS environment variable.")99        print()100 101    # Run server102    try:103        uvicorn.run(104            "api.main:app",105            host=args.host,106            port=args.port,107            reload=args.reload,108            workers=args.workers if not args.reload else 1,109            log_level="info"110        )111    except KeyboardInterrupt:112        print("\nShutting down API server...")113    except Exception as e:114        print(f"Error starting server: {e}")115        sys.exit(1)116 117 118if __name__ == "__main__":119    main()120