Spaces:
Running
Running
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 | |
from pydantic import BaseModel | |
# Create the FastAPI app | |
app = FastAPI() | |
# Configuración de CORS para permitir solicitudes desde cualquier origen | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=[ | |
"*" | |
], # Permitir todos los orígenes (puedes restringirlo a tus orígenes específicos) | |
allow_credentials=True, | |
allow_methods=["*"], # Permitir todos los métodos HTTP (GET, POST, OPTIONS, etc.) | |
allow_headers=["*"], # Permitir todos los encabezados | |
) | |
# Define a Pydantic model to handle the input prompt | |
class AudioRequest(BaseModel): | |
prompt: str | |
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)) | |
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)) | |
# Crear interfaz de Gradio separadamente | |
with gr.Blocks() as demo: | |
gr.Markdown("# API de Sonidos Generativos") | |
gr.Markdown("Bienvenido al servicio de generación de sonidos mediante IA.") | |
gr.Markdown( | |
"Esta API está disponible para uso a través de los siguientes endpoints:" | |
) | |
gr.Markdown("- Generar sonido: `/generate-sound/`") | |
gr.Markdown("- Generar música: `/generate-music/`") | |
gr.Markdown("- Documentación de la API: `/docs`") | |
# Montar Gradio en FastAPI - IMPORTANTE: esto debe hacerse antes de iniciar el servidor | |
app = gr.mount_gradio_app(app, demo, path="/") | |
if __name__ == "__main__": | |
uvicorn.run(app, host="0.0.0.0", port=7860) |