
    dho                    (   S r SSKJr  SSKrSSK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JrJrJrJrJrJr  SSKJr  SSKJrJr  SSKJr  SSKJrJrJr  SS	K 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/J0r0  SSK1J2r2  SSK3J4r4J5r5J6r6  SSK7J8r8J9r9J:r:J;r;  SSK<J=r=J>r>  SSK?J@r@  \(       a  SSKArA\R                  " \C5      rDSS jrE S     SS jjrF S       S S jjrG      S!S jrH      S"S jrI\" SSSS9 " S S\5      5       rJg)#zOpenAI chat wrapper.    )annotationsN)TYPE_CHECKINGAnyAsyncIteratorCallableDictIteratorListMappingOptionalSequenceTupleTypeUnion)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LanguageModelInput)BaseChatModelagenerate_from_streamgenerate_from_stream)create_base_retry_decorator)AIMessageChunkBaseMessageBaseMessageChunkChatMessageChunkFunctionMessageChunkHumanMessageChunkSystemMessageChunkToolMessageChunk)ChatGenerationChatGenerationChunk
ChatResult)Runnable)BaseTool)get_from_dict_or_envget_pydantic_field_namespre_init)	BaseModel
ConfigDictFieldmodel_validator)convert_dict_to_messageconvert_message_to_dict)is_openai_v1c                 B     SS K n U $ ! [         a    [        S5      ef = f)Nr   zCould not import tiktoken python package. This is needed in order to calculate get_token_ids. Please install it with `pip install tiktoken`.)tiktokenImportError)r1   s    ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/openai.py_import_tiktokenr4   F   s4    
 O  
=
 	

s    
ChatOpenAIc                   SS K nUR                  R                  UR                  R                  UR                  R                  UR                  R
                  UR                  R                  /n[        X0R                  US9$ )Nr   )error_typesmax_retriesrun_manager)	openaierrorTimeoutAPIErrorAPIConnectionErrorRateLimitErrorServiceUnavailableErrorr   r8   )llmr9   r:   errorss       r3   _create_retry_decoratorrC   R   si      	''##,,F '[     c                   ^ #    [        5       (       a$  T R                  R                  " S0 UD6I Sh  vN $ [        T US9nUSU 4S jj5       nU" S0 UD6I Sh  vN $  N+ N7f)z0Use tenacity to retry the async completion call.Nr9   c                 X   >#    TR                   R                  " S0 U D6I S h  vN $  N7fN )clientacreate)kwargsrA   s    r3   _completion_with_retry6acompletion_with_retry.<locals>._completion_with_retryq   s&      ZZ''1&1111s    *(*rI   rL   r   returnr   )r/   async_clientcreaterC   )rA   r9   rL   retry_decoratorrM   s   `    r3   acompletion_with_retryrT   f   sg      ~~%%,,6v666-c{KO2 2 (1&111 7 2s!   /A"A&A"A A" A"c                P   U R                  S5      nU R                  S5      =(       d    Sn0 nU R                  S5      (       a#  [        U S   5      nSU;   a  US   c  SUS'   XTS'   U R                  S5      (       a  U S   US'   US:X  d
  U[        :X  a	  [        US9$ US	:X  d
  U[        :X  a	  [        X4S
9$ US:X  d
  U[        :X  a	  [	        US9$ US:X  d
  U[
        :X  a  [        X0S   S9$ US:X  d
  U[        :X  a  [        X0S   S9$ U(       d
  U[        :X  a	  [        X2S9$ U" US9$ )Nrolecontent function_callname
tool_callsuser)rW   	assistant)rW   additional_kwargssystemfunction)rW   rZ   tooltool_call_id)rW   rb   )rW   rV   )getdictr   r   r   r   r    r   )_dictdefault_classrV   rW   r^   rY   s         r3   _convert_delta_to_message_chunkrg   y   s:    99VDii	"(bG yy!!U?34]"}V'<'D$&M&!-:/*yy*/*=,'v~*;; 11		 ?gSS		].@@!'22		}0DD#G-HH	=,<<N>STT	"22;;W--rD   c                   [        U[        5      (       a<  [        U [        5      (       d#  [        S[        U5       S[        U 5       35      eX-   $ [        U[        5      (       aw  [        U [        5      (       d#  [        S[        U5       S[        U 5       35      eUR                  5        VVs0 sH"  u  p#U[        U R                  US5      U5      _M$     snn$ [        R                  " S[        U5       35        U$ s  snnf )Nz%Got different types for token usage: z and r   z!Unexpected type for token usage: )

isinstanceint
ValueErrortyperd   items_update_token_usagerc   warningswarn)overall_token_usage	new_usagekvs       r3   rn   rn      s   
 )S!!-s337	?#5.A)B(CE  ..	It	$	$-t447	?#5.A)B(CE  ")
) "#6#:#:1a#@!DD)
 	

 	9$y/9JKL
s   2(Dz0.0.10z1.0zlangchain_openai.ChatOpenAI)sinceremovalalternative_importc                    ^  \ rS rSr% Sr\SLS j5       r\SMS j5       r\SNS j5       r	\SOS j5       r
\" S	S
S9rS\S'   \" S	S
S9rS\S'   \" SSS9rS\S'    SrS\S'    \" \S9rS\S'    \" S	SS9rS\S'    \" S	SS9rS\S'    \" S	SS9rS\S'    S	rS\S '   \" S	S!S9rS"\S#'    \" S$S%9rS&\S''    S(rS\S)'    S*rS&\S+'    S	rS,\S-'    S	rS\S.'    S	rS/\S0'   S	rS1\S2'   S	rS3\S4'    \ " S
S59r!\"" S6S79\SPS8 j5       5       r#\$SQS9 j5       r%\SNS: j5       r& SR     SSS; jjr'STS< jr(  SU         SVS= jjr)   SW           SXS> jjr*      SYS? jr+SZS@ jr,  SU         S[SA jjr-   SW           S\SB jjr.\SNSC j5       r/\SNSD j5       r0 SR     S]U 4SE jjjr1\S^SF j5       r2S_SG jr3S`U 4SH jjr4 SR     SaU 4SI jjjr5 SR       SbU 4SJ jjjr6SKr7U =r8$ )cr5      a  `OpenAI` Chat large language models API.

To use, you should have the ``openai`` python package installed, and the
environment variable ``OPENAI_API_KEY`` set with your API key.

Any parameters that are valid to be passed to the openai.create call can be passed
in, even if not explicitly saved on this class.

Example:
    .. code-block:: python

        from langchain_community.chat_models import ChatOpenAI
        openai = ChatOpenAI(model="gpt-3.5-turbo")
c                
    SS0$ )Nopenai_api_keyOPENAI_API_KEYrI   selfs    r3   
