
    dhӼ                    T   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JrJr  S SKJr  S SKJrJr  S SKJrJr  S SKJrJ r J!r!  S SK"J#r#J$r$J%r%  S S	K&J'r'  S S
K(J)r)  S SK*J+r+J,r,J-r-  S SK.J/r/  \R`                  " \15      r2        S#S jr3    S$S jr4S%S jr5S&S jr6 S'     S(S jjr7 S'       S)S jjr8 S'       S*S jjr9 " S S\5      r:\" SSSS9 " S S\:5      5       r;\" SSSS9 " S S\:5      5       r<\" SSS S9 " S! S"\5      5       r=g)+    )annotationsN)AbstractSetAnyAsyncIterator	AwaitableCallable
CollectionDictIteratorListLiteralMappingOptionalSetTupleUnion)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLLMcreate_base_retry_decorator)
GenerationGenerationChunk	LLMResult)get_from_dict_or_envget_pydantic_field_namespre_init)
get_fields)_build_model_kwargs)
ConfigDictFieldmodel_validator)is_openai_v1c                    U R                  US   5      nU H&  nXB;  a  US   U   X$'   M  X$==   US   U   -  ss'   M(     g)zUpdate token usage.usageN)intersection)keysresponsetoken_usage_keys_to_use_keys        W/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/openai.pyupdate_token_usager-   .   sS     $$Xg%67L" ( 1$ 7K'!24!88	     c           
         U S   (       d	  [        SS9$ [        U S   S   S   [        U S   S   R                  SS5      U S   S   R                  SS5      S	9S
9$ )z0Convert a stream response to a generation chunk.choices textr   r3   finish_reasonNlogprobsr4   r5   r3   generation_info)r   dictget)stream_responses    r,   $_stream_response_to_generation_chunkr<   :   sr     9%B''Y'*62))4Q7;;OTR$Y/266z4H
 r.   c                    U S   S   S==   US   S   S   -  ss'   US   S   R                  SS5      U S   S   S'   US   S   S   U S   S   S'   g)z)Update response from the stream response.r0   r   r3   r4   Nr5   )r:   )r(   r;   s     r,   _update_responser>   I   s~    Y6"oi&@&CF&KK".=i.H.K.O.O/HY?+ *9)CA)Fz)RHY:&r.   c                     SSS S S./0$ )Nr0   r1   r3   r4   r5    rA   r.   r,   _streaming_response_templaterB   R   s"    !% 
 r.   c                   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   rE   )llmrF   rG   errorss       r,   _create_retry_decoratorrP   ^   si      	''##,,F '[ r.   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$ NrA   )clientcreatekwargsrN   s    r,   _completion_with_retry5completion_with_retry.<locals>._completion_with_retry}   s    zz  *6**r.   rA   rX   r   returnr   )r#   rU   rV   rP   rN   rF   rX   retry_decoratorrY   s   `    r,   completion_with_retryr_   r   sR     ~~zz  *6**-c{KO+ + "+F++r.   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.NrR   c                 X   >#    TR                   R                  " S0 U D6I S h  vN $  N7frT   )rU   acreaterW   s    r,   rY   6acompletion_with_retry.<locals>._completion_with_retry   s&      ZZ''1&1111s    *(*rA   r[   )r#   async_clientrV   rP   r]   s   `    r,   acompletion_with_retryre      sg      ~~%%,,6v666-c{KO2 2 (1&111 7 2s!   /A"A&A"A A" A"c                  &  ^  \ rS rSr% Sr\SXS j5       r\SYS j5       r\SZS j5       r	\S[S 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rS\S'    SrS\S'    SrS\S'    SrS\S'    S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+rS\S,'    \" S	S-S9rS.\S/'    \" \S!9rS0\S1'    S2r S\S3'    S4r!S\S5'    \"" 5       r#S6\S7'    S8r$S9\S:'    S	r%S$\S;'    S	r&S<\S='   S	r'S>\S?'   S	r(S@\SA'    S\U 4SB jjr)\*" S
SC9r+\," SDSE9\S]SF j5       5       r-\.S^SG j5       r/\SZSH j5       r0  S_         S`SI jjr1  S_         SaSJ jjr2  S_         SbSK jjr3  S_         ScSL jjr4 Sd       SeSM jjr5S	SN.           SfSO jjr6\SZSP j5       r7\SgSQ j5       r8\ShSR j5       r9SiU 4SS jjr:\;SjST j5       r<\SkSU j5       r=SlSV jr>SWr?U =r@$ )m
BaseOpenAI   z'Base OpenAI large language model class.c                
    SS0$ )Nopenai_api_keyOPENAI_API_KEYrA   selfs    r,   
