U
    ÎèÕjT  ã                   @   s¾   d dl Z d dl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 ddd	d
did
didœdgdœdœddd	dd
diidgdœdœddd	i dœdœgZdd„ Zdd„ Zdd„ ZdS )é    N)ÚMODELÚSYSTEM_PROMPT)Úobtener_clave)Úconsultar_programacion)Úbuscar_internet)Úejecutar_herramientar   u_   Busca en las EPG privadas de Sling, Paramount, USA y MÃ©xico. Devuelve programaciÃ³n y canales.ZOBJECTÚtypeÚSTRINGZINTEGER)ÚterminoÚdiasr
   )r   Ú
propertiesZrequired)ÚnameZdescriptionZ
parametersÚinvestigar_internetuU   Busca informaciÃ³n deportiva actualizada en Internet y devuelve fuentes verificables.ÚpreguntaÚconsultar_servidoru+   Consulta CPU, RAM, disco y trÃ¡fico de red.)r   r   c              
   C   sŒ   dt › d�}ddtd igi| dtigddid	œ}tjj|t |¡ d
¡dt	ƒ dœdd�}tjj
|dd��}t |¡W  5 Q R £ S Q R X d S )Nz8https://generativelanguage.googleapis.com/v1beta/models/z:generateContentÚpartsÚtextuü  
Utiliza herramientas cuando necesites datos reales.

Para preguntas deportivas:
- Consulta las EPG para identificar programaciÃ³n.
- Utiliza Internet para verificar eventos actuales.
- No confundas programas con partidos.
- No inventes horarios, canales ni fuentes.
- Si una bÃºsqueda web no se ejecutÃ³, dilo.
- Las EPG no garantizan disponibilidad de streaming.

Para preguntas del VPS:
- Consulta las herramientas reales.
- No inventes mÃ©tricas.

No ejecutes acciones administrativas sin autorizaciÃ³n.
ZfunctionDeclarationsZmaxOutputTokensi°  )ZsystemInstructionÚcontentsZtoolsZgenerationConfigzutf-8zapplication/json)zContent-Typezx-goog-api-keyZPOST)ÚdataZheadersÚmethodé-   )Ztimeout)r   r   ÚDECLARACIONESÚurllibZrequestZRequestÚjsonÚdumpsÚencoder   ZurlopenÚload)Ú
contenidosZurlZpayloadZreqÚr© r   úhermes_research_v2.pyÚllamar_gemini4   s2    
ÿ ÿÿ ÿ ÿæþù
r!   c                 C   sN   | dkrt |d | dd¡ƒS | dkr2t|d ƒS | dkrBtdƒS tdƒ‚d S )	Nr   r
   r   é   r   r   r   zHerramienta no autorizada)r   Úgetr   r   Ú
ValueError)ÚnombreÚargsr   r   r    Úejecutar_herramienta_researchg   s    
þr'   c                 C   sú   dd| igdœg}t dƒD ]Ò}t|ƒ}|d d d }dd	„ | d
g ¡D ƒ}|sxd dd„ | d
g ¡D ƒ¡ ¡ }|  S | |¡ g }|d d… D ]H}|d }	| di ¡}
td|	dd� t|	|
ƒ}| d|	d|idœi¡ q’| d|dœ¡ qtdƒ‚d S )NÚuserr   )Zroler   r"   Z
candidatesr   Zcontentc                 S   s   g | ]}d |kr|d  ‘qS )ZfunctionCallr   ©Ú.0Úpr   r   r    Ú
<listcomp>�   s   þzinvestigar.<locals>.<listcomp>r   Ú c                 s   s   | ]}|  d d¡V  qdS )r   r-   N)r#   r)   r   r   r    Ú	<genexpr>ˆ   s   ÿzinvestigar.<locals>.<genexpr>r   r&   z[HERMES TOOL]T)ÚflushZfunctionResponseÚresult)r   Zresponseu+   Hermes superÃ³ el lÃ­mite de investigaciÃ³n)	Úranger!   r#   ÚjoinÚstripÚappendÚprintr'   ÚRuntimeError)r   r   ZvueltaZ	resultadoZ	contenidoZllamadasZ	respuestaZ
respuestasZllamadar%   r&   Zdatosr   r   r    Ú
investigarw   sJ    þ
þ

þ
 ÿþÿþ
ÿr7   )r   Zurllib.requestr   Zhermes_brainr   r   Zhermes_brain_v2r   Zhermes_epg_toolr   Z
hermes_webr   Zhermes_toolsr   r   r!   r'   r7   r   r   r   r    Ú<module>   sD   þúú ÿûúþûâ*3