lc_secretsChatOpenAI.lc_secrets   s     "233rD   c                
    / SQ$ )z*Get the namespace of the langchain object.)	langchainchat_modelsr:   rI   clss    r3   get_lc_namespaceChatOpenAI.get_lc_namespace   s
     65rD   Dict[str, Any]c                    0 nU R                   (       a  U R                   US'   U R                  (       a  U R                  US'   U R                  (       a  U R                  US'   U$ )Nopenai_organizationopenai_api_baseopenai_proxy)r   r   r   )r~   
attributess     r3   lc_attributesChatOpenAI.lc_attributes   sZ    %'
##040H0HJ,-,0,@,@J())-):):J~&rD   boolc                    g)z9Return whether this model can be serialized by Langchain.TrI   r   s    r3   is_lc_serializableChatOpenAI.is_lc_serializable   s     rD   NT)defaultexcluder   rJ   rQ   gpt-3.5-turbomodel)r   aliasstr
model_namegffffff?floattemperature)default_factorymodel_kwargsapi_keyOptional[str]r{   base_urlr   organizationr   r   timeoutz,Union[float, Tuple[float, float], Any, None]request_timeout   r   rj   r8   F	streaming   nzOptional[int]
max_tokenstiktoken_model_namezUnion[Mapping[str, str], None]default_headersz!Union[Mapping[str, object], None]default_queryzUnion[Any, None]http_client)populate_by_namebefore)modec           
     p   [        U 5      nUR                  S0 5      n[        U5       HP  nXC;   a  [        SU S35      eXB;  d  M  [        R                  SU SU SU S35        UR                  U5      X4'   MR     UR                  UR                  5       5      nU(       a  [        SU S	35      eX1S'   U$ )
z>Build extra kwargs from additional params that were passed in.r   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r'   rc   listrk   loggerwarningpopintersectionkeys)r   valuesall_required_field_namesextra
field_nameinvalid_model_kwargss         r3   build_extraChatOpenAI.build_extra  s     $<C#@ 

>2.v,J" 6*5E!FGG9!* .L !))34JN
 %+JJz$:! '  8DDUZZ\R23 4S T 
 "'~rD   c           	     f   US   S:  a  [        S5      eUS   S:  a  US   (       a  [        S5      e[        USS5      US'   US   =(       d3    [        R                  " S	5      =(       d    [        R                  " S
5      US'   US   =(       d    [        R                  " S5      US'   [        USSSS9US'    SSKn[        5       (       a  US   US   US   US   US   US   US   US   S.nUR                  S5      (       d)  UR                  " S0 UD6R                  R                  US'   UR                  S5      (       d)  UR                  " S0 UD6R                  R                  US'   U$ UR                  S5      (       d  UR                  US'   U$  U$ ! [
         a    [        S5      ef = f)z?Validate that api key and python package exists in environment.r   r   zn must be at least 1.r   zn must be 1 when streaming.r{   r|   r   OPENAI_ORG_IDOPENAI_ORGANIZATIONr   OPENAI_API_BASEr   OPENAI_PROXYrX   r   r   NzTCould not import openai python package. Please install it with `pip install openai`.r   r8   r   r   r   )r   r   r   r   r8   r   r   r   rJ   rQ   rI   )rk   r&   osgetenvr:   r2   r/   rc   OpenAIchatcompletionsAsyncOpenAIChatCompletion)r   r   r:   client_paramss       r3   validate_environmentChatOpenAI.validate_environment3  s    #;?455#;?vk2:;;#7$&6$
 
 () 0yy)0yy./ 	$%
 %++<$= %
B
 ! "6	"
~	 >>!"23 &'< ="#45!"34%m4#)*;#<!'!8%m4	M ::h''#)==#A=#A#F#F#R#Rx ::n--)/);); *#*${{ ~& 	 H%%%44F8  9  	? 	s   :F F0c                
   U R                   U R                  U R                  U R                  S.U R                  EnU R
                  b  U R
                  US'   U R                  b  [        5       (       d  U R                  US'   U$ )z2Get the default parameters for calling OpenAI API.)r   streamr   r   r   r   )r   r   r   r   r   r   r   r/   )r~   paramss     r3   _default_paramsChatOpenAI._default_paramsn  s{     __nn++	

 
 ??&#'??F< +LNN(,(<(<F$%rD   c                   ^  [        5       (       a  T R                  R                  " S0 UD6$ [        T US9nUSU 4S jj5       nU" S0 UD6$ )z*Use tenacity to retry the completion call.rF   c                 <   > TR                   R                  " S0 U D6$ rH   )rJ   rR   )rL   r~   s    r3   rM   @ChatOpenAI.completion_with_retry.<locals>._completion_with_retry  s    ;;%%///rD   rI   rO   )r/   rJ   rR   rC   )r~   r9   rL   rS   rM   s   `    r3   completion_with_retry ChatOpenAI.completion_with_retry~  sR     >>;;%%///1$KP		0 
	0 &///rD   c                    0 nS nU HZ  nUc  M  US   nUb4  UR                  5        H   u  pgXb;   a  [        X&   U5      X&'   M  XrU'   M"     Ub  MI  UR                  S5      nM\     X R                  S.nU(       a  X8S'   U$ )Ntoken_usagesystem_fingerprint)r   r   )rm   rn   rc   r   )	r~   llm_outputsrq   r   outputr   rs   rt   combineds	            r3   _combine_llm_outputsChatOpenAI._combine_llm_outputs  s    $&!!F~ /K&'--/DA/1D/2A2+. 23A. 0 ")%+ZZ0D%E" " $7ooV-?)*rD   c              +    #    U R                  X5      u  pV0 UEUESS0En[        nU R                  " SXSS.UD6 H  n[        U[        5      (       d  UR	                  5       n[        US   5      S:X  a  M<  US   S   n	U	S   c  ML  [        U	S   U5      nU	R                  S5      n
U
b	  [	        U
S9OS nUR                  n[        XS	9nU(       a  UR                  UR                  US
9  Uv   M     g 7f)Nr   Tmessagesr9   choicesr   deltafinish_reasonr   messagegeneration_info)chunkrI   )_create_message_dictsr   r   ri   rd   lenrg   rc   	__class__r"   on_llm_new_tokentextr~   r   stopr9   rL   message_dictsr   default_chunk_classr   choicer   r   cg_chunks                r3   _streamChatOpenAI._stream  s     !% : :8 J5F5f5h5,// 
"
?E
E eT**

5#$)9%a(Fg&3w!4E #JJ7M5B5N=1TX  #(//*H ,,X]](,KN/
s   C1C3c                    Ub  UOU R                   nU(       a   U R                  " U4X#S.UD6n[        U5      $ U R                  X5      u  p0 U	EUb  SU0O0 EUEn	U R                  " SXS.U	D6n
U R                  U
5      $ )Nr   r9   r   r   rI   )r   r   r   r   r   _create_chat_resultr~   r   r   r9   r   rL   should_streamstream_iterr   r   responses              r3   	_generateChatOpenAI._generate  s     #)"4$..,,#@FK (44 $ : :8 J

