o
    id                  
   @   s  d Z ddlZddlZddlmZmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZ zddlmZ W n  eyt Z ze
de  e
d e de dZ[ww eG dd deZ!G dd deZ"dS )z+Groq text-to-speech service implementation.    N)	dataclassfield)AsyncGeneratorOptional)logger)	BaseModel)
ErrorFrameFrameTTSAudioRawFrame)	NOT_GIVENTTSSettings	_NotGiven)
TTSService)Language)
traced_tts)	AsyncGroqzException: zAIn order to use Groq, you need to `pip install pipecat-ai[groq]`.zMissing module: c                   @   s0   e Zd ZU dZedd dZedB eB ed< dS )GroqTTSSettingszkSettings for GroqTTSService.

    Parameters:
        speed: Speech speed multiplier. Defaults to 1.0.
    c                   C   s   t S )N)r    r   r   M/home/ubuntu/.local/lib/python3.10/site-packages/pipecat/services/groq/tts.py<lambda>+   s    zGroqTTSSettings.<lambda>)default_factoryNspeed)	__name__
__module____qualname____doc__r   r   floatr   __annotations__r   r   r   r   r   #   s   
 "r   c                       s   e Zd ZU dZeZeed< G dd deZdZ	dddde	ddd	e
d
e
dee dee
 dee
 dee dee f fddZdefddZede
de
deedf fddZ  ZS )GroqTTSServicezGroq text-to-speech service implementation.

    Provides text-to-speech synthesis using Groq's TTS API. The service
    operates at a fixed 48kHz sample rate and supports various voices
    and output formats.
    	_settingsc                   @   s4   e Zd ZU dZejZee ed< dZ	ee
 ed< dS )zGroqTTSService.InputParamsa5  Input parameters for Groq TTS configuration.

        .. deprecated:: 0.0.105
            Use ``settings=GroqTTSService.Settings(...)`` instead.

        Parameters:
            language: Language for speech synthesis. Defaults to English.
            speed: Speech speed multiplier. Defaults to 1.0.
        language      ?r   N)r   r   r   r   r   ENr    r   r   r   r   r   r   r   r   InputParams9   s   
 
r#   i  wavN)output_formatparams
model_namevoice_idsample_ratesettingsapi_keyr%   r&   r'   r(   r)   r*   c          
         s   || j krtd| j  d | jddddd}	|dur%| d	d
 ||	_|dur2| dd ||	_|durL| d |sL|jrEt|jnd|	_|j	|	_	|durU|	
| t jdddd||	d| || _|| _t| jd| _dS )a  Initialize Groq TTS service.

        Args:
            api_key: Groq API key for authentication.
            output_format: Audio output format. Defaults to "wav".
            params: Additional input parameters for voice customization.

                .. deprecated:: 0.0.105
                    Use ``settings=GroqTTSService.Settings(...)`` instead.

            model_name: TTS model to use.

                .. deprecated:: 0.0.105
                    Use ``settings=GroqTTSService.Settings(model=...)`` instead.

            voice_id: Voice identifier to use.

                .. deprecated:: 0.0.105
                    Use ``settings=GroqTTSService.Settings(voice=...)`` instead.

            sample_rate: Audio sample rate. Must be 48000 Hz for Groq TTS.
            settings: Runtime-updatable settings. When provided alongside deprecated
                parameters, ``settings`` values take precedence.
            **kwargs: Additional arguments passed to parent TTSService class.
        zGroq TTS only supports zHz sample rate. zcanopylabs/orpheus-v1-englishautumnenr!   )modelvoicer    r   Nr'   r.   r(   r/   r&   T)pause_frame_processingpush_start_framepush_stop_framesr)   r*   )r+   r   )GROQ_SAMPLE_RATEr   warningSettings"_warn_init_param_moved_to_settingsr.   r/   r    strr   apply_updatesuper__init___api_key_output_formatr   _client)
selfr+   r%   r&   r'   r(   r)   r*   kwargsdefault_settings	__class__r   r   r:   I   sB   
%

	zGroqTTSService.__init__returnc                 C   s   dS )zCheck if this service can generate processing metrics.

        Returns:
            True, as Groq TTS service supports metrics generation.
        Tr   )r>   r   r   r   can_generate_metrics   s   z#GroqTTSService.can_generate_metricstext
context_idc              
   C  s  t |  d| d d}zc| jjjj| jj| jj| j	| jj
|dI dH }| 2 zC3 dH W }|r;|  I dH  d}tt|"}| }| }| }	||	}
t|
|||dV  W d   n1 shw   Y  q*6 W dS  ty } ztd| d	V  W Y d}~dS d}~ww )
a  Generate speech from text using Groq's TTS API.

        Args:
            text: The text to synthesize into speech.
            context_id: The context ID for tracking audio frames.

        Yields:
            Frame: Audio frames containing the synthesized speech data.
        z: Generating TTS []T)r.   r/   response_formatr   inputNF)rF   zUnknown error occurred: )error)r   debugr=   audiospeechcreater   r.   r/   r<   r   
iter_bytesstop_ttfb_metricswaveopenioBytesIOgetnchannelsgetframerate
getnframes
readframesr
   	Exceptionr   )r>   rE   rF   measuring_ttfbresponsedatawchannels
frame_rate
num_framesbyteser   r   r   run_tts   s8   


 zGroqTTSService.run_tts)r   r   r   r   r   r5   r   r   r#   r3   r7   r   intr:   boolrD   r   r   r	   rc   __classcell__r   r   rA   r   r   .   s<   
 	Q(r   )#r   rS   rQ   dataclassesr   r   typingr   r   logurur   pydanticr   pipecat.frames.framesr   r	   r
   pipecat.services.settingsr   r   r   pipecat.services.tts_servicer   pipecat.transcriptions.languager   (pipecat.utils.tracing.service_decoratorsr   groqr   ModuleNotFoundErrorrb   rJ   rY   r   r   r   r   r   r   <module>   s.   

