
    g                        d dl m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  G d dee          Zi fd	eeeef                  d
eeef         fdZej        ej        iZ G d d          Z G d d          ZdddZdddZdS )    )deepcopy)Enum)DictListOptional)InferenceClient   )Pipelinec                   8    e Zd ZdZdZdZdZdZed             Z	dS )MessageRoleuser	assistantsystemz	tool-callztool-responsec                     d | D             S )Nc                     g | ]	}|j         
S  )value).0rs     Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/transformers/agents/llm_engine.py
<listcomp>z%MessageRole.roles.<locals>.<listcomp>#   s    %%%A%%%    r   )clss    r   roleszMessageRole.roles!   s    %%%%%%r   N)
__name__
__module____qualname__USER	ASSISTANTSYSTEM	TOOL_CALLTOOL_RESPONSEclassmethodr   r   r   r   r   r      sF        DIFI#M& & [& & &r   r   message_listrole_conversionsc                    g }t          |           } | D ]}t          |                                          ddhk    st          d          |d         }|t                                          vr-t          d| dt                                           d          ||v r||         |d<   t          |          dk    r8|d         |d         d         k    r |d         dxx         d	|d         z   z  cc<   |                    |           |S )
z
    Subsequent messages with the same role will be concatenated to a single message.

    Args:
        message_list (`List[Dict[str, str]]`): List of chat messages.
    rolecontentz6Message should contain only 'role' and 'content' keys!zIncorrect role z, only z are supported for now.r   z	
=======
)r   setkeys
ValueErrorr   r   lenappend)r$   r%   final_message_listmessager'   s        r   get_clean_message_listr1   &   s7    L))L / /7<<>>""vy&999UVVVv{((****hthhK<M<M<O<Ohhhiii###.t4GFO!""Q&&76?>PQS>TU[>\+\+\r"9---AS1SS----%%g....r   c            	       r    e Zd ZdZddefdZg dfdeeeef                  dee         dee         d	efd
Z	dS )HfApiEnginezkThis engine leverages Hugging Face's Inference API service, either serverless or with a dedicated endpoint.%meta-llama/Meta-Llama-3.1-8B-Instructmodelc                 J    || _         t          | j         d          | _        d S )Nx   )timeout)r5   r   client)selfr5   s     r   __init__zHfApiEngine.__init__I   s#    
%dj#>>>r   Nmessagesstop_sequencesgrammarreturnc                 N   t          |t                    }|| j                            ||d|          }n| j                            ||d          }|j        d         j        j        }|D ]6}|t          |           d          |k    r|d t          |                    }7|S )Nr%     )stop
max_tokensresponse_format)rC   rD   r   )r1   llama_role_conversionsr9   chat_completionchoicesr0   r(   r-   )r:   r<   r=   r>   responsestop_seqs         r   __call__zHfApiEngine.__call__M   s     *(E[\\\ {22~$PW 3  HH {228.]a2bbH#A&.6 ' 	6 	6HX(()X55#$4s8}}n$45r   )r4   )
r   r   r   __doc__strr;   r   r   r   rK   r   r   r   r3   r3   F   s        uu? ?c ? ? ? ?
 KMgk T#s(^,>B3iW_`cWd	     r   r3   c            	       z    e Zd ZdZdefdZ	 d
deeeef                  de	ee                  de	e         defd	Z
dS )TransformersEnginezBThis engine uses a pre-initialized local text-generation pipeline.pipelinec                     || _         d S )N)rP   )r:   rP   s     r   r;   zTransformersEngine.__init__g   s     r   Nr<   r=   r>   r?   c                 "   t          |t                    }|                     ||d| j        j                  }|d         d         d         d         }|9|D ]6}|t	          |           d          |k    r|d t	          |                    }7|S )NrA   rB   )stop_strings
max_length	tokenizerr   generated_textr)   r(   )r1   rF   rP   rU   r-   )r:   r<   r=   r>   outputrI   rJ   s          r   rK   zTransformersEngine.__call__j   s     *(E[\\\ 'm-	  
 
 !9-.r29= %* : :S]]N,,-99'(83x==.(89Hr   )NN)r   r   r   rL   r
   r;   r   r   rM   r   rK   r   r   r   rO   rO   d   s        LL! ! ! ! ! tx T#s(^,>FtCy>Qcklocp	     r   rO   regexzhThought: .+?\nAction:\n\{\n\s{4}"action":\s"[^"\n]+",\n\s{4}"action_input":\s"[^"\n]+"\n\}\n<end_action>)typer   zCThought: .+?\nCode:\n```(?:py|python)?\n(?:.|\s)+?\n```<end_action>N)copyr   enumr   typingr   r   r   huggingface_hubr   pipelines.baser
   rM   r   r1   r"   r   rF   r3   rO   DEFAULT_JSONAGENT_REGEX_GRAMMARDEFAULT_CODEAGENT_REGEX_GRAMMARr   r   r   <module>ra      sy  "             ' ' ' ' ' ' ' ' ' ' + + + + + + % % % % % %	& 	& 	& 	& 	&#t 	& 	& 	& ce  d38n)= QUVY[^V^Q_    8 {/ 
       <       >  F# #  W# #   r   