
    Ng
                         d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ defd	Z G d
 dee          Z G d de          ZdS )    N)Enum)AnyDictOptionalUnion)CallbackManagerForToolRun)BaseToolget_from_dict_or_env)model_validatorreturnc                  V    	 dd l } n"# t          $ r}t          d          |d }~ww xY w| S )Nr   zBCannot import elevenlabs, please install `pip install elevenlabs`.)
elevenlabsImportError)r   es     m/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/tools/eleven_labs/text2speech.py_import_elevenlabsr      sU       P
 
	 s    
&!&c                       e Zd ZdZdZdZdS )ElevenLabsModelz-Models available for Eleven Labs Text2Speech.eleven_multilingual_v1eleven_monolingual_v1N)__name__
__module____qualname____doc__MULTI_LINGUALMONO_LINGUAL     r   r   r      s        77,M*LLLr   r   c                       e Zd ZU dZej        Zeeef         e	d<   dZ
ee	d<   dZee	d<    ed          ed	ed
efd                        Z	 ddedee         d
efdZded
dfdZded
dfdZdS )ElevenLabsText2SpeechToolzTool that queries the Eleven Labs Text2Speech API.

    In order to set this up, follow instructions at:
    https://docs.elevenlabs.io/welcome/introduction
    modeleleven_labs_text2speechnamezA wrapper around Eleven Labs Text2Speech. Useful for when you need to convert text to speech. It supports multiple languages, including English, German, Polish, Spanish, Italian, French, Portuguese, and Hindi. descriptionbeforemodevaluesr   c                 (    t          |dd          }|S )z,Validate that api key exists in environment.eleven_api_keyELEVEN_API_KEYr
   )clsr)   _s      r   validate_environmentz.ElevenLabsText2SpeechTool.validate_environment-   s     !)9;KLLr   Nqueryrun_managerc                 6   t                      }	 |                    || j                  }t          j        ddd          5 }|                    |           ddd           n# 1 swxY w Y   |j        S # t          $ r}t          d|           d}~ww xY w)zUse the tool.)textr"   bxz.wavF)r(   suffixdeleteNz/Error while running ElevenLabsText2SpeechTool: )	r   generater"   tempfileNamedTemporaryFilewriter$   	ExceptionRuntimeError)selfr0   r1   r   speechfr   s          r   _runzElevenLabsText2SpeechTool._run5   s     ())
	V((e4:(FFF,&                                  6M 	V 	V 	VTQRTTUUU	Vs;   3A7 A%A7 %A))A7 ,A)-	A7 7
BBBspeech_filec                     t                      }t          |d          5 }|                                }ddd           n# 1 swxY w Y   |                    |           dS )zPlay the text as speech.rbr'   N)r   openreadplay)r=   rA   r   r?   r>   s        r   rF   zElevenLabsText2SpeechTool.playD   s    '))
+D))) 	QVVXXF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     t                      }|                    || j        d          }|                    |           dS )zUStream the text as speech as it is generated.
        Play the text in your speakers.T)r3   r"   streamN)r   r7   r"   rH   )r=   r0   r   speech_streams       r   stream_speechz'ElevenLabsText2SpeechTool.stream_speechL   sF     ())
"++djQU+VV-(((((r   )N)r   r   r   r   r   r   r"   r   str__annotations__r$   r%   r   classmethodr   r   r/   r   r   r@   rF   rJ   r   r   r   r!   r!      s:          *9)FE5#%&FFF)D#)))	<     _(###$ 3    [ $# NRV VV'/0I'JV	V V V V           )3 )4 ) ) ) ) ) )r   r!   )r8   enumr   typingr   r   r   r   langchain_core.callbacksr   langchain_core.toolsr	   langchain_core.utilsr   pydanticr   r   rK   r   r!   r   r   r   <module>rT      s          - - - - - - - - - - - - > > > > > > ) ) ) ) ) ) 5 5 5 5 5 5 $ $ $ $ $ $C    + + + + +c4 + + +5) 5) 5) 5) 5) 5) 5) 5) 5) 5)r   