
    Ng.                        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j+        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          Z6dS )    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                 4   t          | t                    r| j        | j        d}nrt          | t                    rd| j        d}nRt          | t
                    rd| j        d}n2t          | t                    rd| j        d}nt          d|            |S )N)rolecontentuser	assistantzGot unknown type )
isinstancer   r&   r'   r   r   r   	TypeError)r#   message_dicts     ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/yi.py_convert_message_to_dictr.   )   s    ';'' 	7 'II	G\	*	* 7 &7?CC	GY	'	' 7 +HH	G]	+	+ 7 +HH5G55666    _dictc                    | d         }|dk    rt          | d                   S |dk    r&t          |                     dd          p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   s    =Dv~~E)$45555			9b!9!9!?R@@@@			y!122225#3$????r/   default_classc                    | d         }|                      d          p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   s     fDii	""(bGv~~*;;; 1111			 ? ?g....	 9"222d;;;;}W48888r/   clientmethodurlkwargsc                   K   ddl m}  | j        ||fi |4 d {V } ||          W V  d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   )EventSource)	httpx_sserA   stream)r<   r=   r>   r?   rA   responses         r-   aconnect_httpx_sserE   U   s
      &%%%%%v}VS33F33 $ $ $ $ $ $ $xk(######$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   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,j-        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                     dS )NTrK   rL   s    r-   lc_serializablezChatYi.lc_serializableh   s    tr/   )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<   |                    d          C|                    dd                                          }|dk    rt          |d<   n
t
          |d<   t          | j                  }|                    di           }t          |          D ]5}||v rt          d	| d
          ||vr|
                    |          ||<   6|                    |                                          }|rt          d| d          ||d<    t                      j        di | d S )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   s   4 y)  
  
| ::m$$,ZZ$//5577F!!(?}%%(;}%#;DN#K#K 

>2..v,, 	; 	;JU"" !F*!F!F!FGGG!999$*JJz$:$:j!7DDUZZ\\RR 	T2 T T T  
 "'~""6"""""r/   c                 8    | j         | j        | j        | j        dS )N)r[   r]   r^   rC   )r[   r]   r^   rW   rL   s    r-   _default_paramszChatYi._default_params   s(     Z+Zn	
 
 	
r/   messagesstoprun_managerc                     | j         r  | j        d|||d|}t          |          S  | j        |fi |}|j        dk    rt          d|           |                                }|                     |          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     > 	5&$, !+ IO K (444dj,,V,,?c!!ACAABBB88::''111r/   c              +   ~  K    | j         |fddi|}|j        dk    rt          d|           t          }|                                D ]}|                    d                              d          }|                    dd          }t          |          dk    r|d         nd }|`|d	k    r d S t          j
        |          }	|	                    d
          D ]^}
t          |
                    d          |          }|j        }t          |          }|r|                    |j        |           |V  _d S )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   sq      dj99$9&99?c!!ACAABBB,^^%% 	 	ELL))//77EKK!,,E #E

QE!HHDE}  z%((H\\),,  7EE'NN$7  ',o#.u=== P00h0OOO	 	r/   rC   c                   K   ||n| j         }|r& | j        |f||d|}t          |           d {V S  | j        di |} | j        |fi |}	dd l}
|
                    || j                  4 d {V 	 }|                    | j	        |	           d {V }|
                                 d d d           d {V  n# 1 d {V swxY w Y   |                     |                                          S )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;;F;;1$1(EEfEE$$T%9 % 
 
 	( 	( 	( 	( 	( 	( 	( 	(#[[)9[HHHHHHHHH%%'''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 ''888s   87C
CCc                  K    | j         di |} | j        |fddi|}dd l}|                    || j                  4 d {V 	 }t          |d| j        |          4 d {V 	 }	|	                                2 3 d {V }
t          j	        |
j
                  }t          |d                   dk    r:|d         d         }t          |d         t                    }|                    d	d           }|d	|ind }t          ||
          }|r"|                    |j        |           d {V  |W V  | n6 	 d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )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;;F;;1$1(RR4R6RR$$T%9 % 
 
 	 	 	 	 	 	 	 	) 0w          !-!7!7!9!9       # Jsx00E5+,,11 "9-a0F;w E %+JJ$E$EM )4 )-88! $
 0 %  E # T)::5:U:SSSSSSSSSKKKK$0 1+ ":!9                          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sC   E4'E<D<B;E>E4
E	E4E	E44
E>E>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  sm    1$1(EEfEE1$1;;F;;m(>
 
 
 
r/   c                     i | j         |}|                    dd          }|                    dd          }|                    d          }|                    dd          }|d |D             |||d}|S )	Nr]   r\   r^   r[   rC   Fc                 ,    g | ]}t          |          S rK   )r.   ).0r   s     r-   
<listcomp>z5ChatYi._create_payload_parameters.<locals>.<listcomp>2  s!    GGG1!44GGGr/   )r[   ru   r^   r]   rC   )rt   rj   )	rM   ru   r?   
parametersr]   r^   r[   rC   r   s	            r-   r   z!ChatYi._create_payload_parameters'  s     8,77
 nn]C88w,,w''%00 GGhGGG&
 
 r/   c                     i | j         |}|                    di           }d}| j        r| 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  sv    7,77
$..B77? 	9o6688G /0w00
 
 

 r/   rD   c                     g }|d         D ]<}t          |d                   }t          |          }|                    |           =|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  s    )$ 	$ 	$A.q|<<G 111Cs####w'%04:FF
kjIIIIr/   c                     dS )Nzyi-chatrK   rL   s    r-   	_llm_typezChatYi._llm_typeR  s    yr/   )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 
 
 
 X

     X u%8999K999!E	222J	222%%%%FC%%%It 59===OS===E3#(5#5#5#5K%555E5#(5#>#>#>L$sCx.>>>:  L# # # # # # # #B 
c3h 
 
 
 X
 %):>	2 2{#2 tCy!2 67	2
 2 
2 2 2 2, %):>	 {# tCy! 67	
  
%	&   B %)?C!%9 9{#9 tCy!9 ;<	9
 9 9 
9 9 9 9< %)?C	' '{#' tCy!' ;<	'
 ' 
*	+' ' ' 'Rd;/ 3 8CT    [)58	c3h   $3 4S>    	JGCH,= 	J* 	J 	J 	J 	J 3    X    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 T T T T T T T T T T T T T T T T T                 

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