
    7|h.                        d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZ d dlZd dlmZmZ d dlmZmZmZ d dlmZ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%m&Z& d d	l'm(Z(m)Z)m*Z*  ejV                  e,      Z-d
Z.dZ/dede0fdZ1de
e2ef   defdZ3de
e2ef   dee   defdZ4edede2de2dedef
d       Z5 G d de      Z6y)    N)asynccontextmanager)AnyAsyncIteratorDictIteratorListMappingOptionalType)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseChatModelagenerate_from_streamgenerate_from_stream)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkHumanMessageHumanMessageChunkSystemMessage)ChatGenerationChatGenerationChunk
ChatResult)convert_to_secret_strget_from_dict_or_envget_pydantic_field_names)
ConfigDictField	SecretStrz/https://api.lingyiwanwu.com/v1/chat/completionsz%https://api.01.ai/v1/chat/completionsmessagereturnc                 :   t        | t              r| j                  | 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)rolecontentuser	assistantzGot unknown type )
isinstancer   r&   r'   r   r   r   	TypeError)r#   message_dicts     a/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/chat_models/yi.py_convert_message_to_dictr.   )   s    ';' 'I  
G\	* &7??C  
GY	' +H  
G]	+ +H  +G9566    _dictc                     | d   }|dk(  rt        | d         S |dk(  r t        | j                  dd      xs d      S |dk(  rt        | d         S t        | d   |      S )	Nr&   r(   r'   r'   r)    systemr'   r&   )r   r   getr   )r0   r&   s     r-   _convert_dict_to_messager7   9   so    =Dv~E)$455		9b!9!?R@@		y!1225#3$??r/   default_classc                     | d   }| j                  d      xs d}|dk(  s	|t        k(  rt        |      S |dk(  s	|t        k(  rt        |      S |s	|t        k(  rt        ||      S  |||      S )	Nr&   r'   r3   r(   r2   r)   r5   )r'   type)r6   r   r   r   )r0   r8   r&   r'   s       r-   _convert_delta_to_message_chunkr;   E   sy     fDii	"(bGv~*;; 11		 ?g..	"22d;;W488r/   clientmethodurlkwargsc                   K   ddl m}  | j                  ||fi |4 d {   } ||       d d d       d {    y 7  7 # 1 d {  7  sw Y   y xY ww)Nr   )EventSource)	httpx_sserA   stream)r<   r=   r>   r?   rA   responses         r-   aconnect_httpx_sserE   U   s\      &v}}VS3F3 $ $x(##$ $ $ $ $ $ $sA   AAAAAAAAAAAA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<    e
d      Zeed	<    e
d
      Zeed<   dZeed<    e
dd      Zeed<   dZeed<    e
d      Zee   ed<   dZeed<    e
e      Zeeef   ed<    ed      Zdeddf 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.de e!   d ee e      d!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,jZ                  fd'Z.de e!   dedeeef   fd(Z/dedeeef   fd)Z0d*e1eef   de#fd+Z2edefd,       Z3 xZ4S )/ChatYizYi chat models API.r$   c                 
    ddiS )N
yi_api_key
YI_API_KEY selfs    r-   
lc_secretszChatYi.lc_secretsb   s     ,
 	
r/   c                      y)NTrK   rL   s    r-   lc_serializablezChatYi.lc_serializableh   s    r/   )defaultyi_api_baseapi_key)aliasrI   cnregionF	streaming<   timeout)rQ   rT   request_timeoutzyi-largemodelffffff?temperaturetop_p)default_factorymodel_kwargsT)populate_by_namer?   Nc                    t        t        |ddgd            |d<   |j                  d      8|j                  dd      j                         }|dk(  r
t        |d<   n	t
        |d<   t        | j                        }|j                  di       }t        |      D ].  }||v rt        d	| d
      ||vs|j                  |      ||<   0 |j                  |j                               }|rt        d| d      ||d<   t        | 8  di | y )NrI   rS   rJ   rR   rV   rU   globalr`   zFound z supplied twice.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.rK   )r   r   r6   lowerDEFAULT_API_BASE_GLOBALDEFAULT_API_BASE_CNr   	__class__list
ValueErrorpopintersectionkeyssuper__init__)rM   r?   rV   all_required_field_namesextra
field_nameinvalid_model_kwargsrg   s          r-   rn   zChatYi.__init__z   s3   4 y) 
| ::m$,ZZ$/557F!(?}%(;}%#;DNN#K 

>2.v, 	;JU" 6*5E!FGG!99$*JJz$:j!		;  8DDUZZ\R23 4S T 
 "'~"6"r/   c                 `    | j                   | j                  | j                  | j                  dS )N)r[   r]   r^   rC   )r[   r]   r^   rW   rL   s    r-   _default_paramszChatYi._default_params   s,     ZZ++ZZnn	
 	
