
    er0j                       % S SK Jr  S SKrS SKrS SKrS SKrS SKJrJr  S SK	J
r
  S SKJr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JrJr  \
" \5      R7                  5       R8                  R8                  r\S-  r\S-  S-  r\S-  S-  r \S-  S-  r!\!RE                  SSS9  0 r#S\$S'   \RJ                  " 5       r&SS jr' " S S\5      r( " S S\5      r)SSS jjr*\+S:X  a  \*" 5         gg)    )annotationsN)BaseHTTPRequestHandlerThreadingHTTPServer)Path)parse_qsurlparse   )adapter_for)available_states
get_avatar)
find_agentload_agents)SessionStorenew_session_idutc_nowstaticconfigszagents.jsondatasessionsttsT)parentsexist_okzdict[str, None | dict | str]_anim_storec                   ^ ^ [            S [        T '   S S S 5        SU U4S jjn[        R                  " USS9R	                  5         g ! , (       d  f       N;= f)Nc                 F  >  SSK Jn   SSKJn  [        T S3-  nU " TU5        U" U5      n[
           U[        T'   S S S 5        g ! , (       d  f       g = f! [         a@  n[
           [        U5      [        T'   S S S 5         S nAg ! , (       d  f        S nAg = fS nAff = f)Nr	   )
synthesize)audio_to_blendshapes.wav)	r   r   
avatar_lamr   TTS_DIR
_anim_lockr   	Exceptionstr)r   r   wav_pathbs_dataexc
session_idtexts        )/mnt/DATA/WORK/agent-gui/agent_gui/app.py_run$_start_avatar_pipeline.<locals>._run    su    	3'8J<t!44HtX&*84G*1J'  	3*-c(J' 	3sQ   /A 
AA 
AA A 
B  B&B9B
B	BBB T)targetdaemon)returnNone)r!   r   	threadingThreadstart)r'   r(   r*   s   `` r)   _start_avatar_pipeliner3      sB    	"&J 
3 3 D.446# 
s   
A
Ac                  <   ^  \ rS rSrSU 4S jjr\S 5       rSrU =r$ )AgentGuiServer1   c                P   > [         TU ]  X5        X0l        [        U5      U l        g N)super__init__config_pathr   r   )selfserver_addressRequestHandlerClassr;   sessions_root	__class__s        r)   r:   AgentGuiServer.__init__2   s"    =&$]3    c                ,    [        U R                  5      $ r8   )r   r;   r<   s    r)   agentsAgentGuiServer.agents7   s    4++,,rB   )r;   r   )r;   r   r?   r   )	__name__
__module____qualname____firstlineno__r:   propertyrE   __static_attributes____classcell__)r@   s   @r)   r5   r5   1   s    4
 - -rB   r5   c                  Z    \ rS rSr% S\S'   SS jrS rS rS rSS jr	S	 r