lc_secretsBaseOpenAI.lc_secrets   s     "233r.   c                
    / SQ$ z*Get the namespace of the langchain object.)	langchainllmsrG   rA   clss    r,   get_lc_namespaceBaseOpenAI.get_lc_namespace   
     /.r.   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_api_baseopenai_organizationopenai_proxy)r{   r|   r}   )rm   
attributess     r,   lc_attributesBaseOpenAI.lc_attributes   sZ    %'
,0,@,@J()##040H0HJ,-)-):):J~&r.   boolc                    g)NTrA   rt   s    r,   is_lc_serializableBaseOpenAI.is_lc_serializable   s    r.   NTdefaultexcluder   rU   rd   gpt-3.5-turbo-instructmodelr   aliasstr
model_namegffffff?floattemperature   int
max_tokens   top_pr   frequency_penaltypresence_penaltynbest_ofdefault_factorymodel_kwargsapi_keyOptional[str]rj   base_urlr{   organizationr|   r}      
batch_sizetimeoutz,Union[float, Tuple[float, float], Any, None]request_timeoutzOptional[Dict[str, float]]
logit_bias   rE   F	streaming'Union[Literal['all'], AbstractSet[str]]allowed_specialall&Union[Literal['all'], Collection[str]]disallowed_specialtiktoken_model_namezUnion[Mapping[str, str], None]default_headersz!Union[Mapping[str, object], None]default_queryzUnion[Any, None]http_clientc                   > UR                  SS5      nUR                  S5      (       d  UR                  S5      (       a'  SU;  a!  [        R                  " S5        [	        S0 UD6$ [
        TU ]  U 5      $ )zInitialize the OpenAI object.r   r1   gpt-3.5-turbogpt-4z	-instructYou are trying to use a chat model. This way of initializing it is no longer supported. Instead, please use: `from langchain_community.chat_models import ChatOpenAI`rA   )r:   
