
    Ng                     
   d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlmZ ddlmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZ dee         ddfdZ	 ddee         de	ee                  defdZ G d de          ZdS )z<ChatModel wrapper which returns user input as the response..    )StringIO)AnyCallableDictListMappingOptionalN)CallbackManagerForLLMRun)BaseChatModel)BaseMessageHumanMessage_message_from_dictmessages_to_dict)ChatGeneration
ChatResult)Field)enforce_stop_tokensmessagesreturnc           	          t          |           }|D ]L}t          j        |ddddd           }t          ddd           t          |           t          dd           Md S )	NFTi'  )default_flow_style	sort_keysallow_unicodewidth
line_break
z ======= start of message =======z

z======= end of message =======)r   yamldumpprint)r   dict_messagesmessageyaml_strings       a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/human.py_display_messagesr$      s    $X..M  8 8i$
 
 
 	d6???k.77778 8    stopc                 h   g }	 t                                                      sn4|rt          fd|D                       rn|                               Wd                    |          }	 t          t          j        t          |                              }|t          d          S |rDt          |j        t                    rt          |j        |          |_        nt          d          |S # t          j        $ r t          d          t          $ r t          d	          w xY w)
z3Collects and returns user input as a single string.Tc              3       K   | ]}|v V  	d S N ).0seqlines     r#   	<genexpr>z&_collect_yaml_input.<locals>.<genexpr>0   s'      44t444444r%   r   N )contentz'Cannot use when output is not a string.zInvalid YAML string entered.zInvalid message entered.)inputstripanyappendjoinr   r   	safe_loadr   r   
isinstancer0   strr   
ValueError	YAMLError)r   r&   linesr"   r!   r-   s        @r#   _collect_yaml_inputr<   '   sR    Ewwzz|| 	 	C4444t44444 	T ))E""K5$T^H[4I4I%J%JKK?++++ 	L'/3// L"5got"L"L !JKKK> 9 9 97888 5 5 534445s   2?C: 2AC: :7D1c                   @   e Zd ZU dZ ed           Zeed<    ed           Zeed<   dZ	e
ed<   i Zee
ef         ed	<   i Zee
ef         ed
<   edee
ef         fd            Zede
fd            Z	 	 ddee         deee
                  dee         dedef
dZdS )HumanInputChatModelz3ChatModel which returns user input as the response.c                      t           S r)   )r<   r*   r%   r#   <lambda>zHumanInputChatModel.<lambda>I   s    9L r%   )default_factory
input_funcc                      t           S r)   )r$   r*   r%   r#   r@   zHumanInputChatModel.<lambda>J   s    ;L r%   message_funcr   	separatorinput_kwargsmessage_kwargsr   c                 4    | j         j        | j        j        dS )N)rB   rD   )rB   __name__rD   selfs    r#   _identifying_paramsz'HumanInputChatModel._identifying_paramsO   s$     /2 -6
 
 	
r%   c                     dS )zReturns the type of LLM.zhuman-input-chat-modelr*   rJ   s    r#   	_llm_typezHumanInputChatModel._llm_typeV   s
     ('r%   Nr   r&   run_managerkwargsc                      | j         |fi | j          | j        |fd|i| j        }t	          t          |          g          S )a  
        Displays the messages to the user and returns their input as a response.

        Args:
            messages (List[BaseMessage]): The messages to be displayed to the user.
            stop (Optional[List[str]]): A list of stop strings.
            run_manager (Optional[CallbackManagerForLLMRun]): Currently not used.

        Returns:
            ChatResult: The user's input as a response.
        r&   )r!   )generations)rD   rG   rB   rF   r   r   )rK   r   r&   rO   rP   
user_inputs         r#   	_generatezHumanInputChatModel._generate[   sb    $ 	(::d&9:::$T_XNNDND<MNN
~j'I'I'I&JKKKKr%   )NN)rI   
__module____qualname____doc__r   rB   r   __annotations__rD   rE   r8   rF   r   r   rG   propertyr   rL   rN   r   r   r	   r
   r   rT   r*   r%   r#   r>   r>   F   se        == 51L1LMMMJMMM"U3L3LMMML(MMMIs&(L'#s(#((((*NGCH%***
T#s(^ 
 
 
 X
 (3 ( ( ( X( %):>	L L{#L tCy!L 67	L
 L 
L L L L L Lr%   r>   r)   )rW   ior   typingr   r   r   r   r   r	   r   langchain_core.callbacksr
   *langchain_core.language_models.chat_modelsr   langchain_core.messagesr   r   r   r   langchain_core.outputsr   r   pydanticr   langchain_community.llms.utilsr   r$   r8   r<   r>   r*   r%   r#   <module>rb      s   B B       ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?       E D D D D D            > = = = = = = =       > > > > > >8[ 1 8d 8 8 8 8" >B5 5;5'/S	':55 5 5 5>)L )L )L )L )L- )L )L )L )L )Lr%   