
    7|h'!                     L   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jJ                  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.y)    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                 j    t        | t              rd| j                  dd}|S d| j                  dd}|S )Nusertext)rolecontentcontent_type	assistant)
isinstancer   r$   )r   message_dicts     c/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/chat_models/coze.py_convert_message_to_dictr*   !   sF    '<("
 	  "

     _dictc                     | d   }|dk7  ry | d   }|dk(  rt        | d         S |dk(  r t        | j                  dd      xs 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   sk    V}H8=Dv~E)$455		9b!9!?R@@5#3$??r+   c                     | j                  d      }| j                  d      xs 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   ?   sU    99VDii	"(bGv~ 11		g..d;;r+   c                   H   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&jN                  fd Z(dee)eef      de!fd!Z*edefd"       Z+y)$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                      y)NTr=   r>   s    r)   lc_serializablezChatCoze.lc_serializableW   s    r+   )defaultcoze_api_baseNr;   <   timeout)rC   aliasrequest_timeoutr1   bot_idconversation_idr!   F	streamingT)populate_by_namebefore)modevaluesc                 b    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   sH     #7	#
 "7 "
~ r+   c                 `    | 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,     kk#33II	
 	
r+   messagesstoprun_managerkwargsc           
      `   | j                   r! | j                  d
|||d|}t        |      S  | j                  |fi |}|j	                         }|d   dk7  r3t        d|d    d|d    d|j                  j                  d             | j                  |j                  d	      xs 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     >>&$,, !+IOK (44DJJx*6*ffhv;!0VRE
| L))--568 
 ''
(;(ArBBr+   c              +     K    | j                   |fi |}|j                         D ]  }|j                  d      j                  d      }|j	                  dd      }t        |      dkD  r|d   nd }|Mt        j                  |      }|d   dk(  r y |d   dk7  s|d   d   d	k7  rt        |d         }t        |
      }	|r|j                  |j                  |	       |	  y w)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   s      djj,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                    i | j                   |}d}g }|D ]9  }t        |t              r|j                   }|j	                  t        |             ; |j                  d      }|j                  d      }|j                  d      }	|j                  d      }
|||	||
d}|r||d<   | j                  dz   }d}| j                  r| j                  j                         }t        j                  || j                  d	d
| d||
      }|j                  dk7  r,|j                  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;/	  /
 &2GN#  #66''88:Gmm(( 2#*7)!4 	
 ??c!KKOOL1E=cU)E7STT
r+   c                     g }|D ]+  }t        |      }|s|j                  t        |             - d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   sQ     	@A*1-C"">##>?	@
 &("5
kjIIr+   c                      y)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   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   )/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      s      F F F  =	 	 	 S R C B			8	$) k d "
@GCH$5 
@%T@Q:R 
@	<738+< 	<AQ 	<t} tr+   