
    dh'!                     R   S SK r S SKrS SKJrJrJrJrJrJrJ	r	  S SK
r
S SKJr  S SKJrJr  S SKJrJrJrJrJrJrJrJr  S SKJrJrJr  S SKJrJr  S SK J!r!J"r"J#r#J$r$  \RJ                  " \&5      r'S	r(S
\S\)4S jr*S\\+\4   S\	\S4   4S jr,S\\+\4   S\4S jr- " S S\5      r.g)    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    [        U [        5      (       a  SU R                  SS.nU$ SU R                  SS.nU$ )Nusertext)rolecontentcontent_type	assistant)
isinstancer   r$   )r   message_dicts     \/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/coze.py_convert_message_to_dictr*   !   sI    '<(("
 	  "

     _dictc                     U S   nUS:w  a  g U S   nUS:X  a  [        U S   S9$ US:X  a"  [        U R                  SS5      =(       d    SS9$ [        U S   US	9$ )
Ntypeanswerr#   r!   r$   r$   r&    r$   r#   )r   r   getr   )r,   msg_typer#   s      r)   _convert_dict_to_messager5   2   sk    V}H8=Dv~E)$455		9b!9!?R@@5#3$??r+   c                     U R                  S5      nU R                  S5      =(       d    SnUS:X  a	  [        US9$ US:X  a	  [        US9$ [        X!S9$ )Nr#   r$   r1   r!   r0   r&   r2   )r3   r   r   r   )r,   r#   r$   s      r)   _convert_delta_to_message_chunkr7   ?   sS    99VDii	"(bGv~ 11		g..;;r+   c                   <   \ rS rSr% Sr\S\\\4   4S j5       r\S\	4S j5       r
\" \S9r\\S'    Sr\\   \S	'    \" S
SS9r\\S'    \" SS9r\\S'    \" SS9r\\S'    \" SS9r\\S'    Sr\	\S'    \" SS9r\" SS9\S\S\4S j5       5       r\S\\\4   4S j5       r  S%S\\    S\\\      S\\!   S\S\"4
S jjr#  S%S\\    S\\\      S\\!   S\S\$\%   4
S  jjr&S\\    S\S\'RP                  4S! jr)S\\*\\4      S\"4S" jr+\S\4S# j5       r,S$r-g)&ChatCozeK   zdChatCoze chat models API by coze.com

For more information, see https://www.coze.com/open/docs/chat
r   c                 
    SS0$ )Ncoze_api_keyCOZE_API_KEY selfs    r)   
lc_secretsChatCoze.lc_secretsQ   s     N
 	
r+   c                     g)NTr>   r?   s    r)   lc_serializableChatCoze.lc_serializableW   s    r+   )defaultcoze_api_baseNr<   <   timeout)rF   aliasrequest_timeoutr1   bot_idconversation_idr!   F	streamingT)populate_by_namebefore)modevaluesc                 b    [        USS[        5      US'   [        [        USS5      5      US'   U$ )NrG   COZE_API_BASEr<   r=   )r   DEFAULT_API_BASEr   )clsrR   s     r)   validate_environmentChatCoze.validate_environmentv   sH     #7	#
 "7 "
~ r+   c                 `    U R                   U R                  U R                  U R                  S.$ )z0Get the default parameters for calling Coze API.rL   rM   r!   rN   rZ   r?   s    r)   _default_paramsChatCoze._default_params   s,     kk#33II	
 	
r+   messagesstoprun_managerkwargsc           
      t   U R                   (       a   U R                  " S
XUS.UD6n[        U5      $ U R                  " U40 UD6nUR	                  5       nUS   S:w  a3  [        SUS    SUS    SUR                  R                  S5       35      eU R                  UR                  S	5      =(       d    / 5      $ )N)r]   r^   r_   coder   Error from Coze api response: z: msg	, logid: 
X-Tt-Logidr]   r>   )	rN   _streamr   _chatjson
ValueErrorheadersr3   _create_chat_result)r@   r]   r^   r_   r`   stream_iterrress           r)   	_generateChatCoze._generate   s     >>,, !+IOK (44JJx*6*ffhv;!0VRE
| L))--568 
 ''