%+%7&!R
 

 -- 
"
?E
 ''11rD   c                    U R                   nUb  SU;   a  [        S5      eX#S'   U Vs/ sH  n[        U5      PM     nnXS4$ s  snf )Nr   z2`stop` found in both the input and default params.)_client_paramsrk   r.   )r~   r   r   r   mr   s         r3   r    ChatOpenAI._create_message_dicts  sY     $$ !UVV!6N=EFX03XF$$ Gs   Ac                |   / n[        U[        5      (       d  UR                  5       nUS    HR  n[        US   5      n[        UR                  S5      S9nSU;   a  US   US'   [	        UUS9nUR                  U5        MT     UR                  S0 5      nUU R                  UR                  SS	5      S
.n[        X(S9$ )Nr   r   r   r   logprobsr   usager   rX   )r   r   r   )generations
llm_output)ri   rd   r-   rc   r!   appendr   r#   )	r~   r   r	  resr   r   genr   r
  s	            r3   r   ChatOpenAI._create_chat_result  s    (D))}}HI&C-c)n=G"1IJOS .1*o
+  /C s# ' ll7B/&//"*,,/CR"H


 kIIrD   c                 #    U R                  X5      u  pV0 UEUESS0En[        n[        U 4XSS.UD6I S h  vN   S h  vN n[        U[        5      (       d  UR	                  5       n[        US   5      S:X  a  MB  US   S   n	U	S   c  MR  [        U	S   U5      nU	R                  S5      n
