import os import gradio as gr import uvicorn from sound_generator import generate_sound, generate_music from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse, RedirectResponse, HTMLResponse from pydantic import BaseModel # Create the FastAPI app with custom docs URL app = FastAPI(docs_url="/api/docs") # Configuraci贸n de CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Define a Pydantic model to handle the input prompt class AudioRequest(BaseModel): prompt: str # Prueba para verificar si la API funciona - la dejamos por ahora para debugging @app.get("/status") def status(): return {"status": "API running", "version": "1.0"} @app.post("/generate-sound/") async def generate_sound_endpoint(request: AudioRequest): try: # Llamada a la funci贸n para generar el sonido audio_file_path = generate_sound(request.prompt) # Verifica si el archivo se ha generado correctamente if not os.path.exists(audio_file_path): raise HTTPException( status_code=404, detail="Archivo de audio no encontrado." ) # Regresar el archivo generado como una respuesta de descarga return FileResponse( audio_file_path, media_type="audio/wav", filename="generated_audio.wav" ) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/generate-music/") async def generate_music_endpoint(request: AudioRequest): try: # Call the synchronous generate_music function audio_file_path = generate_music(request.prompt) # Verifies if the file has been generated correctly if not os.path.exists(audio_file_path): raise HTTPException( status_code=404, detail="Archivo de audio no encontrado." ) # Return the generated file as a download response return FileResponse( audio_file_path, media_type="audio/wav", filename="generated_audio.wav" ) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # IMPORTANTE: Configurar Gradio con server_port y server_name expl铆citamente # para evitar problemas de puerto with gr.Blocks( theme=gr.themes.Default(), # Asegurar que se cargue el tema ) as demo: gr.Markdown("# 馃幍 API de Sonidos Generativos") gr.Markdown("Esta interfaz permite interactuar con la API de generaci贸n de sonidos.") with gr.Tab("Informaci贸n de la API"): gr.Markdown(""" ## Documentaci贸n completa Puedes acceder a la documentaci贸n detallada de la API en: - [Documentaci贸n Swagger](/api/docs) - [Documentaci贸n ReDoc](/api/redoc) ## Endpoints disponibles - `GET /api/health` - Verificar el estado del servicio - `POST /api/generate-sound` - Generar sonido a partir de descripci贸n - `POST /api/generate-music` - Generar m煤sica a partir de descripci贸n """) # Integrar FastAPI con Gradio def start_fastapi(): uvicorn.run(app, host="0.0.0.0", port=7860) # Agregar una interfaz m铆nima de Gradio para cumplir con los requisitos de Hugging Face with gr.Blocks() as demo: gr.Markdown("# API de Sonidos Generativos") gr.Markdown("Esta API usa FastAPI y est谩 desplegada en Hugging Face Spaces.") # Ejecutar FastAPI dentro de Gradio if __name__ == "__main__": import threading threading.Thread(target=start_fastapi).start() demo.launch(server_port=7861)