
    Ngo                       d Z ddlmZ ddlZddlZ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mZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZm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+m,Z,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@ erddlAZA ejB        eC          ZDd-dZE	 d.d/dZF	 d.d0dZGd1d#ZHd2d'ZI ed(d)d*+           G d, de                      ZJdS )3z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_v1returnr   c                 L    	 dd l } n# t          $ r t          d          w xY w| S )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)r2   s    b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/openai.py_import_tiktokenr5   F   sK    
 
 
 
=
 
 	

 Os    !llm
ChatOpenAIrun_managerHOptional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]]Callable[[Any], Any]c                    dd l }|j        j        |j        j        |j        j        |j        j        |j        j        g}t          || j        |          S )Nr   )error_typesmax_retriesr8   )	openaierrorTimeoutAPIErrorAPIConnectionErrorRateLimitErrorServiceUnavailableErrorr   r=   )r6   r8   r>   errorss       r4   _create_retry_decoratorrF   R   s`     MMM 	'#,F '[       'Optional[AsyncCallbackManagerForLLMRun]kwargsc                    K   t                      r  j        j        di | d{V S t           |          }|d fd            } |di | d{V S )	z0Use tenacity to retry the async completion call.Nr8   rI   r   r0   c                 8   K    j         j        di |  d {V S N )clientacreate)rI   r6   s    r4   _completion_with_retryz6acompletion_with_retry.<locals>._completion_with_retryq   s6       (SZ'11&111111111rG   rN   rI   r   r0   r   )r/   async_clientcreaterF   )r6   r8   rI   retry_decoratorrQ   s   `    r4   acompletion_with_retryrV   f   s       ~~ 7,S%,66v666666666-c{KKKO2 2 2 2 2 _2 ('11&111111111rG   _dictMapping[str, Any]default_classType[BaseMessageChunk]r   c                   |                      d          }|                      d          pd}i }|                      d          r+t          | d                   }d|v r|d         d|d<   ||d<   |                      d          r| d         |d<   |dk    s|t          k    rt          |          S |d	k    s|t          k    rt          ||
          S |dk    s|t          k    rt	          |          S |dk    s|t
          k    rt          || d                   S |dk    s|t          k    rt          || d                   S |s|t          k    rt          ||          S  ||          S )Nrolecontent function_callname
tool_callsuser)r]   	assistant)r]   additional_kwargssystemfunction)r]   r`   tooltool_call_id)r]   rh   )r]   r\   )getdictr   r   r   r   r    r   )rW   rY   r\   r]   rd   r_   s         r4   _convert_delta_to_message_chunkrk   y   s    99VDii	""(bG yy!! ;U?344]""}V'<'D$&M&!-:/*yy >*/*=,'v~~*;;; 1111			 ? ?gARSSSS			].@@@!'2222			}0DDD#G%-HHHH	=,<<<eN>STTTT	 ."222d;;;;}W----rG   overall_token_usageUnion[int, dict]	new_usagec                    t          |t                    rIt           t                    s/t          dt          |           dt                                | z   S t          |t                    rdt           t                    s/t          dt          |           dt                                 fd|                                D             S t          j        dt          |                      |S )Nz%Got different types for token usage: z and c           	     `    i | ]*\  }}|t                              |d           |          +S )r   )_update_token_usageri   ).0kvrl   s      r4   
<dictcomp>z'_update_token_usage.<locals>.<dictcomp>   sK     
 
 
1 "#6#:#:1a#@#@!DD
 
 
rG   z!Unexpected type for token usage: )
isinstanceint
ValueErrortyperj   itemswarningswarn)rl   rn   s   ` r4   rq   rq      sC   
 )S!! -s33 	E	??E E)-.A)B)BE E   ...	It	$	$ -t44 	E	??E E)-.A)B)BE E  
 
 
 
!))
 
 
 	

 	K$y//KKLLLrG   z0.0.10z1.0zlangchain_openai.ChatOpenAI)sinceremovalalternative_importc                      e Zd ZU dZedkd            Zedld            Zedmd            Zednd
            Z	 e
dd          Zded<    e
dd          Zded<    e
dd          Zded<   	 dZded<   	  e
e          Zded<   	  e
dd          Zded<   	  e
dd          Zded<   	  e
dd           Zded!<   	 dZded"<    e
dd#          Zd$ed%<   	  e
d&'          Zd(ed)<   	 d*Zd	ed+<   	 d,Zd(ed-<   	 dZd.ed/<   	 dZded0<   	 dZd1ed2<   dZd3ed4<   dZd5ed6<   	  ed7          Z  e!d89          edod;                        Z"e#dpd=            Z$edmd>            Z%	 dqdrdBZ&dsdFZ'	 	 dtdudLZ(	 	 	 dvdwdPZ)dxdRZ*dydUZ+	 	 dtdzdXZ,	 	 	 dvd{dYZ-edmdZ            Z.edmd[            Z/	 dqd| fd\Z0ed}d]            Z1d~d_Z2d fdbZ3	 dqd fdeZ4	 dqd fdjZ5 xZ6S )r7   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")
    r0   Dict[str, str]c                
    ddiS )Nopenai_api_keyOPENAI_API_KEYrN   selfs    r4   
lc_secretszChatOpenAI.lc_secrets   s     "233rG   	List[str]c                
    g dS )z*Get the namespace of the langchain object.)	langchainchat_modelsr>   rN   clss    r4   get_lc_namespacezChatOpenAI.get_lc_namespace   s     6555rG   Dict[str, Any]c                p    i }| j         r
| j         |d<   | j        r
| j        |d<   | j        r
| j        |d<   |S )Nopenai_organizationopenai_api_baseopenai_proxy)r   r   r   )r   
attributess     r4   lc_attributeszChatOpenAI.lc_attributes   sY    %'
# 	I040HJ,- 	A,0,@J() 	;)-):J~&rG   boolc                    dS )z9Return whether this model can be serialized by Langchain.TrN   r   s    r4   is_lc_serializablezChatOpenAI.is_lc_serializable   s	     trG   NT)defaultexcluder   rO   rS   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   rw   r=   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)modevaluesc           
        t          |           }|                    di           }t          |          D ]Y}||v rt          d| d          ||vr<t                              d| d| d| d           |                    |          ||<   Z|                    |                                          }|rt          d| d	          ||d<   |S )
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'   ri   listrx   loggerwarningpopintersectionkeys)r   r   all_required_field_namesextra
field_nameinvalid_model_kwargss         r4   build_extrazChatOpenAI.build_extra  s4    $<C#@#@ 

>2..v,, 		; 		;JU"" !F*!F!F!FGGG!999N* N NN N)3N N N  
 %+JJz$:$:j!7DDUZZ\\RR 	T2 T T T  
 "'~rG   r   c           	     R   |d         dk     rt          d          |d         dk    r|d         rt          d          t          |dd          |d<   |d         p't          j        d	          pt          j        d
          |d<   |d         pt          j        d          |d<   t          |ddd          |d<   	 ddl}n# t
          $ r t          d          w xY wt                      r|d         |d         |d         |d         |d         |d         |d         |d         d}|                    d          s |j        di |j	        j
        |d<   |                    d          s |j        di |j	        j
        |d<   n!|                    d          s|j        |d<   n	 |S )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_PROXYr^   r   r   NzTCould not import openai python package. Please install it with `pip install openai`.r   r=   r   r   r   )r   r   r   r   r=   r   r   r   rO   rS   rN   )rx   r&   osgetenvr>   r3   r/   ri   OpenAIchatcompletionsAsyncOpenAIChatCompletion)r   r   r>   client_paramss       r4   validate_environmentzChatOpenAI.validate_environment3  s;    #;??4555#;??vk2?:;;;#7$&6$
 $
 
 () 0y))0y.// 	$%
 %++<$= %
B
 B
 ! "6	"
 "
 "
~	MMMM 	 	 	?  	 >> 	!"23 &'< ="#45!"34%m4#)*;#<!'!8%m4	 	M ::h'' S#06=#A#A=#A#A#F#Rx ::n-- #);); * *#* *{ ~& H%% 	%4F8s   <C Cc                    | j         | j        | j        | j        d| j        }| j        
| j        |d<   | j        t                      s
| j        |d<   |S )z2Get the default parameters for calling OpenAI API.)r   streamr   r   Nr   r   )r   r   r   r   r   r   r   r/   )r   paramss     r4   _default_paramszChatOpenAI._default_paramsn  sm     _n+	
 

 
 ?&#'?F< +LNN+(,(<F$%rG   r8   "Optional[CallbackManagerForLLMRun]rI   c                     t                      r  j        j        di |S t           |          }|d fd            } |di |S )z*Use tenacity to retry the completion call.rK   rI   r   r0   c                 (     j         j        di | S rM   )rO   rT   )rI   r   s    r4   rQ   z@ChatOpenAI.completion_with_retry.<locals>._completion_with_retry  s    %4;%/////rG   rN   rR   )r/   rO   rT   rF   )r   r8   rI   rU   rQ   s   `    r4   completion_with_retryz ChatOpenAI.completion_with_retry~  s     >> 	0%4;%/////1$KPPP		0 	0 	0 	0 	0 
	0 &%/////rG   llm_outputsList[Optional[dict]]rj   c                    i }d }|D ]c}||d         }|=|                                 D ](\  }}||v rt          ||         |          ||<   #|||<   )||                    d          }d|| j        d}|r||d<   |S )Ntoken_usagesystem_fingerprint)r   r   )rz   rq   ri   r   )	r   r   rl   r   outputr   rs   rt   combineds	            r4   _combine_llm_outputszChatOpenAI._combine_llm_outputs  s    $&!! 	F 	FF~ /K&'--// 3 3DAq///1D/2A2 2+A.. 23+A..!)%+ZZ0D%E%E"#6doVV 	@-?H)*rG   messagesList[BaseMessage]stopOptional[List[str]]Iterator[ChatGenerationChunk]c              +  *  K   |                      ||          \  }}i ||ddi}t          } | j        d||d|D ]}t          |t                    s|                                }t          |d                   dk    rE|d         d         }	|	d         \t          |	d         |          }|	                    d          }