U
b	  [	        U
S9OS nUR                  n[        XS	9nU(       a"  UR                  UR                  US
9I S h  vN   U7v   M   N N N
 g 7f)Nr   Tr   r   r   r   r   r   r   )tokenr   )r   r   rT   ri   rd   r   rg   rc   r   r"   r   r   r   s                r3   _astreamChatOpenAI._astream  s;     !% : :8 J5F5f5h5,!7"
("
EK"
 
 
 	% eT**

5#$)9%a(Fg&3w!4E #JJ7M5B5N=1TX  #(//*H !22h2WWWN/
 	, X-
sE   5D	DD	D DDB1D	5D6D	DD	D	c                $  #    Ub  UOU R                   nU(       a(  U R                  " U4X#S.UD6n[        U5      I S h  vN $ U R                  X5      u  p0 U	EUb  SU0O0 EUEn	[	        U 4XS.U	D6I S h  vN n
U R                  U
5      $  NM N7f)Nr   r   r   )r   r  r   r   rT   r   r   s              r3   
_agenerateChatOpenAI._agenerate&  s      #)"4$..--#@FK /{;;; $ : :8 J

%+%7&!R
 

 0
(
EK
 
 ''11 <
s!   <BB7B6B7BBc                :    0 SU R                   0EU R                  E$ )zGet the identifying parameters.r   )r   r   r}   s    r3   _identifying_paramsChatOpenAI._identifying_params@  s$     K<1JT5I5IJJrD   c                (   SU R                   0n[        5       (       d3  UR                  U R                  U R                  U R
                  S.5        U R                  (       a"  SSKnU R                  U R                  S.Ul        0 U R                  EUE$ )z.Get the parameters used for the openai client.r   )r   api_baser   r   N)httphttps)
r   r/   updater{   r   r   r   r:   proxyr   )r~   openai_credsr:   s      r3   r  ChatOpenAI._client_paramsE  s     T__(
 ~~#22 $ 4 4$($<$< $($5$5@Q@QRFL7$&&7,77rD   c                V   > SU R                   0[        TU ]	  US9EU R                  EUE$ )z,Get the parameters used to invoke the model.r   )r   )r   super_get_invocation_paramsr   )r~   r   rL   r   s      r3   r#  !ChatOpenAI._get_invocation_paramsY  sG    
 T__
g,$,7
 ""
 	
 	
rD   c                    g)zReturn type of chat model.zopenai-chatrI   r}   s    r3   	_llm_typeChatOpenAI._llm_typed  s     rD   c                "   [        5       nU R                  b  U R                  nOU R                  nUS:X  a  SnOUS:X  a  Sn UR                  U5      nX#4$ ! [         a-    [
        R                  S5        SnUR                  U5      n X#4$ f = f)Nr   gpt-3.5-turbo-0301gpt-4z
gpt-4-0314z5Warning: model not found. Using cl100k_base encoding.cl100k_base)r4   r   r   encoding_for_modelKeyErrorr   r   get_encoding)r~   	tiktoken_r   encodings       r3   _get_encoding_modelChatOpenAI._get_encoding_modeli  s    $&	##/,,EOOE' -'! %	5 33E:H
 	  	5NNRS!E --e4H		5s   A 2BBc                   > [         R                  S   S::  a  [        TU ]  U5      $ U R	                  5       u  p#UR                  U5      $ )z9Get the tokens present in the text with tiktoken package.r      )sysversion_infor"  get_token_idsr1  encode)r~   r   _encoding_modelr   s       r3   r7  ChatOpenAI.get_token_ids  sJ     A!#7(.. 446$$T**rD   c           
     \  > Ub  [         R                  " S5        [        R                  S   S::  a  [        TU ]  U5      $ U R                  5       u  p4UR                  S5      (       a  SnSnO@UR                  S5      (       d  UR                  S5      (       a  S	nSnO[        S
U S35      eSnU Vs/ sH  n[        U5      PM     n	nU	 HR  n
Xu-  nU
R                  5        H7  u  pU[        UR                  [        U5      5      5      -  nUS:X  d  M3  Xv-  nM9     MT     US	-  nU$ s  snf )zCalculate num tokens for gpt-3.5-turbo and gpt-4 with tiktoken package.

Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynbzECounting tokens in tool schemas is not yet supported. Ignoring tools.r   r4  r)     r   r*     zFget_num_tokens_from_messages() is not presently implemented for model zy.See https://github.com/openai/openai-python/blob/main/chatml.md for information on how messages are converted to tokens.r   rZ   )ro   rp   r5  r6  r"  get_num_tokens_from_messagesr1  
startswithNotImplementedErrorr.   rm   r   r8  r   )r~   r   toolsr   r0  tokens_per_messagetokens_per_name
num_tokensr  messages_dictr   keyvaluer   s                r3   r@  'ChatOpenAI.get_num_tokens_from_messages  sD    MMW A!#77AA224011!" Oo..%2B2B72K2K!"O%"G $GG  
=EFX03XF$G,J%mmo
 c(//#e*"=>>
&=1J . % 	a
 Gs   4D)c                  > SSK Jn  U Vs/ sH
  oT" U5      PM     nnUbJ  [        U5      S:w  a  [        S5      eUS   S   U:w  a  [        SU SUS   S    S35      eSU0n0 UES	U0En[        TU ]  " SS
U0UD6$ s  snf )a{  Bind functions (and other objects) to this chat model.

Args:
    functions: A list of function definitions to bind to this chat model.
        Can be  a dictionary, pydantic model, or callable. Pydantic
        models and callables will be automatically converted to
        their schema dictionary representation.
    function_call: Which function to require the model to call.
        Must be the name of the single provided function or
        "auto" to automatically determine which function to call
        (if any).
    kwargs: Any additional parameters to pass to the
        :class:`~langchain.runnable.Runnable` constructor.
r   )convert_to_openai_functionr   zGWhen specifying `function_call`, you must provide exactly one function.rZ   zFunction call z3 was specified, but the only provided function was .rY   	functionsrI   )&langchain.chains.openai_functions.baserL  r   rk   r"  bind)	r~   rN  rY   rL   rL  fnformatted_functionsfunction_call_r   s	           r3   bind_functionsChatOpenAI.bind_functions  s    ( 	VHQR	"9"=	R$&'1,    #1%f-> $]O 4--@-CF-K,LAO  %m4N@@@Fw| 
)

 	
 Ss   A=rI   )rP   zDict[str, str])rP   z	List[str])rP   r   )rP   r   )r   r   rP   r   )r   r   rP   r   N)r9   "Optional[CallbackManagerForLLMRun]rL   r   rP   r   )r   zList[Optional[dict]]rP   rd   )NN)
