
    /Ui[                        d dl mZ d dlZddlmZ ddlmZ ddlm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  G d d      Zy)    )annotationsN   )TraceCtxManager)	UserError)logger   )
AudioInputStreamedAudioInput)STTModelTTSModel)VoicePipelineConfig)StreamedAudioResult)VoiceWorkflowBasec                  `    e Zd ZdZdddd	 	 	 	 	 	 	 ddZddZddZddZddZdd	Z	dd
Z
y)VoicePipelinezAn opinionated voice agent pipeline. It works in three steps:
    1. Transcribe audio input into text.
    2. Run the provided `workflow`, which produces a sequence of text responses.
    3. Convert the text responses into streaming audio output.
    N)	stt_model	tts_modelconfigc                   || _         t        |t              r|nd| _        t        |t              r|nd| _        t        |t              r|nd| _        t        |t              r|nd| _        |xs
 t               | _
        y)a  Create a new voice pipeline.

        Args:
            workflow: The workflow to run. See `VoiceWorkflowBase`.
            stt_model: The speech-to-text model to use. If not provided, a default OpenAI
                model will be used.
            tts_model: The text-to-speech model to use. If not provided, a default OpenAI
                model will be used.
            config: The pipeline configuration. If not provided, a default configuration will be
                used.
        N)workflow
isinstancer   r   r   r   str_stt_model_name_tts_model_namer   r   )selfr   r   r   r   s        q/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/venv/lib/python3.12/site-packages/agents/voice/pipeline.py__init__zVoicePipeline.__init__   se    & !&0H&E4&0H&E4,6y#,FyD,6y#,FyD5 3 5    c                   K   t        |t              r| j                  |       d{   S t        |t              r| j	                  |       d{   S t        dt        |             7 D7 w)a  Run the voice pipeline.

        Args:
            audio_input: The audio input to process. This can either be an `AudioInput` instance,
                which is a single static buffer, or a `StreamedAudioInput` instance, which is a
                stream of audio data that you can append to.

        Returns:
            A `StreamedAudioResult` instance. You can use this object to stream audio events and
            play them out.
        NzUnsupported audio input type: )r   r	   _run_single_turnr
   _run_multi_turnr   type)r   audio_inputs     r   runzVoicePipeline.run0   sg      k:...{;;;%78--k:::<T+=N<OPQQ	 <:s!   %A0A,(A0A.A0.A0c                    | j                   s4| j                  j                  j                  | j                        | _         | j                   S N)r   r   model_providerget_tts_modelr   r   s    r   _get_tts_modelzVoicePipeline._get_tts_modelC   5    ~~![[77EEdFZFZ[DN~~r   c                    | j                   s4| j                  j                  j                  | j                        | _         | j                   S r&   )r   r   r'   get_stt_modelr   r)   s    r   _get_stt_modelzVoicePipeline._get_stt_modelH   r+   r   c                   K   | j                         }|j                  || j                  j                  | j                  j                  | j                  j
                         d {   S 7 wr&   )r.   
transcriber   stt_settingstrace_include_sensitive_data"trace_include_sensitive_audio_data)r   r#   models      r   _process_audio_inputz"VoicePipeline._process_audio_inputM   s[     ##%%%KK$$KK44KK::	
 
 	
 
s   A$A-&A+'A-c                   K   t         j                  j                  xs dd  j                  j                   j                  j                   j                  j
                        5   j                  |       d {   t         j                          j                  j                   j                         fd}j                  t        j                   |                    cd d d        S 7 x# 1 sw Y   y xY ww)NVoice Agentworkflow_nametrace_idgroup_idmetadatadisabledc                   K   	 j                   j                        2 3 d {   } j                  |        d {    #7 7 6 j                          d {  7   j	                          d {  7   y # t
        $ r9}t        j                  d|        j                  |       d {  7   |d }~ww xY ww)NzError processing single turn: )	r   r$   	_add_text
_turn_done_done	Exceptionr   error
_add_error)
text_evente
input_textoutputr   s     r   stream_eventsz5VoicePipeline._run_single_turn.<locals>.stream_eventsf   s     ,0MM,=,=j,I ; ;j$..z:::;: -J ++--- ,,.((  LL#A!!EF ++A...Gs|   C A; AAAA; AA; AA; A; AA; 4A75A; :C ;	B=,B80B31B88B==C )r   r   r9   r;   trace_metadatatracing_disabledr5   r   r*   tts_settings	_set_taskasynciocreate_task)r   r#   rI   rG   rH   s   `  @@r   r    zVoicePipeline._run_single_turnV   s      ++33D}[[))[[//[[11
 	  $88EEJ(##%t{{'?'?F	 W00AB3	 	 F	 	s1   A%D*C:?C8 A.C:.
D8C::D?Dc                   K   t         j                  j                  xs dd  j                  j                   j                  j                   j                  j
                        5  t         j                          j                  j                   j                        	  j                  j                         2 3 d {   }j                  |       d {    #7 7 6 n.# t        $ r"}t        j                  d|        Y d }~nd }~ww xY w j                         j!                  | j                  j"                   j                  j$                   j                  j&                         d {  7   fd}j)                  t+        j,                   |                    cd d d        S # 1 sw Y   y xY ww)Nr7   r8   zon_start() failed: c                 f  K   	 j                         2 3 d {   } j                  j                  |       }|2 3 d {   }j                  |       d {    #7 D7  7 	6 j	                          d {  7   j6 nE# t
        $ r9}t        j                  d|        j                  |       d {  7   |d }~ww xY w	 j                          d {  7   j                          d {  7   y # j                          d {  7   j                          d {  7   w xY ww)NzError processing turns: )transcribe_turnsr   r$   r?   r@   rB   r   rC   rD   closerA   )rG   resultrE   rF   rH   r   transcription_sessions       r   process_turnsz4VoicePipeline._run_multi_turn.<locals>.process_turns   s    ),A,R,R,T 2 2j!%!2!2:!>06 ? ?*"("2"2:">>>2?> 17$//111	 -U
 ! LL#;A3!?@ ++A...G -U 055777 ,,.(( 055777 ,,.((s   D1B A?AA?B A$A  A$B A"B A? A$"B $B 8A;9B  C: 	C
,B>6B97B>>CC: D1CD13C64D1:D.DD.'D*(D..D1)r   r   r9   r;   rJ   rK   r   r*   rL   r   on_startr?   rB   r   warningr.   create_sessionr1   r2   r3   rM   rN   rO   )r   r#   
intro_textrF   rV   rH   rU   s   `    @@r   r!   zVoicePipeline._run_multi_turnt   sk    ++33D}[[))[[//[[11
 (	 )##%t{{'?'?F:(,(>(>(@ 7 7* **:66676 )A :!4QC899: +/*=*=*?*N*N((88>>	+ % %!) W00ABQ(	 (	 (	s   A%G*:F8%C(?C&C"C&C(C$C("C&$C(&C('F8(	D1D	F8DA$F87E:86F8.
G8G=G)r   r   r   zSTTModel | str | Noner   zTTSModel | str | Noner   zVoicePipelineConfig | None)r#   zAudioInput | StreamedAudioInputreturnr   )r[   r   )r[   r   )r#   r	   r[   r   )r#   r	   r[   r   )r#   r
   r[   r   )__name__
__module____qualname____doc__r   r$   r*   r.   r5   r    r!    r   r   r   r      s^     ,0+/-16 $6 )	6
 )6 +64R&


<)r   r   )
__future__r   rN   	_run_implr   
exceptionsr   r   inputr	   r
   r4   r   r   pipeline_configr   rT   r   r   r   r   r`   r   r   <module>rf      s/    "  ' "  1 % 0 ' 'N Nr   