|
t	          |
          nd }|j        }t          ||	          }|r|
                    |j        |
           |V  d S )Nr   Tr   r8   choicesr   deltafinish_reasonr   messagegeneration_info)chunkrN   )_create_message_dictsr   r   rv   rj   lenrk   ri   	__class__r"   on_llm_new_tokentextr   r   r   r8   rI   message_dictsr   default_chunk_classr   choicer   r   cg_chunks                r4   _streamzChatOpenAI._stream  sv      !% : :8T J Jv5F5f5h55,/T/ 
"
 
?E
 
 	 	E eT** %

5#$$))9%a(Fg&3w!4 E #JJ77M5B5N=1111TX  #(/*  H  L,,X](,KKKNNNN/	 	rG   r   Optional[bool]r#   c                    ||n| j         }|r  | j        |f||d|}t          |          S |                     ||          \  }}	i |	|d|ini |}	 | j        d||d|	}
|                     |
          S )Nr   r8   r   r   rN   )r   r   r   r   r   _create_chat_resultr   r   r   r8   r   rI   should_streamstream_iterr   r   responses              r4   	_generatezChatOpenAI._generate  s     #)"4$. 	5&$,# @F K (444 $ : :8T J Jv

%+%7&!!R
 

 .4- 
"
 
?E
 
 ''111rG   +Tuple[List[Dict[str, Any]], Dict[str, Any]]c                d    | j         }|d|v rt          d          ||d<   d |D             }||fS )Nr   z2`stop` found in both the input and default params.c                ,    g | ]}t          |          S rN   r.   rr   ms     r4   
