
    Ng                         d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZ d dlmZ d dlmZ  ej        e          Zdd	iZd
ZdedefdZ G d de
          ZdS )    N)AnyListOptionalUnion)CallbackManagerForLLMRun)LLM)	AIMessageBaseMessageFunctionMessageHumanMessageSystemMessage)Field)enforce_stop_tokenszContent-Typezapplication/json   messagereturnc                 *   t          | t                    rd| j        d}nrt          | t                    rd| j        d}nRt          | t                    rd| j        d}n2t          | t
                    rd| j        d}nt          d|            |S )Nuser)rolecontent	assistantsystemfunctionzGot unknown type )
isinstancer   r   r	   r   r   
ValueError)r   message_dicts     ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/chatglm3.py_convert_message_to_dictr      s    '<(( 	8 &7?CC	GY	'	' 8 +HH	G]	+	+ 8 (W_EE	G_	-	- 8 *wGG6W66777    c                      e Zd ZU dZ edd          Zeed<   dZeed<   	 dZ	e
e         ed	<   	 d
Zeed<   	 dZeed<   	 dZeed<   	  ee          Zee         ed<   	 dZeed<   	 dZeedf         ed<   eZeed<   edefd            Zedefd            Zedefd            ZdedefdZ 	 	 d dede
ee                  de
e!         dedef
dZ"dS )!ChatGLM3zChatGLM3 LLM service.zchatglm3-6bmodel)defaultalias
model_namez)http://127.0.0.1:8000/v1/chat/completionsendpoint_urlNmodel_kwargsi N  
max_tokensg?temperaturegffffff?top_p)default_factoryprefix_messagesF	streaminghttp_clienttimeoutr   c                     dS )N
chat_glm_3 )selfs    r   	_llm_typezChatGLM3._llm_type:   s    |r   c                 ^    | j         | j        | j        | j        | j        d}i || j        pi S )z,Get the parameters used to invoke the model.)r"   r)   r(   r*   stream)r%   r)   r(   r*   r-   r'   )r3   paramss     r   _invocation_paramszChatGLM3._invocation_params>   sD     _+/Zn
 
 7&6T.4"66r   c                 N    dd l }| j        p|                    | j                  S )Nr   )r/   )httpxr.   Clientr/   )r3   r:   s     r   clientzChatGLM3.clientJ   s)    E5<<<#E#EEr   promptc                     | j         }| j        t          |          gz   }|                    dd |D             i           |S )N)r   messagesc                 ,    g | ]}t          |          S r2   )r   ).0ms     r   
<listcomp>z)ChatGLM3._get_payload.<locals>.<listcomp>U   s!    KKKQ5a88KKKr   )r8   r,   r   update)r3   r=   r7   r?   s       r   _get_payloadzChatGLM3._get_payloadP   s[    ('<+G+G+G*HHKK(KKK	
 	
 	

 r   stoprun_managerkwargsc                    ddl }|                     |          }t                              d|            	 | j                            | j        t          |          }n$# |j        $ r}t          d|           d}~ww xY wt                              d|            |j
        dk    rt          d|           	 |                                }	t          |	t                    rDd	}
|
|	v r,|	|
         }t          |          r|d         d
         d         }n$t          d|	           t          d|	           n1# t          j        $ r}t          d| d|j                   d}~ww xY w|t#          ||          }|S )ax  Call out to a ChatGLM3 LLM inference endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                response = chatglm_llm.invoke("Who are you?")
        r   NzChatGLM3 payload: )headersjsonz$Error raised by inference endpoint: zChatGLM3 response:    zFailed with response: choicesr   r   zNo content in response : zUnexpected response type: z?Error raised during decoding response from inference endpoint: z.
Response: )r:   rE   loggerdebugr<   postr&   HEADERSNetworkErrorr   status_coderK   r   dictlenJSONDecodeErrortextr   )r3   r=   rF   rG   rH   r:   payloadresponseeparsed_responsecontent_keysrM   rW   s                r   _callzChatGLM3._callZ   s   * 	##F++3'33444	I{''!7 (  HH ! 	I 	I 	IGAGGHHH	I 	58556663&&@h@@AAA	&mmooO/400 	Q(?22-l;G7|| @&qz)4Y?$%R%R%RSSS !Oo!O!OPPP# 	 	 	/RS / /'}/ /  	 &tT22Ds0   'A   
B*A<<B?A?D? ?E-E((E-)NN)#__name__
__module____qualname____doc__r   r%   str__annotations__r&   r'   r   rT   r(   intr)   floatr*   listr,   r   r
   r-   boolr.   r   r   DEFAULT_TIMEOUTr/   propertyr4   r8   r<   rE   r   r]   r2   r   r   r!   r!   %   s        eMAAAJAAACL#CCC#'L(4.'''1J1K-E50).t)D)D)DOT+&DDD,It/$(KsDy!((("GS"""3    X 	7D 	7 	7 	7 X	7 F F F F XF
3 4     %):>	= == tCy!= 67	=
 = 
= = = = = =r   r!   )rK   loggingtypingr   r   r   r   langchain_core.callbacksr   #langchain_core.language_models.llmsr   langchain_core.messagesr	   r
   r   r   r   pydanticr   langchain_community.llms.utilsr   	getLoggerr^   rN   rQ   rh   rT   r   r!   r2   r   r   <module>rr      sM     - - - - - - - - - - - - = = = = = = 3 3 3 3 3 3                    > > > > > >		8	$	$-
.k d    r r r r rs r r r r rr   