r   List[BaseMessage]r   Optional[List[str]]r9   rW  rL   r   rP   zIterator[ChatGenerationChunk])NNN)r   rX  r   rY  r9   rW  r   Optional[bool]rL   r   rP   r#   )r   rX  r   rY  rP   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])r   zUnion[dict, BaseModel]rP   r#   )
r   rX  r   rY  r9   'Optional[AsyncCallbackManagerForLLMRun]rL   r   rP   z"AsyncIterator[ChatGenerationChunk])r   rX  r   rY  r9   r[  r   rZ  rL   r   rP   r#   )r   rY  rL   r   rP   r   )rP   r   )rP   zTuple[str, tiktoken.Encoding])r   r   rP   z	List[int])r   rX  rC  zCOptional[Sequence[Union[Dict[str, Any], Type, Callable, BaseTool]]]rP   rj   )rN  z:Sequence[Union[Dict[str, Any], Type[BaseModel], Callable]]rY   r   rL   r   rP   z)Runnable[LanguageModelInput, BaseMessage])9__name__
__module____qualname____firstlineno____doc__propertyr   classmethodr   r   r   r+   rJ   __annotations__rQ   r   r   rd   r   r{   r   r   r   r   r8   r   r   r   r   r   r   r   r*   model_configr,   r   r(   r   r   r   r   r   r   r   r   r  r  r  r  r#  r&  r1  r7  r@  rT  __static_attributes____classcell__)r   s   @r3   r5   r5      s    4 4 6 6     d3FC3dD9L#9O7CJCK+#(#>L.>V %*$i$HNMHO%*4z%JO]J).t>)RRN"&L-&DIIEOA Q'K'<It/AsJA $J$/)--J 7;O3:7;M4; %)K!( L (#  $2 8 8t    AE0=0PS0	04 %):>	"#" "" 8	"
 " 
'"N %):>!%2#2 "2 8	2
 2 2 
22	%)	%1D	%	4	%J2 %)?C	"#" "" =	"
 " 