<listcomp>z4ChatOpenAI._create_message_dicts.<locals>.<listcomp>  !    FFF033FFFrG   )_client_paramsrx   )r   r   r   r   r   s        r4   r   z ChatOpenAI._create_message_dicts  sS     $ !UVVV!F6NFFXFFFf$$rG   r  Union[dict, BaseModel]c                   g }t          |t                    s|                                }|d         D ]o}t          |d                   }t          |                    d                    }d|v r|d         |d<   t	          ||          }|                    |           p|                    di           }|| j        |                    dd	          d
}t          ||          S )Nr   r   r   r   logprobsr   usager   r^   )r   r   r   )generations
llm_output)rv   rj   r-   ri   r!   appendr   r#   )	r   r  r  resr   r   genr   r  s	            r4   r   zChatOpenAI._create_chat_result  s   (D)) 	'}}HI& 		$ 		$C-c)n==G"1I1IJJJOS  .1*o
+  /  C s####ll7B//&/"*,,/CR"H"H
 


 kjIIIIrG   rH   "AsyncIterator[ChatGenerationChunk]c               P  K   |                      ||          \  }}i ||ddi}t          }t          | f||d| d {V 2 3 d {V }t          |t                    s|                                }t          |d                   dk    rJ|d         d         }	|	d         at          |	d         |          }|	                    d          }