(;(ArBBr+   c              +     #    U R                   " U40 UD6nUR                  5        H  nUR                  S5      R                  S5      nUR	                  SS5      n[        U5      S:  a  US   OS nUc  MP  [        R                  " U5      nUS   S:X  a    g US   S:w  d  US   S   S	:w  a  M  [        US   5      n[        US
9n	U(       a  UR                  UR                  U	S9  U	v   M     g 7f)Nzutf-8z
zdata:   eventdoner   r.   r/   r   )chunk)rh   
iter_linesdecodestripsplitlenri   loadsr7   r   on_llm_new_tokenr$   )
r@   r]   r^   r_   r`   ro   rw   partsresponsecg_chunks
             r)   rg   ChatCoze._stream   s      jj,V,^^%ELL)//7EKK+E #E
QE!HDE}zz%(H F*!Y.I&v.(:3HY4GHE*59H,,U]](,KN% &s   C-C/c                    0 U R                   EUEnSn/ nU H?  n[        U[        5      (       a  UR                   nUR	                  [        U5      5        MA     UR                  S5      nUR                  S5      nUR                  S5      n	UR                  S5      n
UUU	UU
S.nU(       a  X[S'   U R                  S-   nSnU R                  (       a  U R                  R                  5       n[        R                  " UU R                  S	S
U 3S.UU
S9nUR                  S:w  a,  UR                  R                  S5      n[!        SU SU 35      eU$ )Nr1   rM   rL   r!   rN   )rM   rL   r!   querystreamchat_historyz/open_api/v2/chatzapplication/jsonzBearer )zContent-TypeAuthorization)urlrI   rk   ri   r      rf   rc   re   )r[   r'   r   r$   appendr*   poprG   r<   get_secret_valuerequestspostrK   status_coderk   r3   rj   )r@   r]   r`   
parametersr   r   rd   rM   rL   r!   rN   payloadr   api_keyro   logids                   r)   rh   ChatCoze._chat   s\   7,,77
C#|,,;;- 8 => 
 %..):;)~~f%NN;/	  /
 &2N#  #66''88:Gmm(( 2#*7)!4 	
 ??c!KKOOL1E=cU)E7STT
r+   c                     / nU H/  n[        U5      nU(       d  M  UR                  [        US95        M1     SSS.n[        X%S9$ )Nrv   r1   )token_usagemodel)generations
llm_output)r5   r   r   r   )r@   r]   r   crd   r   s         r)   rl   ChatCoze._create_chat_result   sJ    A*1-Cs"">##>? 
 &("5
kIIr+   c                     g)Nz	coze-chatr>   r?   s    r)   	_llm_typeChatCoze._llm_type   s    r+   r>   )NN).__name__
__module____qualname____firstlineno____doc__propertyr   strrA   boolrD   r   rU   rG   __annotations__r<   r   r   rK   intrL   rM   r!   rN   r   model_configr   classmethodr   rW   r[   r   r   r
   r   rp   r   r   rg   r   Responserh   r   rl   r   __static_attributes__r>   r+   r)   r9   r9   K   s>   
 
DcN 
 

    '78M38(,L(9%, 9=OS=0#FC#8 ,OS,6 b!D#!:ItS L (#$ 3   $" 
c3h 
 
 %):>	C{#C tCy!C 67	C
 C 
C4 %):>	{# tCy! 67	
  
%	&8+d;/ +3 +8CTCT +ZJDc1B,C J
 J 3  r+   r9   )/ri   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   loggerrU   dictr*   r   r5   r7   r9   r>   r+   r)   <module>r      s      F F F  =	 	 	 S R C B			8	$) k d "
@GCH$5 
@%T@Q:R 
@	<738+< 	<AQ 	<t} tr+   