r/   messagesstoprun_managerc                     | j                   r! | j                  d|||d|}t        |      S  | j                  |fi |}|j                  dk7  rt        d|       |j                         }| j                  |      S )N)ru   rv   rw      Error from Yi api response: rK   )rW   _streamr   _chatstatus_coderi   json_create_chat_result)rM   ru   rv   rw   r?   stream_iterresrD   s           r-   	_generatezChatYi._generate   s     >>&$,, !+IOK (44djj,V,??c!;C5ABB88:''11r/   c              +   J  K    | j                   |fddi|}|j                  dk7  rt        d|       t        }|j	                         D ]  }|j                  d      j                  d      }|j                  dd      }t        |      dkD  r|d   nd }|M|d	k(  r y t        j                  |      }	|	j                  d
      D ]X  }
t        |
j                  d      |      }|j                  }t        |      }|r|j                  |j                   |       | Z  y w)NrC   Try   rz   zutf-8z
zdata:    z[DONE]choicesdeltar#   chunk)r|   r}   ri   r   
iter_linesdecodestripsplitlenr~   loadsr6   r;   rg   r   on_llm_new_tokenr'   )rM   ru   rv   rw   r?   r   default_chunk_classr   partsrD   mcg_chunks               r-   r{   zChatYi._stream   s!     djj9$9&9??c!;C5ABB,^^% 	ELL)//7EKK!,E #E
QE!HDE} zz%(H\\), 7EE'N$7 ',oo#.u=00h0O	s   D!D#rC   c                    K   ||n| j                   }|r) | j                  |f||d|}t        |       d {   S  | j                  di |} | j                  |fi |}	dd l}
|
j                  || j                        4 d {   }|j                  | j                  |	       d {   }|j                          d d d       d {    | j                  j                               S 7 7 j7 G7 )# 1 d {  7  sw Y   9xY ww)N)rv   rw   r   headersrY   r~   rK   )rW   _astreamr   _create_headers_parameters_create_payload_parametershttpxAsyncClientrZ   postrR   raise_for_statusr   r~   )rM   ru   rv   rw   rC   r?   should_streamr   r   payloadr   r<   rD   s                r-   
_ageneratezChatYi._agenerate   s     #)"4$..'$--#@FK /{;;;1$11;F;1$11(EfE$$T%9%9 % 
 	( 	(#[[)9)9[HHH%%'		( 	(
 ''88 <	( I	( 	( 	( 	(sj   7DC1ADC3	D!C9-C5.C9DC7$D3D5C97D9D?D DDc                  K    | j                   di |} | j                  |fddi|}dd l}|j                  || j                        4 d {   }t        |d| j                  |      4 d {   }	|	j                         2 3 d {   }
t        j                  |
j                        }t        |d         dk(  r:|d   d   }t        |d   t              }|j                  d	d       }|d	|ind }t        ||
      }|r%|j!                  |j"                  |       d {    | | d d d       d {    d d d       d {    y 7 7 7 7 56 ,7  # 1 d {  7  sw Y   0xY w7 '# 1 d {  7  sw Y   y xY ww)NrC   Tr   r   POSTr   r   r   finish_reason)r#   generation_infor   rK   )r   r   r   r   rZ   rE   rR   	aiter_sser~   r   datar   r;   r   r6   r   r   text)rM   ru   rv   rw   r?   r   r   r   r<   event_sourcesser   choicer   r   s                  r-   r   zChatYi._astream   s     2$11;F;1$11(R4R6R$$T%9%9 % 
 	 	) 0 0w  !-!7!7!9  # JJsxx0E5+,1 "9-a0F;wE %+JJ$EM )4 )-8! $
 0 %E #)::5::U:SSSK$03 	 	 	& T' ":   	 	 	 	s   AFEFE71E2E75E E