SSS
 jjrSrg)Handler<   r5   serverc                $    [        SX-  -   5        g )Nz[agent-gui] )print)r<   formatargss      r)   log_messageHandler.log_message?   s    nv},-rB   c                   [        U R                  5      nUR                  S:X  a  U R                  SS[        5       S.5      $ UR                  S:X  a'  U R                  SU R                  R
                  05      $ UR                  S:X  aN  [        UR                  5      R                  SS	/5      S
   nU R                  [        U5      [        5       S.5      $ UR                  S:X  a5  U R                  SU R                  R                  R                  5       05      $ UR                  S:X  a_  [        UR                  5      R                  SS/5      S
   nU R                  SU R                  R                  R                  U5      05      $ UR                  S:X  a  [        UR                  5      R                  SS/5      S
   n[           [        R                  U5      nS S S 5        Wc  U R                  SS05      $ [!        U["        5      (       a  U R                  SUS.5      $ U R                  SUS.5      $ UR                  S:X  a  [        UR                  5      R                  SS/5      S
   n[$        U S3-  nUR'                  5       (       d  U R                  SS0SS9$ UR)                  5       nU R+                  S5        U R-                  SS 5        U R-                  S![#        [/        U5      5      5        U R1                  5         U R2                  R5                  U5        g U R7                  UR                  5      $ ! , (       d  f       GNl= f)"Nz/healthTz	agent-gui)okservicetimez/api/agentsrE   z/api/avatarstateidler   )avatarstatesz/api/sessionsr   z/api/historyr'    eventsz/api/avatar/animstatuspendingerror)rb   messageready)rb   bsDataz/api/avatar/audior   zaudio not found  rb      Content-Typez	audio/wavContent-Length)r   pathjson_responser   rQ   rE   r   querygetr   r   r   list_sessionsreadr!   r   
isinstancer#   r    exists
read_bytessend_responsesend_headerlenend_headerswfilewriteserve_static)r<   parsedr\   r'   valwavbodys          r)   do_GETHandler.do_GETB   s   $))$;;)#%%TkSZS\&]^^;;-'%%x1C1C&DEE;;-'V\\*..wA!DE%%E1BN^N`&abb;;/)%%z4;;3G3G3U3U3W&XYY;;.(!&,,/33L2$GJJ%%x1E1E1J1J:1V&WXX;;,,!&,,/33L2$GJJ!ooj1 {))8Y*?@@#s##))W*MNN%%C&HII;;--!&,,/33L2$GJJzl$//C::<<))74E*Fs)SS>>#Ds#^[9-s3t9~>JJT"  --' s   M
Mc                    U R                   S:X  a  U R                  S[        5       05      $ U R                   S:X  a  U R                  5       $ U R                  SS0SS9$ )Nz/api/sessionr'   z	/api/chatrd   zEndpoint inconnurh   ri   )rm   rn   r   handle_chatrD   s    r)   do_POSTHandler.do_POSTg   s^    99&%%|^5E&FGG99###%%!!7,>"?!LLrB   c                l    U R                  5       n[        UR                  SS5      5      n[        UR                  SS5      5      R                  5       n[        UR                  S5      =(       d
    [	        5       5      nU(       d  U R                  SS0SS	9$ [        U R                  R                  U5      nU R                  R                  R                  US
X#S.5        U R                  R                  R                  USUSS.5        [        U5      R                  X5U5      nUR                   Vs/ s H'  opR                  R                  R                  XG5      PM)     nn[        S U 5       S 5      n	U	(       a  [        XI5        U R                  UUU[!        UR"                  5      U	(       a  SOS S.5      $ s  snf ! [$         a/  n
U R                  [        U
5      [!        S5      S.SS	9s S n
A
$ S n
A
f[&         a/  n
U R                  [        U
5      [!        S5      S.SS	9s S n
A
$ S n
A
ff = f)Nagentechore   r`   r'   rd   zMessage videi  ri   user_message)typer   contentrb   u   Agent en réflexion...c              3  X   #    U  H   oR                  S 5      S:X  d  M  US   v   M"     g7f)r   assistant_messager   N)rp   ).0es     r)   	<genexpr>&Handler.handle_chat.<locals>.<genexpr>   s$     ]}!fI\8\9}s   **rc   )r'   r   ra   r^   avatar_anim)rd   r^   rh   i  )	read_jsonr#   rp   stripr   rn   r   rQ   rE   r   appendr
   runra   nextr3   r   avatar_stateKeyErrorr"   )r<   payloadagent_idre   r'   r   resulteventstored_eventsassistant_textr&   s              r)   r   Handler.handle_chatn   s   "	fnn&G7;;w78H'++i45;;=GW[[6J.:JKJ))7N*CC)PPt{{118<EKK  ''
^V^4stKK  ''
XPXe}4~ '++GJGFY_YfYfgYfPU[[1188KYfMg!]}]N &zB%%",%+()<)<=0>9D  h$  	f%%CJwDW&Xad%ee 	f%%CJwDW&Xad%ee	fsJ   BG BG 6.F>$AG >G 
H3$G71H37H3$H.(H3.H3c                   US;   a  SOUR                  S5      n[        U-  R                  5       n[        R                  5       UR                  ;  a*  U[        R                  5       :w  a  U R	                  SS0SS9$ UR                  5       (       a  UR                  5       (       d  U R	                  SS0S	S9$ [        R                  " [        U5      5      S
   =(       d    SnUR                  5       nU R                  S5        U R                  SU5        U R                  S[        [        U5      5      5        U R                  5         U R                  R!                  U5        g )N)/r`   z
index.htmlr   rd   zChemin interditi  ri   zFichier introuvablerh   r   zapplication/octet-streamrj   rk   rl   )lstripSTATIC_ROOTresolver   rn   rt   is_file	mimetypes
guess_typer#   ru   rv   rw   rx   ry   rz   r{   )r<   request_pathrelativerm   content_typer   s         r)   r|   Handler.serve_static   s!   #/9#<<,BUBUVYBZh&//1 4ATATAV9V%%w0A&B3%OO{{}}DLLNN%%w0E&Fs%SS ++CI6q9W=W 36)3s4y>:

rB   c                    [        U R                  R                  SS5      5      nU(       a*  U R                  R	                  U5      R                  S5      OSn[        R                  " U5      $ )Nrl   0utf-8z{})intheadersrp   rfilerr   decodejsonloads)r<   lengthr   s      r)   r   Handler.read_json   sN    T\\%%&6<=:@tzzv&--g6dzz$rB   c                2   [         R                  " USSS9R                  S5      nU R                  U5        U R	                  SS5        U R	                  S[        [        U5      5      5        U R                  5         U R                  R                  U5        g )NF   )ensure_asciiindentr   rk   zapplication/json; charset=utf-8rl   )
r   dumpsencoderv   rw   r#   rx   ry   rz   r{   )r<   r   rb   r   s       r)   rn   Handler.json_response   su    zz'a@GGP6")JK)3s4y>:

rB    N)rT   r#   )r   r#   )rj   )rb   r   )rG   rH   rI   rJ   __annotations__rV   r   r   r   r|   r   rn   rL   r   rB   r)   rO   rO   <   s4    .#.JM#fJ 
 rB   rO   c                $   [         R                  " SS9nUR                  SSS9  UR                  S[        SS9  UR                  S	[        [
        S9  UR                  S
[        [        S9  UR                  U 5      n[        UR                  UR                  4[        UR                  UR                  5      n[        SUR                   SUR                   35        [        SUR                   35        [        S5        UR                  5         g )NzAgent GUI local)descriptionz--hostz	127.0.0.1)defaultz--porti="  )r   r   z--configz
--sessionsu   Agent GUI lancé: http://:zConfig agents: u   Ctrl+C pour arrêter.)argparseArgumentParseradd_argumentr   r   DEFAULT_CONFIGDEFAULT_SESSIONS
parse_argsr5   hostportrO   configr   rS   serve_forever)argvparserrU   rQ   s       r)   mainr      s    $$1BCF
+6
sD9

~F
49IJT"DTYY		2GT[[$--XF	%dii[$))
=>	ODKK=
)*	
!"
rB   __main__)r'   r#   r(   r#   r.   r/   r8   )r   zlist[str] | None),
__future__r   r   r   r   r0   http.serverr   r   pathlibr   urllib.parser   r   adaptersr
   r^   r   r   r   r   r   r   r   r   r   __file__r   parentPROJECT_ROOTr   r   r   r    mkdirr   r   Lockr!   r3   r5   rO   r   rG   r   rB   r)   <module>r      s    "     C  + ! 0 + ; ;H~%%'..55X%	)M9&(:5 

%
' dT * -/) .^^
7*-( -q$ qh zF rB   