
    /i                        d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZmZmZ d dlmZmZmZ  ee      jA                         jB                  jB                  Z" e	e"dz  d        e jF                  d      Z$e$s e	         e jF                  d      Z$e$s e%d       e jF                  dd      Z&da'da(da) eddd      Z*e*jW                  d      d        Z,d Z-e*jW                  d      d        Z.e*j_                  d      d        Z0e*j_                  d      d        Z1e*je                  d       d!ed"efd#       Z3e*je                  d$      d%        Z4y)&    N)Path)DictAnyOptional)load_dotenv)FastAPIHTTPException)JSONResponse)init_knowledge_base)get_working_mcp_toolsclose_mcp_connection)create_agent)QueryRequestAgentQueryResponseErrorResponseHealthResponse)ConsultaType	ToolNamesErrorMessagesz.envF)overrideOPENAI_API_KEYu(   OPENAI_API_KEY no está definido en .envMCP_HTTP_URLzhttp://localhost:8053/mcpzAsistente de Vuelos (Modular)z8API Modularizada del Asistente del Aeropuerto de Cuenca.z/aeropuerto)titledescription	root_pathstartupc                  j   K   t        dt                t        j                  t	                      y w)Nu(   🚀 Iniciando servidor FastAPI | Root: )printBASE_DIRasynciocreate_taskinitialize_agent_background     '/opt/aeropuerto/back/client/app/main.pystartup_eventr&   1   s,      
4XJ
?@ 356s   13c                    K   t        d       	 t        t        t               t        dt         d       g } 	 t        t        dd       d {   } | rt        dt        |        d       nt        d	       t        t        |       \  a	a
t        d       d ay 7 K# t        $ r}t        d
|        Y d }~?d }~ww xY w# t        $ r(}dt        |       }t        d|        |aY d }~y d }~ww xY ww)Nu3   🧠 Iniciando carga del agente en segundo plano...u"   🔌 Intentando conectar a MCP en z...      )retriesdelayu   📦 z herramientas MCP recibidas.uR   ⚠️ No se recibieron herramientas MCP, el agente tendrá capacidades limitadas.u+   ⚠️ Error recuperando herramientas MCP: u)   🤖 Agente listo para recibir consultas.u$   Fallo en inicialización de agente: u   ❌ )r   r   r   
openai_keyMCP_URLr   len	Exceptionr   agent_executoragent_memoryinitialization_errorstr)	mcp_toolse	error_msgs      r%   r"   r"   ;   s      

?@)Hj1 	27)3?@		E3GRqQQIc)n--IJKjk
 (4J	'J$9:# R
  	E?sCDD	E  ):3q6(C	YK !()si   C4)C  B B*B 9 C  C4B 	B=%B83C  8B==C   	C1	C,'C4,C11C4shutdownc                  4   K   t                d {    y 7 w)N)r   r#   r$   r%   shutdown_eventr9   Z   s     

   s   /c                  6    ddt         r	dt        dS dt        dS )NzAsistente de Vuelos ActivozModular (app/)readyinitializing)message	structurestatusmcp_url)r0   r-   r#   r$   r%   	read_rootrB   b   s/     0%+'	  2@	 r$   z/healthc                      t         rt        ddt         d      t        st        dddi      t        ddt        	      S )
N  	unhealthy)r@   error)status_codedetailr@   r=   healthyT)r@   agent_readyrA   )r2   r	   r0   r   r-   r#   r$   r%   health_checkrK   k   s<    {Ui4jkkX~4NOOgNNr$   z/queryrequestreturnc           
        K   t         s4t        dt        dt        j                        j                               S | j                  j                         }|s4t        dt        dt        j                        j                               S t        d|        	 t        j                  t         j                  d|i      d	
       d {   }t        d       |j                  dg       D cg c]  \  }}|j                   }}}t        ||d   |t         rt#        t         j$                              S d      S 7 sc c}}w # t        j&                  $ r7 t        dt        dt        j(                        j                               cY S t*        $ rG}t        d|        t        dt        dt-        |            j                               cY d }~S d }~ww xY ww)NrD   AgentNotReadyrF   detailsrG   contenti  
BadRequestu   
👤 CONSULTA: inputg     F@)timeoutu   ✅ Respuesta Generadaintermediate_stepsoutputr   )rU   response
used_toolshistory_lengthi  Timeoutu   ❌ Error en query: i  ServerError)r0   r
   r   r   AGENT_NOT_INITIALIZEDdict
user_inputstripEMPTY_QUERYr   r    wait_forainvokegettoolr   r1   r.   bufferTimeoutErrorTIMEOUTr/   r3   )rL   r`   resultaction_rZ   r5   s          r%   handle_queryrm   s   s     !AdAdejjl
 	

 ##))+J"}?X?XY^^` 

 
j\
*+
''""GZ#89
 

 	&' *04H")M
%FAFKK

 
 "H%!7C3|223	
 	
 JK	
 	


  
!	=;P;PQVVX
 	
  
$QC()!s1vFKKM
 	

ss   BG"/E D?$E 0E1E 7G"8E >G"?E E AGG"G<GGG"GG"z/resetc                     K   t         rt         j                          ddiS t        dt        dt        j
                        j                               S w)Nr>   zMemoria reiniciadarD   rO   rP   rR   )r1   clearr
   r   r   r^   r_   r#   r$   r%   reset_memoryrp      sJ     /00O]=`=`affh s   AA)5osr    pathlibr   typingr   r   r   dotenvr   fastapir   r	   fastapi.responsesr
   app.tools.definitionsr   app.services.mcpr   r   app.agents.builderr   app.core.modelsr   r   r   r   app.core.constantsr   r   r   __file__resolveparentr   getenvr,   
ValueErrorr-   r0   r1   r2   appon_eventr&   r"   r9   re   rB   rK   postrm   rp   r#   r$   r%   <module>r      s   	   & &  * * 6 H + [ [ E E >!!#**11 Hv .RYY'(
M+,J
?
@@ "))N$?
@   
)J i7 7)> j! !   O O (/
 /
 /
 /
b ( r$   