o
    h%                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ ddl	m
Z
mZ ddlmZ ddlmZ ejdd	d
ZejddddZejedd dee ddfddZe ejddddfdee fddZedkrse  dS dS )    N)Optional)print   )_async_prompt_patch_anyio_open_process)Agent)_load_agent_configrichziA squad of lightweight composable AI applications built on Hugging Face's Inference Client and MCP stack.)rich_markup_modehelprunzRun the Agent in the CLIT)namer   invoke_without_command)r   
agent_pathreturnc                    s4  t   t| \}}|dg }|dg }t t dt }ttj}d<fdd zEzd}z|	tj  d}W n t
tfyZ   ttj fd	d
 Y nw i }t|dkrjtd |D ]}	|	d }
|	d }d|
 d}t }|D ]&}|d dkr|di n|di }| D ]\}}||v r|| qq|d}t|tr||v r|d |std|
 d qj|
dd }td|
 d| d| ddd td I dH  } r W W |rz	|tj W dS  t
tfy   Y dS w ttj| dS |}|s0t|d!}|r(td"| d# ntd$| d% |||
< |D ]/}|d dkrE|di n|di }| D ]\}}||v rb|| ||||< qOq6qjt  |d}t|tr|}| D ]\}
}|d|
 d|}q{||d< t|d&|d'|d(|d||d)4 I dH ~}| I dH  td*t|j d+ |jD ]}td|jj d, q	     r	 W d  I dH  W W |rz	|tj W dS  t
tfy   Y dS w ttj| dS ztd I dH }dW n* t!y#   td-dd. Y n t"y=   s5 r5Y qtd/dd. Y nw z|j#|d02 z3 dH W } rVsV n r W W d  I dH  W W |rz	|tj W dS  t
tfy   Y dS w ttj| dS t$|d1r|j%d j&}|j'rt|j'd!dd2 |j(r|j(D ].}|j)rtd3|j) d4d!d |jjrt|jj dd |jj*rt|jj* d!d qqFtd5|j d6|j+ d7|j' d8dd. qF6 t  W n& t,y } zt-. }td9| d7| d:dd. dW Y d}~nd}~ww qW d  I dH  n1 I dH s/w   Y  W n  t,yU } zt-. }td;| d7| d:dd. |d}~ww W |rqz	|tj W dS  t
tfyp   Y dS w ttj| dS |rz|tj W w  t
tfy   Y w w ttj| w )=z
    Tiny Agent loop.

    Args:
        agent_path (`str`, *optional*):
            Path to a local folder containing an `agent.json` and optionally a custom `PROMPT.md` or `AGENTS.md` file or a built-in agent stored in a Hugging Face dataset.

    inputsserversTr   Nc                      s8   rd    tddd d S tddd    d S )NFz4
[red]Interrupted. Press Ctrl+C again to quit.[/red]Tflushz
[red]Exiting...[/red])setr    )abort_event
exit_eventfirst_sigintr   X/var/www/html/ai/venv/lib/python3.10/site-packages/huggingface_hub/inference/_mcp/cli.py_sigint_handler5   s   z"run_agent.<locals>._sigint_handlerFc                     s     S )Nr   )_)r   r   r   <lambda>G   s    zrun_agent.<locals>.<lambda>r   z}[bold blue]Some initial inputs are required by the agent. Please provide a value or leave empty to load from env.[/bold blue]iddescriptionz${input:}typestdioenvheadersapiKeyz[yellow]Input 'zS' defined in config but not used by any server or as an API key. Skipping.[/yellow]-r   u   [blue] • z	[/blue]: z. (default: load from z). )end)r    z'[green]Value successfully loaded from 'z	'[/green]z[yellow]No value found for 'z0' in environment variables. Continuing.[/yellow]providermodelendpointUrl)r*   r+   base_urlapi_keyr   promptz[bold blue]Agent loaded with z tools:[/bold blue]z[/blue]z"
[red]EOF received, exiting.[/red]r   z7
[red]Keyboard interrupt during input processing.[/red])r   choices)r(   r   z<Tool >z

[green]Tool[z] 
z	[/green]
z#
[bold red]Error during agent run: [/bold red])
[bold red]An unexpected error occurred: )r   N)/r   r   getasyncioEventget_running_loopsignal	getsignalSIGINTadd_signal_handlerAttributeErrorNotImplementedErrorlenr   r   itemsadd
isinstancestrreplaceupperr   stripis_setremove_signal_handlerosgetenvr   
load_toolsavailable_toolsfunctionr   clearEOFErrorKeyboardInterruptr   hasattrr0   deltacontent
tool_callsr   	argumentstool_call_id	Exception	traceback
format_exc)r   configr/   r   r   looporiginal_sigint_handlersigint_registered_in_loopresolved_inputs
input_iteminput_idr   env_special_valueinput_usagesserverenv_or_headerskeyvalueraw_api_keyenv_variable_key
user_inputfinal_valuesubstituted_api_keyvalagenttchunkrR   calletb_strr   )r   r   r   r   r   	run_agent   sn  $




e
&



G
G




*Ars   zPath to a local folder containing an agent.json file or a built-in agent stored in the 'tiny-agents/tiny-agents' Hugging Face dataset (https://huggingface.co/datasets/tiny-agents/tiny-agents)F)r   show_defaultpathc              
   C   sj   z
t t|  W d S  ty   tddd tjdd ty4 } ztd| ddd |d }~ww )Nz8
[red]Application terminated by KeyboardInterrupt.[/red]Tr      )coder4   r3   )r6   r   rs   rP   r   typerExitrW   )ru   rq   r   r   r   r      s   __main__)r6   rI   r9   rX   typingr   rx   r	   r   
_cli_hacksr   r   rm   r   utilsr   Typerapprun_cli	add_typerrC   rs   callbackArgumentr   __name__r   r   r   r   <module>   sL    
 E