|
t	          |
          nd }|j        }t          ||	          }|r"|
                    |j        |
           d {V  |W V  6 d S )Nr   Tr   r   r   r   r   r   r   )tokenr   )r   r   rV   rv   rj   r   rk   ri   r   r"   r   r   r   s                r4   _astreamzChatOpenAI._astream  s      !% : :8T J Jv5F5f5h55,!7"
(k"
 "
EK"
 "
 
 
 
 
 
 
 	 	 	 	 	 	 	% eT** %

5#$$))9%a(Fg&3w!4 E #JJ77M5B5N=1111TX  #(/*  H  X!22h2WWWWWWWWWNNNNN/
 
 
s   D%c                  K   ||n| j         }|r& | j        |f||d|}t          |           d {V S |                     ||          \  }}	i |	|d|ini |}	t	          | f||d|	 d {V }
|                     |
          S )Nr   r   r   )r   r  r   r   rV   r   r   s              r4   
_ageneratezChatOpenAI._agenerate&  s      #)"4$. 	<'$-# @F K /{;;;;;;;;; $ : :8T J Jv

%+%7&!!R
 

 0
(k
 
EK
 
 
 
 
 
 
 
 ''111rG   c                &    i d| j         i| j        S )zGet the identifying parameters.r   )r   r   r   s    r4   _identifying_paramszChatOpenAI._identifying_params@  s     K<1JT5IJJrG   c                    d| j         i}t                      s(|                    | j        | j        | j        d           | j        rddl}| j        | j        d|_        i | j	        |S )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      r4   r  zChatOpenAI._client_paramsE  s     T_(
 ~~ 	#2 $ 4$($<     	SMMM$($5@QRRFL7$&7,77rG   c                l    d| j         it                                          |          | j        |S )z,Get the parameters used to invoke the model.r   )r   )r   super_get_invocation_paramsr   )r   r   rI   r   s      r4   r(  z!ChatOpenAI._get_invocation_paramsY  sJ    
 T_
gg,,$,77
 "
 	
 	
rG   c                    dS )zReturn type of chat model.zopenai-chatrN   r   s    r4   	_llm_typezChatOpenAI._llm_typed  s	     }rG   Tuple[str, tiktoken.Encoding]c                $   t                      }| j        | j        }n| j        }|dk    rd}n|dk    rd}	 |                    |          }nA# t          $ r4 t
                              d           d}|                    |          }Y nw xY w||fS )Nr   gpt-3.5-turbo-0301gpt-4z
gpt-4-0314z5Warning: model not found. Using cl100k_base encoding.cl100k_base)r5   r   r   encoding_for_modelKeyErrorr   r   get_encoding)r   	tiktoken_r   encodings       r4   _get_encoding_modelzChatOpenAI._get_encoding_modeli  s    $&&	#/,EEOE'' -'!! %	5 33E::HH 	5 	5 	5NNRSSS!E --e44HHH	5 hs   A ;B
Br   	List[int]c                    t           j        d         dk    r!t                                          |          S |                                 \  }}|                    |          S )z9Get the tokens present in the text with tiktoken package.r      )sysversion_infor'  get_token_idsr5  encode)r   r   _encoding_modelr   s       r4   r;  zChatOpenAI.get_token_ids  sZ     A!##77((... 4466>$$T***rG   toolsCOptional[Sequence[Union[Dict[str, Any], Type, Callable, BaseTool]]]c           
     p   |t          j        d           t          j        d         dk    r!t	                                          |          S |                                 \  }}|                    d          rd}d}nB|                    d          s|                    d	          rd
}d}nt          d| d          d}d |D             }|D ]^}	||z  }|		                                D ]B\  }
}|t          |                    t          |                              z  }|
dk    r||z  }C_|d
z  }|S )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.ipynbNzECounting tokens in tool schemas is not yet supported. Ignoring tools.r   r8  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   c                ,    g | ]}t          |          S rN   r  r	  s     r4   r  z;ChatOpenAI.get_num_tokens_from_messages.<locals>.<listcomp>  r  rG   r`   )r{   r|   r9  r:  r'  get_num_tokens_from_messagesr5  
startswithNotImplementedErrorrz   r   r<  r   )r   r   r?  r   r4  tokens_per_messagetokens_per_name
num_tokensmessages_dictr   keyvaluer   s               r4   rF  z'ChatOpenAI.get_num_tokens_from_messages  s    MW   A!##7777AAA2244x011 	!" OOo.. 		%2B2B72K2K 		!"OO%G"G G G   
FFXFFF$ 	2 	2G,,J%mmoo 2 2
U c(//#e**"="=>>>
&==/1J2 	a
rG   	functions:Sequence[Union[Dict[str, Any], Type[BaseModel], Callable]]r_   )Runnable[LanguageModelInput, BaseMessage]c                ,   ddl m fd|D             }|bt          |          dk    rt          d          |d         d         |k    r"t          d| d	|d         d          d
          d|i}i |d|i} t	                      j        dd|i|S )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_functionc                &    g | ]} |          S rN   rN   )rr   fnrS  s     r4   r  z-ChatOpenAI.bind_functions.<locals>.<listcomp>  s%    RRR"99"==RRRrG   Nr   zGWhen specifying `function_call`, you must provide exactly one function.r`   zFunction call z3 was specified, but the only provided function was .r_   rO  rN   )&langchain.chains.openai_functions.baserS  r   rx   r'  bind)r   rO  r_   rI   formatted_functionsfunction_call_rS  r   s         @r4   bind_functionszChatOpenAI.bind_functions  s   ( 	VUUUUURRRR	RRR$&''1,,     #1%f->> O] O O-@-CF-KO O O   %m4N@@@@Fuww| 
 
)

 
 	
