
    <i)                     X   d dl Z d dlZd dlZd dlmZ d dl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 d dlmZ d d	lmZmZmZmZmZ d d
lmZ d dlmZ  e	         ej>                  e       Z!dZ" ejF                  d      Z$ ejF                  d      Z% ejF                  d      Z&dZ'h dZ( ejR                  e%d      Z*i a+g a, edde&      Z- e       Z.d Z/de0fdZ1de0fdZ2d*de0de0fdZ3de0de0fd Z4de0de0fd!Z5d" Z6d# Z7d$ Z8d% Z9d& Z:e.jw                  d'      d(efd)       Z<y)+    N)	APIRouter)load_dotenv)
ChatOpenAI)AgentExecutorcreate_openai_functions_agent)ConversationBufferMemory)RedisChatMessageHistory)MultiServerMCPClient)DESCRIPCIONES_CREDITOSREQUERIMIENTOSSTICKER_IDSMessageRequestMessageResponse)obtener_agentes)get_intencion_prompt   MCP_URL	REDIS_URLOPENAI_API_KEY	intencion>   asesorinicio
finalizadoT)decode_responseszgpt-4og        )modeltemperatureapi_keyc                    K   	 t        t        t        ddi      } | j                          d {   at        t              at        j                  d       t        j                         D ]D  \  }}|d   r|d   D cg c]  }|j                   c}ng }t        j                  d| d|        F y 7 c c}w # t        $ r"}t        j                  d|        Y d }~y d }~ww xY ww)Nstreamable_http)url	transportu   🔧 MCP listotoolsz  -     → u    ⚠️ Error inicializando MCP: )r
   AGENTEr   	get_tools	all_toolsr   AGENTESloggerinfoitemsname	Exceptionerror)clientnombredatostr"   es         6/opt/tws/coop-23/cliente-mcp/routers/message_routes.pyinicializar_mcpr4   /   s     =%vwM^/_&`a **,,	!),$%$]]_ 	5MFE8=gU7^4QVV4BEKK$vheE734	5	 -
 5  =7s;<<=sQ   C)+B; B4AB; >B6"B; 3C)4B; 6B; ;	C&C!C)!C&&C)whatsappc                 F    t        t        d|        }t        d|d      S )Nsession:)r    
session_idchat_historyT)
memory_keychat_memoryreturn_messages)r	   r   r   )r5   historys     r3   crear_memoriar>   C   s+    %)(8*@UVG#!     c                   K   d|  }d| }t        t        j                  |       d {         }|rt        j                  |d       d {   nd}|r"t        j	                  |t
               d {    ||||fS 7 T7 27 w)Nr7   zmessage_store:estador   )boolredis_clientexistshgetexpireSESSION_TTL)r5   session_keymemoria_keysesion_existerA   s        r3   obtener_estado_sesionrK   O   s     XJ'K";-0K|22;??@M?L<$$[(;;;RZF!!+{;;;&+{:: @; 	<s3   (BA?#BB%B4B5BBBrH   rI   c                    K   t         j                  | t               d {    |r#t         j                  |t               d {    y y 7 *7 wN)rC   rF   rG   )rH   rI   renovar_memorias      r3   renovar_ttlrO   \   sC     


k;
777!!+{;;;  8;s!   AA#AAAAmensajeestado_actualc                 f  K   t               }|t        z  }dj                  t        j	                               }|j                  ||| d       d {   }t        |dd      xs dj                         j                         }t        j                  d|        |t        vr
|t        vr|S |S 7 ]w)Nz, )intencionesintencion_actualinputcontent u   🔍 Detectado: )r   llmjoinr'   keysainvokegetattrstriplowerr(   r)   
ESPECIALES)rP   rQ   promptchainlista_agentesresult	detectados          r3   detectar_agentere   b   s     !#FSLEIIglln-M==$)"  F B/52<<>DDFI
KK"9+./IZ$?s   AB1B/AB1c                    K   t         j                  |        d {    t         j                  |       d {    y 7 "7 wrM   )rC   delete)rH   rI   s     r3   limpiar_sesionrh   v   s7     


k
***


k
*** +*s   A>AA A Ac                 x   K   t        ||       d {    t        | dt        j                  d            S 7 %w)Nu'   🙋 Te conecto con un asesor humano...r   r5   	respuesta
sticker_idrh   r   r   getr5   rH   rI   s      r3   manejar_asesorrp   {   s:     
k
222;??8,  3   :8&:c                 x   K   t        ||       d {    t        | dt        j                  d            S 7 %w)Nu   ¡Gracias por comunicarte! 😊r   rj   rm   ro   s      r3   manejar_finalizadors      s:     
k
2223??<0  3rq   c                    K   t         j                  |ddi       d {    t        ||d       d {    d}t        | |t	        j
                  d            S 7 =7 )w)NrA   r   mappingTrN   u  😊 ¡Estoy aquí para ayudarte a alcanzar tus sueños y metas! ✨
