o
    y9j1                     @  sv   d Z ddlmZ ddlZddlZddlZddlmZ dZ	G dd de
Z			ddddZ		d d!ddZd"ddZdS )#u   ElevenLabs TTS — schlanker Wrapper über die HTTP-API (stdlib, kein SDK nötig).

Wird (a) für die Serbisch-Verifikation genutzt und (b) später für die echte
Sprachausgabe. Die Realtime-Conversational-AI (Agent/WebSocket) kommt separat.
    )annotationsN   )configzhttps://api.elevenlabs.io/v1c                      s   e Zd Zd fddZ  ZS )ElevenErrorstatusintbodystrc                   s0   || _ || _t d| d|d d   d S )NzElevenLabs HTTP z: i,  )r   r   super__init__)selfr   r   	__class__ 2/home/nk/hobo-godmode/plappi-mvp/backend/eleven.pyr      s   $zElevenError.__init__)r   r   r   r	   )__name__
__module____qualname__r   __classcell__r   r   r   r   r      s    r   mp3_44100_128textr	   voice_id
str | Nonemodeloutput_formatreturnbytesc           	   
   C  s  |pt j}|p	t j}t d| d| }t| |dd}tjj	||dd}|
dt j |
dd	 |
d
d z tjj|dd}| W  d   W S 1 sTw   Y  W dS  tjjyv } zt|j| dddd}~w tjjy } z	tdt|jdd}~ww )zRText -> MP3-Bytes. Wirft ElevenError mit Status (401=Key, 402/429=Guthaben/Quota).z/text-to-speech/z?output_format=)r   model_idutf-8POSTdatamethod
xi-api-keyContent-Typeapplication/jsonAccept
audio/mpeg<   timeoutNreplacer   )r   ELEVENLABS_VOICE_IDELEVENLABS_MODELAPIjsondumpsencodeurllibrequestRequest
add_headerELEVENLABS_API_KEYurlopenreaderror	HTTPErrorr   codedecodeURLErrorr	   reason)	r   r   r   r   urlpayloadreqrer   r   r   tts   s&   

(rD   ?duration_secondsfloat | Noneprompt_influencefloatc              
   C  s   t  d}| |d}|r||d< tjj|t| dd}|dtj	 |dd |d	d
 z tjj
|dd}| W  d   W S 1 sJw   Y  W dS  tjjyl } zt|j| dddd}~ww )uN   ElevenLabs Sound-Effects-API: Beschreibung -> MP3-Bytes (für Tiergeräusche).z/sound-generation)r   rH   rF   r   r    r#   r$   r%   r&   r'   Z   r)   Nr   r+   )r.   r2   r3   r4   r/   r0   r1   r5   r   r6   r7   r8   r9   r:   r   r;   r<   )r   rF   rH   r?   r@   rA   rB   rC   r   r   r   sound_effect,   s    

(rK   dictc               
   C  s   t jjt ddd} | dtj z#t jj| dd}t	|
 W  d    W S 1 s.w   Y  W d S  t jjyP } zt|j|
 ddd d }~ww )	Nz/voicesGET)r"   r#      r)   r   r+   )r2   r3   r4   r.   r5   r   r6   r7   r/   loadsr8   r9   r:   r   r;   r<   )rA   rB   rC   r   r   r   list_voices>   s   (rP   )NNr   )
r   r	   r   r   r   r   r   r	   r   r   )NrE   )r   r	   rF   rG   rH   rI   r   r   )r   rL   )__doc__
__future__r   r/   urllib.errorr2   urllib.request r   r.   RuntimeErrorr   rD   rK   rP   r   r   r   r   <module>   s    