
    Ng'!                     b   d dl Z d dlZd dlmZ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mZ d dlmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZ d dl m!Z!m"Z"m#Z#m$Z$  ej%        e&          Z'd	Z(d
ede)fdZ*dee+ef         de	edf         fdZ,dee+ef         defdZ- G d de          Z.dS )    N)AnyDictIteratorListMappingOptionalUnion)CallbackManagerForLLMRun)BaseChatModelgenerate_from_stream)	AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkHumanMessageHumanMessageChunk)ChatGenerationChatGenerationChunk
ChatResult)convert_to_secret_strget_from_dict_or_env)
ConfigDictField	SecretStrmodel_validatorzhttps://api.coze.commessagereturnc                 ^    t          | t                    rd| j        dd}nd| j        dd}|S )Nusertext)rolecontentcontent_type	assistant)
isinstancer   r$   )r   message_dicts     `/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/coze.py_convert_message_to_dictr*   !   sN    '<(( 
"
 
  "
 

     _dictc                     | d         }|dk    rd S | d         }|dk    rt          | d                   S |dk    r&t          |                     dd          pd          S t          | d         |	          S )
Ntypeanswerr#   r!   r$   r$   r&    r$   r#   )r   r   getr   )r,   msg_typer#   s      r)   _convert_dict_to_messager5   2   s    V}H8t=Dv~~E)$45555			9b!9!9!?R@@@@5#3$????r+   c                     |                      d          }|                      d          pd}|dk    rt          |          S |dk    rt          |          S t          ||          S )Nr#   r$   r1   r!   r0   r&   r2   )r3   r   r   r   )r,   r#   r$   s      r)   _convert_delta_to_message_chunkr7   ?   sr    99VDii	""(bGv~~ 1111			g....d;;;;r+   c                      e Zd ZU dZedeeef         fd            Zedefd            Z	 e
e          Zeed<   	 dZee         ed<   	  e
d	d
          Zeed<   	  e
d          Zeed<   	  e
d          Zeed<   	  e
d          Zeed<   	 dZeed<   	  ed          Z ed          ededefd                        Zedeeef         fd            Z	 	 d#dee         deee                  dee          dede!f
dZ"	 	 d#dee         deee                  dee          dede#e$         f
dZ%dee         dede&j'        fd Z(dee)eef                  de!fd!Z*edefd"            Z+dS )$ChatCozezlChatCoze chat models API by coze.com

    For more information, see https://www.coze.com/open/docs/chat
    r   c                 
    ddiS )Ncoze_api_keyCOZE_API_KEY selfs    r)   
lc_secretszChatCoze.lc_secretsQ   s     N
 	
r+   c                     dS )NTr=   r>   s    r)   lc_serializablezChatCoze.lc_serializableW   s    tr+   )defaultcoze_api_baseNr;   <   timeout)rC   aliasrequest_timeoutr1   bot_idconversation_idr!   F	streamingT)populate_by_namebefore)modevaluesc                 |    t          |ddt                    |d<   t          t          |dd                    |d<   |S )NrD   COZE_API_BASEr;   r<   )r   DEFAULT_API_BASEr   )clsrO   s     r)   validate_environmentzChatCoze.validate_environmentv   sW     #7	#
 #
 "7  "
 "
~ r+   c                 8    | j         | j        | j        | j        dS )z0Get the default parameters for calling Coze API.rI   rJ   r!   rK   rV   r>   s    r)   _default_paramszChatCoze._default_params   s(     k#3I	
 
 	
r+   messagesstoprun_managerkwargsc           
      x   | j         r  | j        d
|||d|}t          |          S  | j        |fi |}|                                }|d         dk    r<t          d|d          d|d          d|j                            d                     |                     |                    d	          pg           S )N)rX   rY   rZ   coder   Error from Coze api response: z: msg	, logid: 
X-Tt-LogidrX   r=   )	rK   _streamr   _chatjson
ValueErrorheadersr3   _create_chat_result)r?   rX   rY   rZ   r[   stream_iterrress           r)   	_generatezChatCoze._generate   s     > 	5&$, !+ IO K (444DJx**6**ffhhv;!8V 8 8E
 8 8)--558 8  
 ''
(;(;(ArBBBr+   c              +   "  K    | j         |fi |}|                                D ]}|                    d                              d          }|                    dd          }t          |          dk    r|d         nd }|`t          j        |          }|d         dk    r d S |d         dk    s|d         d         d	k    rt          |d                   }t          |
          }	|r|
                    |j        |	           |	V  d S )Nzutf-8z
