+
    i                         ^ RI HtHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
HtHtHt ^ RIHt ^ RIt^ RIHtHt ]! R	.4      ]! ].4      R
 4       4       t]! R	.4      ]! ].4      R 4       4       t]! R	.4      ]! ].4      R R l4       4       tR# )    )api_viewpermission_classes)AllowAny)Responsestatus)AgentConfigAgentVoiceConfigAgentGuardrailAgentSystemTool)connectionsN)_q_identensure_business_cluster_tablesGETc                p    \        \        P                  P                  RRR7      4      p\	        RV/4      # )z+List available agent names (for discovery).nameT)flatagents)listr	   objectsvalues_listr   )requestnamess   & ?E:\live-kit-agent\livekit_voicebot\backend\apps\agents\views.py
agent_listr      s4     $$00d0CDEXu%&&    c                    \         P                  P                  RRRR4      P                  VR7      p\        TRR	4      p/ R
TP                  bRTP                  bRTP                  bRTP                  bRTP                  bRTP                  bRTP                  bRTP                   bRTP"                  bRTP$                  bRTP&                  bRTP(                  bRTP*                  '       d   \-        TP*                  4      MR	bRT'       d   RT'       d   TP.                  MR	RT'       d   TP0                  MR	RT'       d   TP2                  MR	RT'       d   TP4                  MR	RT'       d   TP6                  MR	RT'       d   TP8                  MR	/M/ bRTP:                  P=                  RR7       Uu. uF  qDP>                  NK  	  upbRTP@                  P=                  RR7       Uu. uF  qUPB                  NK  	  upbp\        T4      #   \         P                   d!    \        RR/\        P                  R7      u # i ; iu upi u upi ) z0Worker fetches full config for an agent by name.voice_config
guardrailssystem_toolsknowledge_base)r   errorzAgent not foundr   Nidr   mcube_exenumber	mcube_gidstt_providertts_providerllm_provider	llm_modelsystem_promptdefault_languagefirst_message_inboundfirst_message_outboundknowledge_base_idvoicevoice_idtts_model_family
similarityspeed	stabilityoutput_formatT)enabled)"r	   r   prefetch_relatedgetDoesNotExistr   r   HTTP_404_NOT_FOUNDgetattrpkr   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   strr0   r1   r2   r3   r4   r5   r   filterguardrail_keyr    tool_key)r   
agent_nameagentr/   gtdatas   &&     r   agent_configrF      s[   X##44L.:J

#:#
 	 E>40Eehh

 	500 	U__	
 	** 	** 	** 	U__ 	,, 	E22 	 !<!< 	!%">"> 	U=T=T=TS!8!89Z^ 	  %T% 6 6Te%**EU[[tEtEU00t
 +, 	0@0@0G0GPT0G0UV0U10UV-. 	U-?-?-F-Ft-F-TU-T-TU/D2 D>; ## X"34V=V=VWWX4 WUs   2H 8I	.I2IIc                0    V ^8  d   QhR\         R\         /# )   business_idbot_id)int)formats   "r   __annotate__rM   >   s     Z Z3 Z Zr   c           "         \        V4      p\        V4      p\        T4       T R2p\        R,          P                  4       ;_uu_ 4       pTP                  R\        T4       R2T.4       TP                  4       pT'       g(   \        RR/\        P                  R7      uuR	R	R	4       # TP                   Uu. uF  q^ ,          NK  	  p	p\        \        Y4      4      p
R	R	R	4       \        X
P!                  R
4      ;'       g    T
P!                  R4      ;'       g    R4      P#                  4       p/ p \        R,          P                  4       ;_uu_ 4       pTP                  RT\        T4      T.4       TP                  4       pT'       d   T^ ,          e~   T^ ,          p\%        T\&        \(        34      '       d   TP+                  RRR7      p\%        T\        4      '       d    \,        P.                  ! T4      p\%        T\        4      '       d   TpR	R	R	4       TP!                  R4      ;'       g5    TP!                  R4      ;'       g    T
P!                  R4      ;'       g    RpTf   Rp\        T4      pRpT
P!                  R4      p\%        T\&        \(        34      '       d   TP+                  RRR7      p\%        T\        4      '       d   TP#                  4       '       dy    \,        P.                  ! T4      p\%        T\        4      '       dL   \        TP!                  R4      ;'       g    TP!                  R4      ;'       g    R4      P#                  4       p\        RTRTRTR\        TP!                  R4      ;'       g    T
P!                  R4      ;'       g    R4      P#                  4       R\        T
P!                  R4      ;'       g    R4      P#                  4       R\        T
P!                  R4      ;'       g    R4      P#                  4       R\        TP!                  R4      ;'       g    T
P!                  R4      ;'       g    R4      P#                  4       R\        TP!                  R4      ;'       g    T
P!                  R4      ;'       g    R4      P#                  4       R\        TP!                  R4      ;'       g    T
P!                  R4      ;'       g    R4      P#                  4       R\        TP!                  R4      ;'       g    T
P!                  R4      ;'       g    R4      P#                  4       R\        TP!                  R4      ;'       g    T;'       g    R4      P#                  4       R \        TP!                  R 4      ;'       g    T
P!                  R 4      ;'       g    R4      P#                  4       R!\        TP!                  R!4      ;'       g    T
P!                  R!4      ;'       g    R4      P#                  4       R"T
P!                  R"4      R#T
P!                  R#4      /4      #   \         d!    \        RR/\        P                  R7      u # i ; iu upi   + '       g   i     EL; i  \         d    / p ELi ; i  + '       g   i     EL; i  \         d    / p ELi ; i  \         d    Rp ELsi ; i)$z
Internal helper endpoint for MCube runtime.

Reads bot settings from cluster DB table `{business_id}_bots` and returns only the subset
required to start an MCube call (prompt/providers/models/voice/exenumber/gid).
r"   zInvalid business_id or bot_idr   _botsclusterzSELECT * FROM z WHERE bot_id = %s LIMIT 1zBot not foundNbot_namer    z
                SELECT config FROM business_id_bots
                WHERE business_id = %s AND (name = %s OR name = %s)
                ORDER BY updated_at DESC
                LIMIT 1
                zutf-8replace)errorsr*   promptr/   r0   voiceIdrI   rJ   first_messagemessage_outboundmessage_inboundr)   r(   r&   r'   tts_voice_idr$   r%   platform_settingsconversation_behavior)rK   	Exceptionr   r   HTTP_400_BAD_REQUESTr   r   cursorexecuter   fetchoner:   descriptiondictzipr=   r8   strip
isinstancebytes	bytearraydecodejsonloads)r   rI   rJ   bidbot_pktablecurrowccolsrE   rQ   override_cfgrrawr*   r0   	voice_raw	voice_objs   &&&                r   cluster_bot_mcube_configrx   <   s   h+V #3'e5ME	Y		&	&	(	(CnXe_$55OPSYRZ[llnWo6v?X?XY	 
)	(
 "oo.o!o.CN# 
) 488J'AA488F+;AArBHHJHL#**,,KK c&k8, AQqT%dcE9#566**WY*?Cc3''!"jjo c4((#&L+ -4 !$$_5oo9I9I(9SooW[W_W_`hWioomoM&MH!I)eY/00$$WY$?	)S!!ioo&7&7	

9-I)T**y}}Z8ZZIMM)<TZZXZ[aac 3f]S!1!1/!B!h!hdhhOaFb!h!hfhiooqDHH-?$@$F$FB G M M Os488,=#>#D#D"EKKM\--k:YYdhh{>SYYWYZ``bC 0 0 @ b bDHH^D\ b b`bciikC 0 0 @ b bDHH^D\ b b`bciikC 0 0 @ b bDHH^D\ b b`bciikC 0 0 @ R RH R RPRSYY[s<#3#34E#F#k#k$((SdJe#k#kiklrrt\--k:YYdhh{>SYYWYZ``b*=!>#TXX.E%F	
 }  h"AB6KfKfggh / 
)	(	(> % ! !% -,,,  $  	H	s   Y AY7+Y79Y2
Y76#Z3 BZ*Z ZZ3 -A[ 6[ [ (Y/.Y/2Y77Z	ZZZZZ0	*Z3 0Z3 3[[[[)rest_framework.decoratorsr   r   rest_framework.permissionsr   rest_framework.responser   rest_frameworkr   apps.agents.modelsr	   r
   r   r   	django.dbr   rj   apps.cluster.dynamic_tablesr   r   r   rF   rx    r   r   <module>r      s    B / , ! ] ] !  P 
5'XJ'   ' 
5'XJ#   #L 
5'XJZ   Zr   