E
EBE $E
%E 1E 2E7=E>E7FE5FE7EE E E7 E2	&E)'E2	.E75F7F	=F >F	Fc                      | j                   |fi |}| j                  } | j                  di |}t        j                  || j
                  ||| j                        }|S )N)r>   rY   r   r~   rC   rK   )r   rR   r   requestsr   rZ   rW   )rM   ru   r?   r   r>   r   r   s          r-   r|   zChatYi._chat  sg    1$11(EfE1$11;F;mm((>>
 
r/   c                     i | j                   |}|j                  dd      }|j                  dd      }|j                  d      }|j                  dd      }||D cg c]  }t        |       c}|||d}	|	S c c}w )Nr]   r\   r^   r[   rC   F)r[   ru   r^   r]   rC   )rt   rj   r.   )
rM   ru   r?   
parametersr]   r^   r[   rC   r   r   s
             r-   r   z!ChatYi._create_payload_parameters'  s     8,,77
 nn]C8w,w'%0 >FG1!4G&
  Hs   A9c                     i | j                   |}|j                  di       }d}| j                  r| j                  j                         }dd| d|}|S )Nr   r3   zapplication/jsonzBearer )zContent-TypeAuthorization)rt   rj   rI   get_secret_value)rM   r?   r   default_headersrS   r   s         r-   r   z!ChatYi._create_headers_parameters9  sl    7,,77
$..B7??oo668G /&wi0
 

 r/   rD   c                     g }|d   D ]-  }t        |d         }t        |      }|j                  |       / |d   }|| j                  d}t	        ||      S )Nr   r#   r   usage)token_usager[   )generations
llm_output)r7   r   appendr[   r   )rM   rD   r   cr#   genr   r   s           r-   r   zChatYi._create_chat_resultG  sh    )$ 	$A.q|<G 1Cs#	$
 w'%04::F
kjIIr/   c                      y)Nzyi-chatrK   rL   s    r-   	_llm_typezChatYi._llm_typeR  s    r/   )NN)NNN)5__name__
__module____qualname____doc__propertyr   strrN   boolrP   r!   rf   rR   __annotations__rI   r"   rV   rW   rZ   intr[   r]   r
   floatr^   dictr`   r   r    model_configrn   rt   r   r   r   r   r   r   r   r{   r   r   r   r   r   Responser|   r   r   r	   r   r   __classcell__)rg   s   @r-   rG   rG   _   s   
DcN 
 

    %89K9!	2J	2%FC%It 9=OS=E3#(#5K%5E5#(#>L$sCx.>L# # #B 
c3h 
 
 %):>	2{#2 tCy!2 67	2
 2 
2, %):>	{# tCy! 67	
  
%	&B %)?C!%9{#9 tCy!9 ;<	9
 9 9 
9< %)?C	'{#' tCy!' ;<	'
 ' 
*	+'Rd;/ 3 8CTCT [)58	c3h$3 4S> 	JGCH,= 	J* 	J 3  r/   rG   )7r~   logging
contextlibr   typingr   r   r   r   r   r	   r
   r   r   langchain_core.callbacksr   r   *langchain_core.language_models.chat_modelsr   r   r   langchain_core.messagesr   r   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   langchain_core.utilsr   r   r   pydanticr    r!   r"   	getLoggerr   loggerrf   re   r   r.   r   r7   r;   rE   rG   rK   r/   r-   <module>r      s     * T T T  

 
 
 S R 
 2 1			8	$G A k d  	@GCH$5 	@+ 	@9389-12B-C99  $$$#&$25$$ $u] ur/   