,"N %)?C!%2#2 "2 =	2
 2 2 
24 K K 8 8( +/	
'	
:=	
		
 	
  .+ -#-
- 
- -d (,'
M'
 %'
 	'

 
3'
 '
rD   )rP   r   rV  )rA   r5   r9   zHOptional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]]rP   zCallable[[Any], Any])rA   r5   r9   r[  rL   r   rP   r   )re   zMapping[str, Any]rf   zType[BaseMessageChunk]rP   r   )rq   Union[int, dict]rr   rg  rP   rg  )Kr`  
__future__r   loggingr   r5  ro   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   langchain_core._api.deprecationr   langchain_core.callbacksr   r   langchain_core.language_modelsr   *langchain_core.language_models.chat_modelsr   r   r   #langchain_core.language_models.llmsr   langchain_core.messagesr   r   r   r   r   r   r   r    langchain_core.outputsr!   r"   r#   langchain_core.runnablesr$   langchain_core.toolsr%   langchain_core.utilsr&   r'   r(   pydanticr)   r*   r+   r,   #langchain_community.adapters.openair-   r.    langchain_community.utils.openair/   r1   	getLoggerr\  r   r4   rC   rT   rg   rn   r5   rI   rD   r3   <module>ry     s\    "  	 
      7 > 
 L	 	 	 S R - ) 
 C B : 
		8	$	  			
 , <@2	282 2 		2&..-C..<)6F6 
E6Si
 i
i
rD   