Spaces:
Runtime error
Runtime error
from fastapi import FastAPI, HTTPException, Response | |
from pydantic import BaseModel, Field | |
from typing import Optional | |
from elevenlabs import generate_speech | |
app = FastAPI() | |
VOICE_MAPPING = { | |
"charlottee": "XB0fDUnXU5powFXDhCwa", | |
"daniel": "onwK4e9ZLuTAKqWW03F9", | |
"callum": "N2lVS1w4EtoT3dr4eOWO", | |
"charlie": "IKne3meq5aSn9XLyUdCD", | |
"clyde": "2EiwWnXFnvU5JabPnv8n", | |
"dave": "CYw3kZ02Hs0563khs1Fj", | |
"emily": "LcfcDJNUP1GQjkzn1xUU", | |
"ethan": "g5CIjZEefAph4nQFvHAz", | |
"fin": "D38z5RcWu1voky8WS1ja", | |
"freya": "jsCqWAovK2LkecY7zXl4", | |
"gigi": "jBpfuIE2acCO8z3wKNLl", | |
"giovanni": "zcAOhNBS3c14rBihAFp1", | |
"glinda": "z9fAnlkpzviPz146aGWa", | |
"grace": "oWAxZDx7w5VEj9dCyTzz", | |
"harry": "SOYHLrjzK2X1ezoPC6cr", | |
"james": "ZQe5CZNOzWyzPSCn5a3c", | |
"jeremy": "bVMeCyTHy58xNoL34h3p" | |
} | |
class SpeechRequest(BaseModel): | |
model: Optional[str] = Field(default="eleven_multilingual_v2") | |
input: str = Field(..., max_length=500) | |
voice: str | |
async def create_speech(request: SpeechRequest): | |
try: | |
result = generate_speech( | |
model=request.model, | |
voice=request.voice, | |
input_text=request.input | |
) | |
if isinstance(result, list): | |
raise HTTPException(status_code=result[0], detail=result[1]) | |
return Response(content=result, media_type="audio/mpeg") | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def get_voices(): | |
return {"voices": list(VOICE_MAPPING.keys())} | |
async def root(): | |
return { | |
"message": "Welcome to the Elevenlabs Text-to-Speech API", | |
"usage": "Send a POST or GET request to /v1/audio/speech with the following JSON body: {'model': 'eleven_multilingual_v2', 'input': 'Your text here', 'voice': 'voice_name'}", | |
"openai_compatibility": "This API is designed to be compatible with OpenAI's text-to-speech endpoint structure.", | |
"sample_url": "https://devsdocode-elevenlabs.hf.space/v1/audio/speech?model=eleven_multilingual_v2&input=Hello+world&voice=charlottee", | |
"character_limit": "The API supports up to 500 characters at a time in the input text parameter.", | |
"available_voices": "To get a list of available voices, send a POST or GET request to /v1/voices" | |
} | |
if __name__ == "__main__": | |
import uvicorn | |
uvicorn.run(app, host="0.0.0.0", port=7860) |