zdata:   eventdoner   r.   r/   r   )chunk)rc   
iter_linesdecodestripsplitlenrd   loadsr7   r   on_llm_new_tokenr$   )
r?   rX   rY   rZ   r[   rj   rq   partsresponsecg_chunks
             r)   rb   zChatCoze._stream   s8      dj,,V,,^^%% 	 	ELL))//77EKK++E #E

QE!HHDE}z%((H F**!Y..I&v.(::3HY4GHHE*5999H L,,U](,KKKNNNN%	 	r+   c                    i | j         |}d}g }|D ]A}t          |t                    r|j         }|                    t          |                     B|                    d          }|                    d          }|                    d          }	|                    d          }
|||	||
d}|r||d<   | j        dz   }d}| j        r| j        	                                }t          j        || j        d	d
| d||
          }|j        dk    r/|j                            d          }t!          d| d|           |S )Nr1   rJ   rI   r!   rK   )rJ   rI   r!   querystreamchat_historyz/open_api/v2/chatzapplication/jsonzBearer )zContent-TypeAuthorization)urlrF   rf   rd   r~      ra   r^   r`   )rW   r'   r   r$   appendr*   poprD   r;   get_secret_valuerequestspostrH   status_coderf   r3   re   )r?   rX   r[   
parametersr}   r   r_   rJ   rI   r!   rK   payloadr   api_keyrj   logids                   r)   rc   zChatCoze._chat   s   7,77
 	? 	?C#|,, );( 8 = =>>>>$..):;;))~~f%%NN;//	  /
 
  	3&2GN# #66 	;'88::Gm( 2!47!4!4  	
 	
 	
 ?c!!KOOL11EScSSESSTTT
r+   c                     g }|D ]6}t          |          }|r#|                    t          |                     7ddd}t          ||          S )Nrp   r1   )token_usagemodel)generations
llm_output)r5   r   r   r   )r?   rX   r   cr_   r   s         r)   rg   zChatCoze._create_chat_result   sn     	@ 	@A*1--C @"">##>#>#>???%'"55
kjIIIIr+   c                     dS )Nz	coze-chatr=   r>   s    r)   	_llm_typezChatCoze._llm_type   s    {r+   )NN),__name__
__module____qualname____doc__propertyr   strr@   boolrB   r   rR   rD   __annotations__r;   r   r   rH   intrI   rJ   r!   rK   r   model_configr   classmethodr   rT   rW   r   r   r
   r   rk   r   r   rb   r   Responserc   r   rg   r   r=   r+   r)   r9   r9   K   sF         
 
DcN 
 
 
 X

     X '7888M3888(,L(9%,,, 59===OS===0%###FC###8 5,,,OS,,,6 b!!!D#!!!:ItS :  L _(###$ 3    [ $#" 
c3h 
 
 
 X
 %):>	C C{#C tCy!C 67	C
 C 
C C C C4 %):>	 {# tCy! 67	
  
%	&   8+d;/ +3 +8CT + + + +ZJDc1B,C J
 J J J J 3    X  r+   r9   )/rd   loggingtypingr   r   r   r   r   r   r	   r   langchain_core.callbacksr
   *langchain_core.language_models.chat_modelsr   r   langchain_core.messagesr   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   langchain_core.utilsr   r   pydanticr   r   r   r   	getLoggerr   loggerrR   dictr*   r   r5   r7   r9   r=   r+   r)   <module>r      sC     F F F F F F F F F F F F F F F F F F  = = = = = =       	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 S R R R R R R R R R        C B B B B B B B B B B B		8	$	$) k d    "
@GCH$5 
@%T@Q:R 
@ 
@ 
@ 
@	<738+< 	<AQ 	< 	< 	< 	<t t t t t} t t t t tr+   