rG   )r0   r   )r0   r   )r0   r   )r0   r   )r   r   r0   r   )r   r   r0   r   N)r8   r   rI   r   r0   r   )r   r   r0   rj   )NN)
r   r   r   r   r8   r   rI   r   r0   r   )NNN)r   r   r   r   r8   r   r   r   rI   r   r0   r#   )r   r   r   r   r0   r  )r  r  r0   r#   )
r   r   r   r   r8   rH   rI   r   r0   r  )r   r   r   r   r8   rH   r   r   rI   r   r0   r#   )r   r   rI   r   r0   r   )r0   r   )r0   r+  )r   r   r0   r6  )r   r   r?  r@  r0   rw   )rO  rP  r_   r   rI   r   r0   rQ  )7__name__
__module____qualname____doc__propertyr   classmethodr   r   r   r+   rO   __annotations__rS   r   r   rj   r   r   r   r   r   r   r=   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*  r5  r;  rF  r[  __classcell__)r   s   @r4   r7   r7      s3          4 4 4 X4 6 6 6 [6    X    [ %d333F3333dD999L9999eO7CCCJCCCCK+#(5#>#>#>L>>>>V %*E$i$H$H$HNHHHHO%*U4z%J%J%JOJJJJ).t>)R)R)RRRRRN"&L&&&&DIEIE E EO    uQ'''K''''<I/AJJJJA $J$$$$/)-----J 7;O::::7;M;;;; %)K(((( :  L _(###   [ $#2 8 8 8 X8t    X  AE0 0 0 0 0   4 %):>	" " " " "N %):>!%2 2 2 2 22	% 	% 	% 	%J J J J2 %)?C	" " " " "N %)?C!%2 2 2 2 24 K K K XK 8 8 8 X8( +/	
 	
 	
 	
 	
 	
 	
    X   .+ + + + + + - - - - - - -d (,'
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
rG   )r0   r   r\  )r6   r7   r8   r9   r0   r:   )r6   r7   r8   rH   rI   r   r0   r   )rW   rX   rY   rZ   r0   r   )rl   rm   rn   rm   r0   rm   )Kr`  
__future__r   loggingr   r9  r{   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/   r2   	getLoggerr]  r   r5   rF   rV   rk   rq   r7   rN   rG   r4   <module>rw     s     " " " " " "  				 



                                7 6 6 6 6 6        > = = = = =         
 L K K K K K	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 S R R R R R R R R R - - - - - - ) ) ) ) ) )         
 C B B B B B B B B B B B        : 9 9 9 9 9 OOO 
	8	$	$	 	 	 	  		    , <@2 2 2 2 2&. . . .<   6 
E6S  i
 i
 i
 i
 i
 i
 i
 i
 i
 i
rG   