
    7|h                         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y)    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}|S t        | t              rd| j                  d}|S t        | t              rd| j                  d}|S t        | t
              rd| j                  d}|S t        d|        )Nuser)rolecontent	assistantsystemfunctionzGot unknown type )
isinstancer   r   r	   r   r   
ValueError)r   message_dicts     `/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/chatglm3.py_convert_message_to_dictr      s    '<( &7??C  
GY	' +H  
G]	+ (W__E
 	 
G_	- *wG  ,WI677    c                   f   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"y)!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                      y)N
chat_glm_3 )selfs    r   	_llm_typezChatGLM3._llm_type:   s    r   c                     | j                   | j                  | j                  | j                  | j                  d}i || j
                  xs 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>   sM     __++//ZZnn
 7&6T..4"66r   c                 ^    dd l }| j                  xs |j                  | j                        S )Nr   )r/   )httpxr.   Clientr/   )r3   r:   s     r   clientzChatGLM3.clientJ   s%    E5<<<#EEr   promptc           	          | j                   }| j                  t        |      gz   }|j                  d|D cg c]  }t	        |       c}i       |S c c}w )N)r   messages)r8   r,   r   updater   )r3   r=   r7   r?   ms        r   _get_payloadzChatGLM3._get_payloadP   sY    ((''<+G*HH(KQ5a8K	

  Ls   A
stoprun_managerkwargsc                    ddl }| j                  |      }t        j                  d|        	 | j                  j                  | j                  t        |      }t        j                  d|        |j                  dk7  rt        d|       	 |j                         }	t        |	t              r0d	}
|
|	v r|	|
   }t        |      r(|d   d
   d   }nt        d|	       t        d|	       |t#        |      }S # |j                  $ r}t        d|       d}~ww xY w# t        j                  $ r }t        d| d|j                          d}~ww xY w)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:   rB   loggerdebugr<   postr&   HEADERSNetworkErrorr   status_coderH   r   dictlenJSONDecodeErrortextr   )r3   r=   rC   rD   rE   r:   payloadresponseeparsed_responsecontent_keysrJ   rT   s                r   _callzChatGLM3._callZ   s   * 	##F+)'34	I{{''!!7 ( H 	*8*563&5hZ@AA	&mmoO/40(?2-l;G7|&qz)4Y?$'@@Q%RSS #=o=N!OPP &tT2D? !! 	ICA3GHH	I, ## 	QRSQT U'}}o/ 	s0   ,C? AD$ ?D!DD!$E7EE)NN)#__name__
__module____qualname____doc__r   r%   str__annotations__r&   r'   r   rQ   r(   intr)   floatr*   listr,   r   r
   r-   boolr.   r   r   DEFAULT_TIMEOUTr/   propertyr4   r8   r<   rB   r   rZ   r2   r   r   r!   r!   %   sM   MAJACL#C#'L(4.'1J1K-E50).t)DOT+&D,It/$(KsDy!("GS"3   	7D 	7 	7 F F F
3 4  %):>	== tCy!= 67	=
 = 
=r   r!   )rH   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[   rK   rN   re   rQ   r   r!   r2   r   r   <module>ro      sl      - - = 3   >			8	$-
.k d rs rr   