
    Yi"                         d dl Z d dlmZmZ d dlZ e j
                  e j                  d        e j                  e      Z	 G d d      Z
y)    N)DictAnyz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)levelformatc                   `    e Zd ZdefdZd Zd Zd ZdefdZ	d Z
d	 Zd
edeeef   defdZy)AgrotaMcpClient
server_urlc                 v    |j                  dd      | _        t        j                  d      | _        d| _        y )Nz/ssez/mcpg      ^@)timeoutF)replacer	   httpxAsyncClientclient_is_connected)selfr	   s     :/opt/agrota/powerbi/client-mcp/app/services/mcp_service.py__init__zAgrotaMcpClient.__init__   s0    $,,VV<''6"    c                 B   K   | j                          d {    | S 7 wN)connectr   s    r   
__aenter__zAgrotaMcpClient.__aenter__   s     lln 	s   c                 @   K   | j                          d {    y 7 wr   )
disconnect)r   exc_typeexc_valexc_tbs       r   	__aexit__zAgrotaMcpClient.__aexit__   s     oos   c                   K   | j                   r*	 | j                   j                          d{    d| _        t        j                  d       y7 !# t        $ r"}t        j	                  d|        Y d}~Ed}~ww xY w# d| _        w xY ww)zCierra el cliente HTTP.NzError al cerrar cliente HTTP: FzDesconectado.)r   aclose	Exceptionloggererrorr   info)r   es     r   r   zAgrotaMcpClient.disconnect   sv     ;;+kk((*** &+"O$ + C=aSABBC &+"sI   BA AA BA 	A<A72A? 7A<<A? ?	BBreturnc                     | j                   S )u$   Verifica si el cliente está activo.)r   r   s    r   is_connectedzAgrotaMcpClient.is_connected$   s    !!!r   c                 x   K   | j                   ryt        j                  d| j                          d| _         yw)uF   Marca el cliente como conectado (sin verificación real de conexión).NzCliente HTTP listo para T)r   r#   r%   r	   r   s    r   r   zAgrotaMcpClient.connect(   s3     .t.?@A!s   8:c                 d   K   ddl m}  |ddg      } |dddg      } | |dd	
      g      S w)zBLista las herramientas disponibles (simulado para compatibilidad).r   )
namedtuple	ToolsListtoolsToolnamedescriptionconsultarAgrotazTTransforma una solicitud en lenguaje natural a DAX y consulta el Power BI de Agrota.)r0   r1   )r.   )collectionsr,   )r   r,   r-   r/   s       r   
list_toolszAgrotaMcpClient.list_tools0   sJ      	+{WI6	&6="9:* v
 	
s   .0	tool_name	argumentsc                 F  K   |dk7  rt        d|       	 t        j                  d| j                          | j                  j                  | j                  d|j                  dd      iddi       d	{   }|j                  d
k(  r"|j                         }|j                  dd      S t        j                  d|j                   d|j                          d|j                   S 7 s# t        $ r'}t        j                  d|        d| cY d	}~S d	}~ww xY ww)z$Llama al endpoint HTTP directamente.r2   zHerramienta desconocida: u$   🌐 Enviando solicitud HTTP POST a prompt zContent-Typezapplication/json)jsonheadersN   resultzSin resultadou   ❌ Error HTTP z: zError del servidor: u%   ❌ Error llamando al endpoint HTTP: z"Error al ejecutar la herramienta: )RuntimeErrorr#   r%   r	   r   postgetstatus_coder:   r$   textr"   )r   r5   r6   responsedatar&   s         r   	call_toolzAgrotaMcpClient.call_tool@   s    ))!:9+FGG	<KK>t>OPQ![[--	h ;<');< .  H ##s*}}xx/::x/C/C.DBx}}oVW-h.B.B-CDD  	<LL@DE7s;;	<sS   D!A!C. 8C,94C. -D!.=C. +D!,C. .	D7DDD!DD!N)__name__
__module____qualname__strr   r   r   r   boolr)   r   r4   r   r   rE    r   r   r   r      sU    #3 # 	%"d ""
 < <c3h <C <r   r   )loggingtypingr   r   r   basicConfigDEBUG	getLoggerrF   r#   r   rK   r   r   <module>rQ      sH         
-- V 
		8	$J< J<r   