o
    iS                     @   s   d Z ddlZddlmZmZ ddlmZ ddlZddlmZm	Z	 ddl
mZ ddlmZmZmZ e Ze	g dZd	ed
eee B fddZeG dd dZdefddZdS )z@Interactive prompts and question flow for project configuration.    N)	dataclassfield)Optional)ChoiceStyle)Console)BotTypeServiceLoaderServiceRegistry)
)qmarkfg:#00d7af bold)questionbold)answerz
fg:#5fd7ff)pointerr   )highlightedr   )selectedz
fg:#00d7af)	separatorz
fg:#6c6c6c)instructionz
fg:#808080)text )disabledzfg:#858585 italicr   r   c                 C   sh   t |trd|}nt|}tjd tjd tjd tj  t	d|  d| d dS )	z
    Replace the questionary output line with a checkmark version.
    Uses ANSI escape codes to move cursor up and overwrite the line.
    z, z[Az[2Ku   [green]✔[/green] z [cyan]z[/cyan]N)

isinstancelistjoinstrsysstdoutwriteflushconsoleprint)r   r   
answer_str r$   Q/home/ubuntu/.local/lib/python3.10/site-packages/pipecat_cli/prompts/questions.pyreplace_question_with_answer&   s   

r&   c                   @   s4  e Zd ZU dZeed< eed< eedZ	ee ed< dZ
eed< dZee ed	< dZee ed
< dZee ed< dZee ed< dZee ed< dZeed< dZee ed< dZee ed< dZee ed< dZee ed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dS )ProjectConfigz$Configuration for a Pipecat project.project_namebot_type)default_factory
transportscascademodeNstt_servicellm_servicetts_servicerealtime_servicevideo_serviceFgenerate_clientclient_frameworkclient_serverdaily_pstn_modetwilio_daily_sip_modevideo_inputvideo_output	recordingtranscriptiondeploy_to_cloudenable_krispenable_observability)__name__
__module____qualname____doc__r   __annotations__r   r   r   r+   r-   r.   r   r/   r0   r1   r2   r3   boolr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r$   r$   r$   r%   r'   =   s.   
 r'   returnc            $         s  t d tjdtdd d } | stdtd|  tjdt	dd	d
t	ddd
gtd }|s6tdtd|d	kr>dnd d}d}d}|d	krtjdt	ddd
t	ddd
t	ddd
gtd }|sjtddddd}td|
|| |dkrd}tjdt	ddd
t	ddd
gtd }|stdtd|dkrdnd n|dkrd}d}nd}t|}g }d}d}	|D ]5}
|
jdv r|s|tdd d!d"d#  d}q|
jd$v r|	s|tdd d%d&d#  d}	q||
 qd'd( |D }tjd)|td stdd}d}d"krGtjd*t	d+d,d
t	d-d.d
gtd }|s/td|d,kr6d/nd0}td*| d1|d2d3 n7d&kr~tjd4t	d+d,d
t	d-d.d
gtd }|sgtd|d,krnd/nd0}td4| d5|d2d3 g}tfd6d7|D }td)| |d	krtjd8dtd9 }td8|rd:nd; |r݇fd<d(|D }|rtjd=|td   r|  t fd>d7|D  }td=| nK|dkr)d?vr)tjd@dtd9 }td@|rd:nd; |r)t	dAdBd
t	dCdDd
g}tjdE|td }|r)|| tdE|dBkr&dAndC tjdFt	dGdHd
t	dIdJd
gtd }|sDtdtdF|dHkrMdGndI t| ||||||||dK	|dHkrdLd( tjD }tjdM|td _tfdNd7tjD j}tdM| dOd( tjD }tjdP|td _tfdQd7tjD j}tdP| dRd( tjD }tjdS|td _tfdTd7tjD j}tdS| n&dUd( tjD }tjdV|td _tfdWd7tjD j}tdV| t dX t dY t dZ jdHkrt d[ jd	kr*t d\ t d] t d^ t d_ tjd`dtd9 } td`| r@d:nd; | rtjdadtd9 _tdajrYd:nd; tjdbdtd9 _ tdbj rod:nd; jd	krtjdcdtd9 }!tdc|!rd:nd; |!rddd( tj!D }"tjde|"td _"j"rtfdfd7tj!D j"}#tde|# jd	krtjdgdtd9 _#tdgj#rd:nd; nd_#jd	krj"rd_$ntjdhdtd9 _$tdhj$rd:nd; nd_$tjdidtd9 _%tdij%rd:nd; nd_"d_#d_$d_d_ d_%tjdjdtd9 _&tdjj&r=d:nd; j&rZtjdkdtd9 _'tdkj'rWd:nd; S )lz
    Ask user for project configuration through interactive prompts.

    Returns:
        ProjectConfig with user's selections
    z:[bold cyan]Let's create your Pipecat project![/bold cyan]