startswithwarningswarn
OpenAIChatsuper__new__)ru   datar   	__class__s      r,   r   BaseOpenAI.__new__   sm    XXlB/
!!/22j6K6KG6T6T+MMK
 %%%ws##r.   )populate_by_namebeforemodec                2    [        U 5      n[        X5      nU$ )>Build extra kwargs from additional params that were passed in.)r   r   )ru   valuesall_required_field_namess      r,   build_extraBaseOpenAI.build_extra  s     $<C#@ $VFr.   c           	     z   US   S:  a  [        S5      eUS   (       a  US   S:  a  [        S5      eUS   (       a  US   S:  a  [        S5      e[        USS	5      US'   US
   =(       d    [        R                  " S5      US
'   [        USSSS9US'   US   =(       d3    [        R                  " S5      =(       d    [        R                  " S5      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                  US'   UR                  S5      (       d  UR                  " S0 UD6R                  US'   U$ UR                  S5      (       d  UR                  US'   U$  U$ ! [
         a    [        S5      ef = f)?Validate that api key and python package exists in environment.r   r   n must be at least 1.r   !Cannot stream results when n > 1.r   'Cannot stream results when best_of > 1.rj   rk   r{   OPENAI_API_BASEr}   OPENAI_PROXYr1   r   r|   OPENAI_ORG_IDOPENAI_ORGANIZATIONr   NTCould not import openai python package. Please install it with `pip install openai`.r   rE   r   r   r   )r   r   r   r   rE   r   r   r   rU   rd   rA   )
ValueErrorr   osgetenvrG   ImportErrorr#   r:   OpenAIcompletionsAsyncOpenAI
Completion)ru   r   rG   client_paramss       r,   validate_environmentBaseOpenAI.validate_environment  s    #;?455+6#;?@AA+6)#4q#8FGG#7$&6$
  %++<$= %
B
 ! "6	"
~ () 0yy)0yy./ 	$%
	 >>!"23 &'< ="#45!"34%m4#)*;#<!'!8%m4	M ::h''#)==#A=#A#M#Mx ::n--)/););)Lm)L)X)X~&  H%%%00F8  5  	? 	s   F$ $F:c                x   U R                   U R                  U R                  U R                  U R                  U R
                  S.nU R                  b  U R                  US'   U R                  b  [        5       (       d  U R                  US'   U R                  S:  a  U R                  US'   0 UEU R                  E$ )2Get the default parameters for calling OpenAI API.)r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r#   r   r   )rm   normal_paramss     r,   _default_paramsBaseOpenAI._default_paramsL  s      ++ZZ!%!7!7 $ 5 5//)
 ??&*.//M,'+LNN/3/C/CM+, <<!'+||M)$5-54#4#455r.   c              +    #    0 U R                   EUESS0EnU R                  XQ/U5        [        U 4XS.UD6 H  n[        U[        5      (       d  UR	                  5       n[        U5      nU(       aF  UR                  UR                  UU R                  UR                  (       a  UR                  S   OS S9  Uv   M     g 7fNstreamTpromptrF   r5   )chunkverboser5   )
_invocation_paramsget_sub_promptsr_   
isinstancer9   r<   on_llm_new_tokenr3   r   r8   rm   r   stoprF   rX   paramsstream_respr   s           r,   _streamBaseOpenAI._streamd  s      GD++FvFxFVXt40

<B
K k400)..08EE,,JJ LL,, #22:> -  K
s   B?Cc                 #    0 U R                   EUESS0EnU R                  XQ/U5        [        U 4XS.UD6I S h  vN   S h  vN n[        U[        5      (       d  UR	                  5       n[        U5      nU(       aN  UR                  UR                  UU R                  UR                  (       a  UR                  S   OS S9I S h  vN   U7v   M   N N N
 g 7fr   )
r   r   re   r   r9   r<   r   r3   r   r8   r   s           r,   _astreamBaseOpenAI._astream~  s      GD++FvFxFVXt4'=(
(
<B(
 "
 "
 	+ k400)..08EE!22JJ LL,, #22:> 3    K"
 	"
sF   9CCC CCCBC	C
CCCCc                   U R                   n0 UEUEnU R                  XQU5      n/ n0 n1 Skn	Sn
U GHF  nU R                  (       a  [        U5      S:  a  [	        S5      eSnU R
                  " US   X#40 UD6 H  nUc  UnM
  X-  nM     Uc   eUR                  UR                  UR                  (       a  UR                  R                  S5      OSUR                  (       a  UR                  R                  S5      OSS.5        M  [        U 4XS	.UD6n[        U[        5      (       d  UR                  5       nUR                  US
   5        [        XU5        U
(       a  GM5  UR                  S5      n
GMI     U R                  UUUUU
S9$ )a,  Call out to OpenAI's endpoint with k unique prompts.

Args:
    prompts: The prompts to pass into the model.
    stop: Optional list of stop words to use when generating.

Returns:
    The full LLM output.

Example:
    .. code-block:: python

        response = openai.generate(["Tell me a joke."])
>   total_tokensprompt_tokenscompletion_tokensNr   ,Cannot stream results with multiple prompts.r   r4   r5   r@   r   r0   system_fingerprintr   )r   r   r   lenr   r   appendr3   r8   r:   r_   r   r9   extendr-   create_llm_resultrm   promptsr   rF   rX   r   sub_promptsr0   r)   _keysr   _prompts
generationr   r(   s                  r,   	_generateBaseOpenAI._generate  s   , ((%F%f%**6DA&( G,0#H~~x=1$$%STT8<
!\\(1+tSFSE!)%*
"+
	 T
 "--- *%55 *4)C)C)G)G)X!%55 %/$>$>$B$B:$N!
 1!)FL "(D11  (}}Hx	23"5K@)))16J)K&G $H %%1 & 
 	
r.   c                  #    U R                   n0 UEUEnU R                  XQU5      n/ n0 n1 Skn	Sn
U H  nU R                  (       aI  [        U5      S:  a  [	        S5      eSnU R
                  " US   X#40 UD6  Sh  vN nUc  UnM  X-  nM  [        U 4XS	.UD6I Sh  vN n[        U[        5      (       d  UR                  5       nUR                  US
   5        [        XU5        M     U R                  UUUUU
S9$  N
 Uc   eUR                  UR                  UR                  (       a  UR                  R                  S5      OSUR                  (       a  UR                  R                  S5      OSS.5        GMQ   N7f)z:Call out to OpenAI's endpoint async with k unique prompts.>   r   r   r   Nr   r   r   r4   r5   r@   r   r0   r   )r   r   r   r   r   r   r   r3   r8   r:   re   r   r9   r   r-   r   r  s                  r,   
_agenerateBaseOpenAI._agenerate  s     ((%F%f%**6DA&( G,0#H~~x=1$$%STT8<
#'==QK$6<$ ,% ")%*
"+
 "8"!)"FL"  "(D11'}}Hx	23"5K@A $B %%1 & 
 	
7, $ "--- *%55 *4)C)C)G)G)X!%55 %/$>$>$B$B:$N!
s8   A8F:D>D?DF!F"A FDBFc                .   Ub  SU;   a  [        S5      eX1S'   US   S:X  a1  [        U5      S:w  a  [        S5      eU R                  US   5      US'   [        S[        U5      U R                  5       Vs/ sH  nX$X@R                  -    PM     nnU$ s  snf )z!Get the sub prompts for llm call.r   2`stop` found in both the input and default params.r   r   z7max_tokens set to -1 not supported for multiple inputs.r   )r   r   max_tokens_for_promptranger   )rm   r   r  r   ir  s         r,   r   BaseOpenAI.get_sub_prompts  s      !UVV!6N,2%7|q  M  $(#=#=gaj#IF<  1c'lDOO<
< OO+,< 	 
 	
s   5Br   c               r   / nUR                  SU R                  5      n[        U5       Hd  u  pXU-  US-   U-   n
UR                  U
 Vs/ sH6  n[	        US   [        UR                  S5      UR                  S5      S9S9PM8     sn5        Mf     X@R                  S.nU(       a  X\S	'   [        XlS
9$ s  snf )z2Create the LLMResult from the choices and prompts.r   r   r3   r4   r5   r6   r7   r)   r   r   generations
llm_output)r:   r   	enumerater   r   r9   r   r   )rm   r0   r  r   r)   r   r  r   r  _sub_choiceschoicer  s                r,   r   BaseOpenAI.create_llm_result4  s     JJsDFF#g&DA!a%1q5A+6K #.	 #. #F^(,*0**_*E%+ZZ
%;) #.	 ' &1P
/A+,[HH	s   <B4
c                   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EU R                  E$ )z,Get the parameters used to invoke the model.)r   api_baser   r   Nhttphttps)	r#   updaterj   r{   r|   r}   rG   proxyr   )rm   openai_credsrG   s      r,   r   BaseOpenAI._invocation_paramsS  sz     (*~~#22 $ 4 4$($<$< $($5$5@Q@QRFL7,7$"6"677r.   c                :    0 SU R                   0EU R                  E$ zGet the identifying parameters.r   r   r   rl   s    r,   _identifying_paramsBaseOpenAI._identifying_paramse  $     K<1JT5I5IJJr.   c                    g)Return type of llm.rG   rA   rl   s    r,   	_llm_typeBaseOpenAI._llm_typej  s     r.   c                  > [         R                  S   S:  a  [        TU ]  U5      $  SSKnU R                  =(       d    U R                  n UR                  U5      nUR                  UU R                  U R                  S9$ ! [
         a    [        S5      ef = f! [         a+    [        R                  S5        SnUR                  U5      n Nrf = f)	-Get the token IDs using the tiktoken package.r      r   NCould not import tiktoken python package. This is needed in order to calculate get_num_tokens. Please install it with `pip install tiktoken`.z5Warning: model not found. Using cl100k_base encoding.cl100k_baser   r   )sysversion_infor   get_num_tokenstiktokenr   r   r   encoding_for_modelKeyErrorloggerwarningget_encodingencoder   r   )rm   r3   r9  r   encr   r   s         r,   get_token_idsBaseOpenAI.get_token_idso  s     A"7)$//	 --@
	/--j9C zz 00#66  
 	
  	A 	  	/NNRS!E''.C	/s   B B B2CCc                F   0 SS_SS_SS_SS_SS_SS	_S
S	_SS	_SS_SS_SS_SS_SS_SS_SS_SS_SS_SSSSSSSSSSS.
EnSU ;   a  U R                  S5      S   n UR                  U S 5      nUc/  [        S!U  S"3S#R                  UR	                  5       5      -   5      eU$ )$a/  Calculate the maximum number of tokens possible to generate for a model.

Args:
    modelname: The modelname we want to know the context size for.

Returns:
    The maximum context size

Example:
    .. code-block:: python

        max_tokens = openai.modelname_to_contextsize("gpt-3.5-turbo-instruct")
zgpt-4oi  zgpt-4o-2024-05-13r   i    z
gpt-4-0314z
gpt-4-0613z	gpt-4-32ki   zgpt-4-32k-0314zgpt-4-32k-0613r   i   zgpt-3.5-turbo-0301zgpt-3.5-turbo-0613zgpt-3.5-turbo-16ki@  zgpt-3.5-turbo-16k-0613r   ztext-ada-001i  adaztext-babbage-001i  i  iA  i   )
babbageztext-curie-001curiedavinciztext-davinci-003ztext-davinci-002zcode-davinci-002zcode-davinci-001zcode-cushman-002zcode-cushman-001zft-:r   NzUnknown model: z=. Please provide a valid OpenAI model name.Known models are: z, )splitr:   r   joinr'   )	modelnamemodel_token_mappingcontext_sizes      r,   modelname_to_contextsize#BaseOpenAI.modelname_to_contextsize  sn   
g

 T
 $	

 $
 
 e
 e
 T
 !$
 !$
  
 %e
 %d
 D
  4!
" #
$ " $ $ $ $ $ $7
> I!,Q/I*..y$?!) -% %'+yy1D1I1I1K'LM 
 r.   c                8    U R                  U R                  5      $ )z$Get max context size for this model.)rN  r   rl   s    r,   max_context_sizeBaseOpenAI.max_context_size  s     ,,T__==r.   c                B    U R                  U5      nU R                  U-
  $ )a0  Calculate the maximum number of tokens possible to generate for a prompt.

Args:
    prompt: The prompt to pass into the model.

Returns:
    The maximum number of tokens to generate for a prompt.

Example:
    .. code-block:: python

        max_tokens = openai.max_tokens_for_prompt("Tell me a joke.")
)r8  rQ  )rm   r   
num_tokenss      r,   r   BaseOpenAI.max_tokens_for_prompt  s%     ((0
$$z11r.   rA   )r\   zDict[str, str]r\   	List[str]r\   ry   )r\   r   )r   r   r\   zUnion[OpenAIChat, BaseOpenAI]r   ry   r\   r   r   r
   r\   r
   NN
r   r   r   Optional[List[str]]rF   "Optional[CallbackManagerForLLMRun]rX   r   r\   zIterator[GenerationChunk]
r   r   r   r]  rF   'Optional[AsyncCallbackManagerForLLMRun]rX   r   r\   zAsyncIterator[GenerationChunk]
r  rW  r   r]  rF   r^  rX   r   r\   r   
r  rW  r   r]  rF   r`  rX   r   r\   r   N)r   ry   r  rW  r   r]  r\   zList[List[str]])r0   r   r  rW  r   ry   r)   zDict[str, int]r   r   r\   r   r\   zMapping[str, Any]r\   r   r3   r   r\   z	List[int])rK  r   r\   r   )r\   r   )r   r   r\   r   )A__name__
__module____qualname____firstlineno____doc__propertyrn   classmethodrv   r   r   r!   rU   __annotations__rd   r   r   r   r   r   r   r   r   r9   r   rj   r{   r|   r}   r   r   r   rE   r   setr   r   r   r   r   r   r   r    model_configr"   r   r   r   r   r   r   r  r
  r   r   r   r)  r.  rA  staticmethodrN  rQ  r  __static_attributes____classcell__r   s   @r,   rg   rg      sD   14 4 / /     d3FC3dD9L#9$<GLJLK+J( E5D u ;e$AsJ;GSK#(#>L.>V %*$i$HNMHO%*4z%JO]J).t>)RRN"&L-&JHDIIEOA -24-HJ*HDK<It/?BuO<D3AF>F7)--J 7;O3:7;M4; %)K!( $ L (#  $ 6 6p 6 64 %):>	 " 8	
  
#: %)?C	 " =	
  
(: %):>	I
I
 "I
 8	I

 I
 
I
\ %)?C	8
8
 "8
 =	8

 8
 
8
| %)	  "	
 
< -1II I 	I
 $I *I 
I> 8 8" K K  
8 8 8t > >2 2r.   rg   z0.0.10z1.0zlangchain_openai.OpenAI)sinceremovalalternative_importc                  N   ^  \ rS rSrSr\SS j5       r\SU 4S jj5       rSr	U =r
$ )r   i  a  OpenAI large language models.

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.llms import OpenAI
        openai = OpenAI(model_name="gpt-3.5-turbo-instruct")
c                
    / SQ$ rq   rA   rt   s    r,   rv   OpenAI.get_lc_namespace  rx   r.   c                8   > 0 SU R                   0E[        TU ]  E$ )Nr   )r   r   r   rm   r   s    r,   r   OpenAI._invocation_params  s!    K7DOO,K0JKKr.   rA   rV  rX  )rg  rh  ri  rj  rk  rm  rv   rl  r   rr  rs  rt  s   @r,   r   r     s2     / / L Lr.   r   zlangchain_openai.AzureOpenAIc                  T  ^  \ rS rSr% SrS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rS\S'    SrS\S'    S	rS\S'    SrS\S'    \SS j5       r\S S j5       r\S!U 4S jj5       r\S"U 4S jj5       r\S#S j5       r\S"S j5       rSrU =r$ )$AzureOpenAIi  a  Azure-specific OpenAI large language models.

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.llms import AzureOpenAI

        openai = AzureOpenAI(model_name="gpt-3.5-turbo-instruct")
NzUnion[str, None]azure_endpointazure_deploymentr   deployment_namer1   api_versionr   openai_api_versionr   rj   azure_ad_tokenzUnion[Callable[[], str], None]azure_ad_token_providerz)Union[Callable[[], Awaitable[str]], None]azure_ad_async_token_provideropenai_api_typeTr   validate_base_urlc                
    / SQ$ rq   rA   rt   s    r,   rv   AzureOpenAI.get_lc_namespace7  rx   r.   c                ,   US   S:  a  [        S5      eUS   (       a  US   S:  a  [        S5      eUS   (       a  US   S:  a  [        S5      eUS   =(       d3    [        R                  " S	5      =(       d    [        R                  " S
5      US'   US   =(       d    [        R                  " S5      US'   US   =(       d    [        R                  " S5      US'   US   =(       d    [        R                  " S5      US'   [        USSSS9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       (       GaP  US   nU(       a  US    (       a  S!U;  a:  US   R                  S"5      S!-   US'   [        R                  " S#U S$US    S%35        US&   (       aZ  [        R                  " S'5        US&   US   ;  a3  [        R                  " S(U S$US    S%35        US==   S)US&   -   -  ss'   SUS&'   US   US   US&   US   US   US*   US   US   US+   US,   0 US-   =(       d    0 ES.S/0EUS0   US1   S2.nUR                  " S60 UD6R                  US3'   US4   nU(       a  XTS*'   UR                  " S60 UD6R                  US5'   U$ UR                  US3'   U$ ! [
         a    [        S5      ef = f)7r   r   r   r   r   r   r   r   rj   AZURE_OPENAI_API_KEYrk   r  AZURE_OPENAI_ENDPOINTr  AZURE_OPENAI_AD_TOKENr{   r   r}   r   r1   r   r|   r   r   r  OPENAI_API_VERSIONr  OPENAI_API_TYPEazurer   Nr   r  z/openai/zAs of openai>=1.0.0, Azure endpoints should be specified via the `azure_endpoint` param not `openai_api_base` (or alias `base_url`). Updating `openai_api_base` from z to .r  zAs of openai>=1.0.0, if `deployment_name` (or alias `azure_deployment`) is specified then `openai_api_base` (or alias `base_url`) should not be. Instead use `deployment_name` (or alias `azure_deployment`) and `azure_endpoint`.zAs of openai>=1.0.0, if `openai_api_base` (or alias `base_url`) is specified it is expected to be of the form https://example-resource.azure.openai.com/openai/deployments/example-deployment. Updating z/deployments/r  r   rE   r   z
User-Agentz"langchain-comm-python-azure-openair   r   )r  r  r  r   r  r  r   r   r   rE   r   r   r   rU   r  rd   rA   )r   r   r   r   rG   r   r#   rstripr   r   r  r   AsyncAzureOpenAIr   )ru   r   rG   r{   r   r  s         r,   r    AzureOpenAI.validate_environment<  s    #;?455+6#;?@AA+6)#4q#8FGG #$ +yy/0+yy)* 	  $**:#; $
ryy#@
  $**:#; $
ryy#@
  %++<$= %
B
 ! "6	"
~ () 0yy)0yy./ 	$%
 (..B'C (
ryy H
#$ %9%'8'%
 !	 >> %%67O6*=#>O30188=	I ,- MMR ++47H0I/J!M +,MM0 /0?P8QQ ( )8'8%&789< 01+f5F.GG1 15F,-%&:;"()9":$*+<$=!"23"()9":+12K+L &'< ="#45!"34%m4$/06B$ "F$ "(!8%m4!M$  &11BMBNNF8,23R,S),;X78%+%<%< &&k >"   &00F8S  	? 	s   K= =Lc                8   > 0 SU R                   0E[        TU ]  E$ )Nr  )r  r   r)  r|  s    r,   r)  AzureOpenAI._identifying_params  s-    
 $"6"67
g)
 	
r.   c                   > [        5       (       a  SU R                  0nO$U R                  U R                  U R                  S.n0 UE[        TU ]  E$ )Nr   )engineapi_typer  )r#   r  r  r  r   r   )rm   openai_paramsr   s     r,   r   AzureOpenAI._invocation_params  sU    >>$d&:&:;M .. 00#66M
 ?->57#=>>r.   c                    g)r-  r  rA   rl   s    r,   r.  AzureOpenAI._llm_type  s     r.   c                4    U R                   U R                  S.$ )Nr  r  r  rl   s    r,   r   AzureOpenAI.lc_attributes  s       $33"&"9"9
 	
r.   rA   rV  rZ  rd  rX  re  )rg  rh  ri  rj  rk  r  rn  r!   r  r  rj   r  r  r  r  r  rm  rv   r   r   rl  r)  r   r.  r   rr  rs  rt  s   @r,   r  r    s3     (,N$+ ).dBT(UO%U
 $BmDDS',T'KN$KU'+N$+ ?C;B
 PT!#LS OS+"t" / / w wr 
 
 	? 	?   
 
r.   r  z0.0.1zlangchain_openai.ChatOpenAIc                  N  ^  \ rS rSr% Sr\" 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rS\S'   SrS\S'    \" \S9rS\S'    SrS\S'    \" 5       rS\S'    S rS!\S"'    \" S#S$9\S1S% j5       5       r\S2S& j5       r\S3S' j5       r S4     S5S( jjr  S6         S7S) jjr  S6         S8S* jjr  S6         S9S+ jjr   S6         S:S, jjr!\S;S- j5       r"\S<S. j5       r#S=U 4S/ jjr$S0r%U =r&$ )>r   i  a  OpenAI Chat large language models.

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.llms import OpenAIChat
        openaichat = OpenAIChat(model_name="gpt-3.5-turbo")
NTr   r   rU   rd   r   r   r   r   ry   r   r   r   r   rj   r   r{   r}      r   rE   r   prefix_messagesFr   r   r   r   r   r   r   r   r   c                   [        U 5      R                  5        Vs1 sH  o"R                  iM     nnUR                  S0 5      n[	        U5       H1  nXS;  d  M
  XT;   a  [        SU S35      eUR                  U5      XE'   M3     XAS'   U$ s  snf )r   r   zFound z supplied twice.)r   r   r   r:   listr   pop)ru   r   fieldr   extra
field_names         r,   r   OpenAIChat.build_extra  s     >H_=S=S=U#V=UEKK=U #V

>2.v,J9&$vj\9I%JKK$*JJz$:!	 '
 "'~ $Ws   B
c                   [        USS5      n[        USSSS9n[        USSSS9n[        US	S
SS9n SSKnX&l        U(       a  X6l        U(       a  XVl        U(       a	  XDS.Ul         UR                  US'   [        R                  " S5        U$ ! [         a    [        S5      ef = f! [         a    [        S5      ef = f)r   rj   rk   r{   r   r1   r   r}   r   r|   r   r   Nr  r   rU   z`openai` has no `ChatCompletion` attribute, this is likely due to an old version of the openai package. Try upgrading it with `pip install --upgrade openai`.r   )r   rG   r   r  r   r#  r   ChatCompletionAttributeErrorr   r   r   )ru   r   rj   r{   r}   r|   rG   s          r,   r   OpenAIChat.validate_environment  s     .$&6
 /	
 ,	
 3)+@"
	+N"1"&9#(4L	%44F8 	G	

 %  	? 	  	7 	s   4B (B( B%(B>c                    U R                   $ )r   )r   rl   s    r,   r   OpenAIChat._default_paramsH  s        r.   c                   [        U5      S:  a  [        SU 35      eU R                  SUS   S./-   n0 SU R                  0EU R                  EnUb  SU;   a  [        S5      eX$S'   UR                  S	5      S
:X  a  US		 X44$ )Nr   z6OpenAIChat currently only supports single prompt, got userr   )rolecontentr   r   r  r   r  )r   r   r  r   r   r:   )rm   r  r   messagesr   s        r,   _get_chat_paramsOpenAIChat._get_chat_paramsM  s     w<!H	R  ''Fwqz+R*SS!WWdoo$>!W$BVBV!W !UVV!6N::l#r)|$r.   c              +  :  #    U R                  U/U5      u  pV0 UEUESS0En[        U 4XSS.UD6 Hf  n[        U[        5      (       d  UR                  5       nUS   S   S   R	                  SS5      n[        US	9n	U(       a  UR                  XS
9  U	v   Mh     g 7fNr   Tr  rF   r0   r   deltar  r1   r2   )r   )r  r_   r   r9   r:   r   r   
rm   r   r   rF   rX   r  r   r   tokenr   s
             r,   r   OpenAIChat._stream_  s       00&4@5F5f5h50
#
@F
K k400)..0	*1-g6::9bIE#/E,,U,@K
s   BBc               r  #    U R                  U/U5      u  pV0 UEUESS0E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   S   S   R	                  SS5      n[        US	9n	U(       a  UR                  XS
9I S h  vN   U	7v   Mw   N{ Nt N
 g 7fr  )r  re   r   r9   r:   r   r   r  s
             r,   r   OpenAIChat._astreams  s       00&4@5F5f5h5'=(
#(
@F(
 "
 "
 		+ k400)..0	*1-g6::9bIE#/E!2252FFFK"
 		 G"
sC   1B7B/B7B5B1B5 A#B7#B3$B71B53B75B7c                   U R                   (       a;  S nU R                  " US   X#40 UD6 H  nUc  UnM
  XV-  nM     Uc   e[        U//S9$ U R                  X5      u  px0 UEUEn[	        U 4XsS.UD6n	[        U	[        5      (       d  U	R                  5       n	U	S   U R                  S.n
[        [        U	S   S   S   S   S	9//U
S
9$ Nr   )r  r  r%   r  r0   messager  r2   r  )	r   r   r   r  r_   r   r9   r   r   rm   r  r   rF   rX   r  r   r  r   full_responser  s              r,   r  OpenAIChat._generate  s	    >>48Jgaj$NvN%!&J'J	 O
 ))):,8800?%F%f%-
#
@F
 -..)..0M(1//

 y!9!!<Y!G	!RST "	
 	
r.   c                  #    U R                   (       a/  S nU R                  " US   X#40 UD6  S h  vN nUc  UnM  XV-  nM  U R                  X5      u  px0 UEUEn[	        U 4XsS.UD6I S h  vN n	[        U	[        5      (       d  U	R                  5       n	U	S   U R                  S.n
[        [        U	S   S   S   S   S	9//U
S
9$  N
 Uc   e[        U//S9$  Nm7fr  )	r   r   r   r  re   r   r9   r   r   r  s              r,   r
  OpenAIChat._agenerate  s     >>48J#}}WQZUfU (e%!&J'J  00?%F%f%4
#
@F
 
 -..)..0M(1//

 y!9!!<Y!G	!RST "	
 	
'(U
 ))):,88
s2   +CC
CC
8C-C.ACC

Cc                :    0 SU R                   0EU R                  E$ r'  r(  rl   s    r,   r)  OpenAIChat._identifying_params  r+  r.   c                    g)r-  zopenai-chatrA   rl   s    r,   r.  OpenAIChat._llm_type  s     r.   c                  > [         R                  S   S:  a  [        TU ]  U5      $  SSKnUR                  U R                  5      nUR                  UU R                  U R                  S9$ ! [
         a    [        S5      ef = f)r1  r   r2  r   Nr3  r5  )r6  r7  r   rA  r9  r   r:  r   r?  r   r   )rm   r3   r9  r@  r   s       r,   rA  OpenAIChat.get_token_ids  s     A"7(..	 ))$//:zz 00#66  
 	
  	A 	s   A- -BrA   rY  rZ  rX  rc  )r  rW  r   r]  r\   r   r[  r\  r_  ra  rb  rd  re  rf  )'rg  rh  ri  rj  rk  r!   rU   rn  rd   r   r9   r   rj   r{   r}   rE   r  r  r   ro  r   r   r"   rm  r   r   r   rl  r   r  r   r   r  r
  r)  r.  rA  rr  rs  rt  s   @r,   r   r     sc    d3FC3dD9L#9%J%#(#>L.>V %*$i$HNMHO%*4z%JO]J #'L-&K<!$7OT7,It/?BuO<D3AF>F7(#  $ 0 0d ! !
 ?C   (; 	 * %):>	 " 8	
  
#. %)?C	 " =	
  
(. %):>	!
!
 "!
 8	!

 !
 
!
L %)?C	!
!
 "!
 =	!

 !
 
!
F K K  
 
r.   r   )r'   zSet[str]r(   ry   r)   ry   r\   None)r;   ry   r\   r   )r(   ry   r;   ry   r\   r  rX  rc  )rN   Union[BaseOpenAI, OpenAIChat]rF   zHOptional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]]r\   zCallable[[Any], Any])rN   r  rF   r^  rX   r   r\   r   )rN   r  rF   r`  rX   r   r\   r   )>
__future__r   loggingr   r6  r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   langchain_core._api.deprecationr   langchain_core.callbacksr   r   #langchain_core.language_models.llmsr   r   langchain_core.outputsr   r   r   langchain_core.utilsr   r   r   langchain_core.utils.pydanticr   langchain_core.utils.utilsr   pydanticr    r!   r"    langchain_community.utils.openair#   	getLoggerrg  r<  r-   r<   r>   rB   rP   r_   re   rg   r   r  r   rA   r.   r,   <module>r     s   "  	 
     $ 7 U I I 
 5 : 7 7 9			8	$	9
	9,	9;I	9		9#S	  			&
 , 7;,	&,3, , 		,( <@2	&282 2 		2&C	2 C	2L (E>WXLZ L YL4 
E6TX
* X
X
v 
4
O
 O

O
r.   