o
    9jR                  	   @  s   d Z ddlmZ ddlZddlZddlZddlmZm	Z	 dZ
dZdd	d
dddddddddddddddddddddgZdZd(ddZd)dd Zd*d"d#Zd(d$d%Zd+d&d'ZdS ),u   Stimmen-Auswahl: mehrere Kandidaten + Hörproben, aktive Stimme setzen.

Der Nutzer hört Proben und wählt -> setzt die Stimme im ElevenLabs-Agenten.
    )annotationsN   )configeleveneleven_multilingual_v2u   Ćao! Ja sam Plappi. Hajde da učimo srpski! Vidiš? Pas, mačka, ptica, žaba. Ponovi za mnom: mačka! Und auf Deutsch sagen wir Katze.JDYfAX20MbYfJGIjPTZzu$   Ivana — ruhig, langsam, freundlichu%   🇷🇸 nativ, ideal für Kinder ⭐)idlabelnoteFXlzTee7Zx2caYKIAwBFu   Nina — ruhig, warm, vollu   🇷🇸 nativ, weichd3l4f3HgkE3P6Fo91lYAu   Ida — klar & selbstbewusstu   🇷🇸 nativ serbischeWKPI657Btpf4xbqX4x6u   Ana — jung & freundlichjVBTQrP67HZEE22UqQGFu"   Mihael — männlich, Radio-Stimmeu   🇭🇷 nativ, männl. Option0x1SL53CGQ0glOQTYzVau   Sandra — deutsch, warmu)   🇩🇪 zum Vergleich (deutscher Akzent)returndictc                  C  s<   t jdtj } | dtj tt jj	| dd
 S )N+https://api.elevenlabs.io/v1/convai/agents/
xi-api-key   timeout)urllibrequestRequestr   ELEVENLABS_AGENT_ID
add_headerELEVENLABS_API_KEYjsonloadsurlopenread)req r"   2/home/nk/hobo-godmode/plappi-mvp/backend/voices.py
_agent_get"   s   r$   strc                  C  s:   zt  } | di di ddW S  ty   Y dS w )Nconversation_configttsvoice_id )r$   get	Exception)dr"   r"   r#   active_voice_id(   s   r-   r(   c                 C  sb   t jd }|jddd ||  d }| r| jdks+tjt| t	d}|
| d|  dS )uP   Erzeugt (einmalig) eine Hörprobe -> data/audio/voices/<id>.mp3, gibt rel. Pfad.voicesT)parentsexist_okz.mp3i  )r(   modelz/audio/voices/)r   	AUDIO_DIRmkdirexistsstatst_sizer   r'   SAMPLE_TEXTAGENT_TTS_MODELwrite_bytes)r(   out_diroutaudior"   r"   r#   ensure_sample0   s   

r=   c               	   C  sf   t  } g }tD ]&}zt|d }W n ty   d}Y nw |i |||d | kd q|| dS )Nr   r)   )sampleactive)r.   r?   )r-   
CANDIDATESr=   r+   append)r?   r;   cr>   r"   r"   r#   list_voices;   s   "
rC   c              
   C  s   dd| t dii}tjjdtj t| dd}|	dtj
 |	dd	 z$tjj|d
d}|jdk| dW  d    W S 1 sEw   Y  W d S  tjjyt } zdd|j d|  d d  dW  Y d }~S d }~ww )Nr&   r'   )r(   model_idr   PATCH)datamethodr   zContent-Typezapplication/jsonr   r      )okr(   FzHTTP z: )rI   error)r8   r   r   r   r   r   r   dumpsencoder   r   r   statusrJ   	HTTPErrorcoder    decode)r(   bodyr!   rer"   r"   r#   
set_activeG   s   
(4rT   )r   r   )r   r%   )r(   r%   r   r%   )r(   r%   r   r   )__doc__
__future__r   r   urllib.errorr   urllib.requestr)   r   r   r8   r7   r@   DEFAULT_VOICEr$   r-   r=   rC   rT   r"   r"   r"   r#   <module>   s*    









