
    Cj                        S SK Jr  S SKrSSKJr  SSKJr  SSKJr  SSKJ	r	J
r
  SS	KJrJr  SS
KJr  SSKJr  SSKJr   " S S5      rg)    )annotationsN   )	UserError)logger)TraceCtxManager   )
AudioInputStreamedAudioInput)STTModelTTSModel)VoicePipelineConfig)StreamedAudioResult)VoiceWorkflowBasec                  x    \ rS rSrSrSSSS.       SS jjrSS jrSS jrSS jrSS	 jr	SS
 jr
SS jrSrg)VoicePipeline   zAn 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               0   Xl         [        U[        5      (       a  UOSU l        [        U[        5      (       a  UOSU l        [        U[        5      (       a  UOSU l        [        U[        5      (       a  UOSU l        U=(       d
    [        5       U l
        g)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        g/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/agents/voice/pipeline.py__init__VoicePipeline.__init__   so    & !&0H&E&E4&0H&E&E4,6y#,F,FyD,6y#,F,FyD5 3 5    c                   #    [        U[        5      (       a  U R                  U5      I Sh  vN $ [        U[        5      (       a  U R	                  U5      I Sh  vN $ [        S[        U5       35      e NI N7f)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   runVoicePipeline.run0   sk      k:....{;;;%788--k:::<T+=N<OPQQ	 <:s!   *A:A6-A:A8A:8A:c                    U R                   (       d4  U R                  R                  R                  U R                  5      U l         U R                   $ N)r   r   model_providerget_tts_modelr   r   s    r   _get_tts_modelVoicePipeline._get_tts_modelC   5    ~~![[77EEdFZFZ[DN~~r    c                    U R                   (       d4  U R                  R                  R                  U R                  5      U l         U R                   $ r)   )r   r   r*   get_stt_modelr   r,   s    r   _get_stt_modelVoicePipeline._get_stt_modelH   r/   r    c                   #    U R                  5       nUR                  UU R                  R                  U R                  R                  U R                  R
                  5      I S h  vN $  N7fr)   )r2   
transcriber   stt_settingstrace_include_sensitive_data"trace_include_sensitive_audio_data)r   r%   models      r   _process_audio_input"VoicePipeline._process_audio_inputM   sZ     ##%%%KK$$KK44KK::	
 
 	
 
s   A$A-&A+'A-c                   ^ ^^#    [        T R                  5       T R                  R                  T R                  5      mUUU 4S jnTR	                  [
        R                  " U" 5       5      5        T$ 7f)Nc            	       >#    [        TR                  R                  =(       d    SS TR                  R                  TR                  R                  TR                  R
                  TR                  R                  S9    TR                  T5      I S h  vN n TR                  R                  U 5        S h  vN nTR                  U5      I S h  vN   M$   NC N! N

 TR                  5       I S h  vN    TR                  5       I S h  vN    OG! [         a:  n[        R                  " SU 35        TR!                  U5      I S h  vN    UeS nAff = f S S S 5        g ! , (       d  f       g = f7f)NVoice Agentworkflow_nametrace_idgroup_idmetadatatracingdisabledzError processing single turn: )r   r   r@   rB   trace_metadatarD   tracing_disabledr:   r   r&   	_add_text
_turn_done_done	Exceptionr   error
_add_error)
input_text
text_eventer%   outputr   s      r   stream_events5VoicePipeline._run_single_turn.<locals>.stream_eventsY   s"     "kk77H=--33++55	'+'@'@'M!MJ,0MM,=,=j,I ;j$..z::: "N;: -J ++--- ,,.((  LL#A!!EF ++A...G )  s   A<E5?E$DCD5C9C:C=DCDCDD3C64DDDE$
E-E
EEEE$	E5$
E2.E5r   r-   r   tts_settings	_set_taskasynciocreate_task)r   r%   rR   rQ   s   `` @r   r"   VoicePipeline._run_single_turnV   sU     $T%8%8%:DKK<T<TVZVaVab	* 	,,]_=>   A.A3c                   ^ ^^#    [        T R                  5       T R                  R                  T R                  5      mUUU 4S jnTR	                  [
        R                  " U" 5       5      5        T$ 7f)Nc            	     ^  >#    [        TR                  R                  =(       d    SS TR                  R                  TR                  R                  TR                  R
                  TR                  R                  S9   S n   TR                  R                  5         S h  vN nTR                  U5      I S h  vN   M$   N N
 O0! [         a#  n[        R                  " SU 35         S nAOS nAff = fTR                  5       R                  TTR                  R                  TR                  R                   TR                  R"                  5      I S h  vN  n U R%                  5         S h  vN  nTR                  R'                  U5      nU  S h  vN  nTR                  U5      I S h  vN    M&  
 TR)                  5       I S h  vN    Mi  
 OG! [         a:  n[        R*                  " SU 35        TR-                  U5      I S h  vN    UeS nAff = f U b  U R/                  5       I S h  vN    TR1                  5       I S h  vN    O:! U b  U R/                  5       I S h  vN    TR1                  5       I S h  vN    f = f S S S 5        g ! , (       d  f       g = f7f)Nr>   r?   zon_start() failed: zError processing turns: )r   r   r@   rB   rF   rD   rG   r   on_startrH   rK   r   warningr2   create_sessionr6   r7   r8   transcribe_turnsr&   rI   rL   rM   closerJ   )	transcription_session
intro_textrP   rN   resultrO   r%   rQ   r   s	         r   process_turns4VoicePipeline._run_multi_turn.<locals>.process_turnst   s7     "kk77H=--33++55 )-%)B040F0F0H ?*"("2"2:">>>?> 1I$ B)<QC'@AAB 372E2E2G2V2V#00@@FF	3 - -) -B,R,R,T 2 2j!%!2!2:!>06 ? ?*"("2"2:">>> 17$//111	 -U
 ! LL#;A3!?@ ++A...G -U -8399;;; ,,.(( -8399;;; ,,.(((G  s?  A<J-?JCC"C#C&C;C<CCCCG
C5C0+G0C55A$GEG/G3E64G8GF<F
F<G4F7
5GGGI
H$-HHHHI"J8H;9JIJJ/I2
0JJ
	JJ	J-
J*&J-rT   )r   r%   re   rQ   s   `` @r   r#   VoicePipeline._run_multi_turnq   sV     $T%8%8%:DKK<T<TVZVaVab%	)N 	,,]_=>rZ   )r   r   r   r   r   r   )r   r   r   zSTTModel | str | Noner   zTTSModel | str | Noner   zVoicePipelineConfig | None)r%   zAudioInput | StreamedAudioInputreturnr   )rh   r   )rh   r   )r%   r	   rh   r   )r%   r	   rh   r   )r%   r
   rh   r   )__name__
__module____qualname____firstlineno____doc__r   r&   r-   r2   r:   r"   r#   __static_attributes__ r    r   r   r      s^     ,0+/-16 $6 )	6
 )6 +64R&


6+r    r   )
__future__r   rW   
exceptionsr   r   rD   r   inputr	   r
   r9   r   r   pipeline_configr   rd   r   r   r   r   ro   r    r   <module>rt      s/    "  "  % 1 % 0 ' 'M Mr    