zProject name:c                 S   s   t | dkpdS )Nr   zProject name cannot be empty)len)r   r$   r$   r%   <lambda>|   s    z'ask_project_questions.<locals>.<lambda>)stylevalidatezProject creation cancelledz	Bot type:z
Web/Mobilewebtitlevalue	Telephony	telephony)choicesrH   FNzClient framework:Reactreactz
Vanilla JSvanillazNone (server only)none)rR   rS   rT   TzReact dev server:VitevitezNext.jsnextjs)daily_pstn_dialindaily_pstn_dialout
ServiceDefr$   z
Daily PSTN
daily_pstn)labelrM   )twilio_daily_sip_dialintwilio_daily_sip_dialoutzTwilio + Daily SIPtwilio_daily_sipc                 S      g | ]
}t |j|jd qS rK   r   r\   rM   .0svcr$   r$   r%   
<listcomp>       z)ask_project_questions.<locals>.<listcomp>z
Transport:zDaily PSTN mode:zDial-in (Receive calls)zdial-inzDial-out (Make calls)zdial-outzDial-inzDial-outdaily_pstn_-r   zTwilio + Daily SIP mode:twilio_daily_sip_c                 3        | ]}|j  kr|jV  qd S NrM   r\   rc   primary_transportr$   r%   	<genexpr>#      z(ask_project_questions.<locals>.<genexpr>z(Add another transport for local testing?)defaultrH   YesNoc                    s   g | ]	}|j  kr|qS r$   )rM   )rd   crn   r$   r%   rf   7  s    zAdditional transport:c                 3   rk   rl   rm   rc   )backup_transportr$   r%   rp   C  rq   )rX   rY   r]   r^   z)Add a WebRTC transport for local testing?SmallWebRTCsmallwebrtcDailydailyzWebRTC provider:zPipeline architecture:u   Cascade (STT → LLM → TTS)r,   zRealtime (speech-to-speech)realtime)	r(   r)   r+   r-   r3   r4   r5   r6   r7   c                 S   r`   ra   rb   rc   r$   r$   r%   rf     rg   zSpeech-to-Text:c                 3   "    | ]}|j  jkr|jV  qd S rl   )rM   r.   r\   rc   configr$   r%   rp          c                 S   r`   ra   rb   rc   r$   r$   r%   rf     rg   zLanguage model:c                 3   r|   rl   )rM   r/   r\   rc   r}   r$   r%   rp     r   c                 S   r`   ra   rb   rc   r$   r$   r%   rf     rg   zText-to-Speech:c                 3   r|   rl   )rM   r0   r\   rc   r}   r$   r%   rp     r   c                 S   r`   ra   rb   rc   r$   r$   r%   rf     rg   zRealtime service:c                 3   r|   rl   )rM   r1   r\   rc   r}   r$   r%   rp         z'
[bold]Default feature settings:[/bold]u$     • Audio recording: [dim]No[/dim]u*     • Transcription logging: [dim]No[/dim]uD     • Smart turn-taking: [green]Yes[/green] [dim](recommended)[/dim]u)     • Video avatar service: [dim]No[/dim]u      • Video input: [dim]No[/dim]u!     • Video output: [dim]No[/dim]u"     • Observability: [dim]No[/dim]zCustomize feature settings?zAudio recording?zTranscription logging?zUse video avatar service?c                 S   r`   ra   rb   rc   r$   r$   r%   rf     rg   zVideo avatar service:c                 3   r|   rl   )rM   r2   r\   rc   r}   r$   r%   rp   %  r   zVideo input?zVideo output?zEnable observability?zDeploy to Pipecat Cloud?z Enable Krisp noise cancellation?)(r!   r"   questionaryr   custom_styleaskKeyboardInterruptr&   selectr   getr	   get_transport_optionsrM   appendtypereplacenextconfirmr'   r
   STT_SERVICESr.   LLM_SERVICESr/   TTS_SERVICESr0   REALTIME_SERVICESr1   r-   r)   r:   r;   VIDEO_SERVICESr2   r8   r9   r>   r<   r=   )$r(   r)   r3   r4   r5   framework_displaytransport_optionsdisplay_transport_optionsseen_daily_pstnseen_twilio_daily_sipre   transport_choicesr6   r7   mode_displayr+   primary_label
add_backupbackup_choicesbackup_label
add_webrtcwebrtc_choiceswebrtc_transportr-   stt_choices	stt_labelllm_choices	llm_labeltts_choices	tts_labelrealtime_choicesrealtime_labelcustomize_featuresuse_video_servicevideo_choicesvideo_labelr$   )rv   r~   ro   r%   ask_project_questionso   sB  



	





	





	



	









	














r   )rB   r   dataclassesr   r   typingr   r   r   r   rich.consoler   pipecat_cli.registryr   r	   r
   r!   r   r   r   r&   r'   r   r$   r$   r$   r%   <module>   s    1