Te ofrezco *Ahorros*, *Créditos*, *Inversiones* y más.

Te puedo asistir con los siguientes servicios: 👇
• Consultar saldo de ahorros
• Bloquear tarjeta de débito
• Solicitar créditos, consultar su cuota y fecha de pago
• Consultar inversiones (Plazo fijo)

Enlaces útiles:
• App Mi23: https://link.app.mi23
• Cooperativa Virtual: https://cooperativa23.com
rj   )rC   hsetrO   r   r   rn   )r5   rH   rI   textos       r3   enviar_menu_iniciorz      sk     


K(H1E

FFF
k;
EEE		? 
 ??8, ! GEs   A!AA!A(A!A!c                    K   t         j                  | d|i       d {    t         j                  |       d {    t        j	                  d| d|        y 7 =7 "w)NrA   ru   u   🔄 Estado r#   )rC   rx   rg   r(   r)   )rH   rI   antesnuevos       r3   actualizar_estador~      s[     


K(E1B

CCC


k
***
KK,ugU5'23 D*s   A!AA!A!A!A!c                   K   t         |    } |j                  d             }|j                  dg       }|rq| dvrmt        t        t        ||      ||d      }|j                  d|i       d {   }t        j                  |t               d {    |j                  d      S |t        z  }	|j                  i       }
||
d	   g d
}| dk(  r't        j                  t        d      |d<   t        |d<   |	j                  |       d {   }t        |dt        |            j!                         }|j#                  d|id|i       t        j                  |t               d {    |S 7 7 7 f7 w)Nprompt_funcr"   )creditos)rX   r"   r`   T)agentr"   memoryverboserU   outputr9   )rU   r9   agent_scratchpadr      )indentrequerimientosdescripciones_creditosrV   )r'   rn   r   r   rX   r[   rC   rF   rG   load_memory_variablesjsondumpsr   r   r\   strr]   save_context)agenterP   memoriarI   r0   r`   r"   executorrc   ra   r=   inputsresprV   s                 r3   ejecutar_agenter      su    FOE%UYY}%'FIIgr"E |+ /CuVT	
  '''(:;;!!+{;;;zz(##
 c\E++B/G /F #'::nQ#G  ,B'( v&&DdIs4y1779G'7+h-@A


k;
777NA <;2 ' 8sJ   A-E5/E-0!E5E/A8E5
E1AE5&E3'E5/E51E53E5z/messagerequestc                   K   | j                   }| j                  j                         }t        j	                  d| d|        t        |       d {   \  }}}}d}d }t        ||       d {   }	|	dk(  rt        |||       d {   S |	dk(  rt        |||       d {   S |	dk(  rE|dk7  r+t        ||||	       d {    t        |||       d {   S t        |||       d {   S |	|k7  r,t        ||||	       d {    t        j                  |	d      }t        |||	|k(         d {    t        |      }
t        |	||
|       d {   }t        j	                  d|	 d|        |	d	k(  r"|j!                         rt#        |      d
kD  r|}d}t%        ||||      S 7 \7 B7 +7 7 7 7 7 7 7 kw)Nu   👤 [z]: rW   r   r   r   rw   u   🤖 [r   
   u@   Perfecto. Aquí tienes los requisitos para ese tipo de crédito.)r5   rk   rl   	imagen_id)r5   rP   r]   r(   r)   rK   re   rp   rs   r~   rz   r   rn   rO   r>   r   isdigitlenr   )r   r5   rP   rJ   rQ   rH   rI   rl   r   r   r   rk   s               r3   recibir_messager      s    Hoo##%G
KK&
#gY/0CXYaCb=b:M=+{J I"7M::F #Hk;GGG'+{KKKH$#KmVTTT+Hk;OOO'+{KKK
 [-PPP __VR0
 k;=AX
ZZZH%G &fgwLLI
KK&I;/0
 	 1 1 3I8K	 W	
 	 e >c ; H L UOK 	Q [
 Ms   AGF.G/F10G	F4
G#F7$GF:GF<G-F>.GG 	.G7G8 GGAG1G4G7G:G<G>G GGG)F)=r   osloggingredis.asyncioasyncioredisfastapir   dotenvr   langchain_openair   langchain.agentsr   r   langchain.memoryr   *langchain_community.chat_message_historiesr	   langchain_mcp_adapters.clientr
   models.dtosr   r   r   r   r   agents.lista_agentesr   agents.deteccionr   	getLogger__name__r(   rG   getenvr   r   
OPENAI_KEYr$   r_   from_urlrC   r'   r&   rX   routerr4   r   r>   rK   rO   re   rh   rp   rs   rz   r~   r   postr    r?   r3   <module>r      sR    	     ' I 5 N > l l 0 1
 			8	$
"))I
BIIk"	RYY'(
	/
u~~i$?
	xS*E	=(C 
;# 
;<3 <S <3 s (+c + +
041l Z=> = =r?   