Ë
    µŒj¹¼  ã                  óR  — 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mZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZm Z m!Z! d dl"m#Z#m$Z$m%Z% d d	l&m'Z' d d
l(m)Z) d dl*m+Z+m,Z,m-Z- d dl.m/Z/  ej`                  e1«      Z2	 	 	 	 	 	 	 	 d#d„Z3	 	 	 	 d$d„Z4d%d„Z5d&d„Z6	 d'	 	 	 	 	 d(d„Z7	 d'	 	 	 	 	 	 	 d)d„Z8	 d'	 	 	 	 	 	 	 d*d„Z9 G d„ de«      Z: eddd¬«       G d„ de:«      «       Z; eddd¬«       G d„ de:«      «       Z< eddd ¬«       G d!„ d"e«      «       Z=y)+é    )Ú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                ó€   — | j                  |d   «      }|D ]%  }||vr|d   |   ||<   Œ||xx   |d   |   z  cc<   Œ' y)zUpdate token usage.ÚusageN)Úintersection)ÚkeysÚresponseÚtoken_usageÚ_keys_to_useÚ_keys        úi/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/openai.pyÚupdate_token_usager-   .   sY   € ð ×$Ñ$ X¨gÑ%6Ó7€LÛˆØ�{Ñ"Ø (¨Ñ 1°$Ñ 7ˆK˜Òà˜Ó ¨'Ñ!2°4Ñ!8Ñ8Ôñ	 ó    c           
     ó¾   — | d   st        d¬«      S t        | d   d   d   t        | d   d   j                  dd«      | d   d   j                  dd«      ¬	«      ¬
«      S )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ÜØ)¨)Ñ4°QÑ7×;Ñ;¸OÈTÓRØ$ YÑ/°Ñ2×6Ñ6°zÀ4ÓHô
ôð r.   c                ó¦   — | d   d   dxx   |d   d   d   z  cc<   |d   d   j                  dd«      | d   d   d<   |d   d   d   | d   d   d<   y)z)Update response from the stream response.r0   r   r3   r4   Nr5   )r:   )r(   r;   s     r,   Ú_update_responser>   I   s~   € àˆYÑ˜Ñ˜6Ó" o°iÑ&@ÀÑ&CÀFÑ&KÑKÓ"Ø.=¸iÑ.HÈÑ.K×.OÑ.OØ˜ó/€HˆYÑ˜Ñ˜?Ñ+ð *9¸Ñ)CÀAÑ)FÀzÑ)R€HˆYÑ˜Ñ˜:Ò&r.   c                 ó   — ddd d dœgiS )Nr0   r1   ©r3   r4   r5   © rA   r.   r,   Ú_streaming_response_templaterB   R   s"   € ààØ!%Ø ñð
ðð r.   c                ó  — dd l }|j                  j                  |j                  j                  |j                  j                  |j                  j
                  |j                  j                  g}t        || j                  |¬«      S )Nr   )Úerror_typesÚmax_retriesÚrun_manager)	ÚopenaiÚerrorÚTimeoutÚAPIErrorÚAPIConnectionErrorÚRateLimitErrorÚServiceUnavailableErrorr   rE   )ÚllmrF   rG   Úerrorss       r,   Ú_create_retry_decoratorrP   ^   sk   € ó ð 	�‰×ÑØ�‰×ÑØ�‰×'Ñ'Ø�‰×#Ñ#Ø�‰×,Ñ,ð€Fô 'Ø¨¯©À[ôð r.   c                ó�   ‡ — t        «       r ‰ j                  j                  di |¤ŽS t        ‰ |¬«      }|dˆ fd„«       } |di |¤ŽS )z*Use tenacity to retry the completion call.©rF   c                 ó<   •—  ‰j                   j                  di | ¤ŽS ©NrA   )ÚclientÚcreate©ÚkwargsrN   s    €r,   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retry}   s   ø€ à ˆs�z‰z× Ñ Ñ* 6Ñ*Ð*r.   rA   ©rX   r   Úreturnr   )r#   rU   rV   rP   ©rN   rF   rX   Úretry_decoratorrY   s   `    r,   Úcompletion_with_retryr^   r   sR   ø€ ô „~Ø ˆs�z‰z× Ñ Ñ* 6Ñ*Ð*ä-¨c¸{ÔK€Oàô+ó ð+ñ "Ñ+ FÑ+Ð+r.   c              ‹  óÀ   ‡ K  — t        «       r$ ‰ j                  j                  di |¤Žƒ d{  –—† S t        ‰ |¬«      }|dˆ fd„«       } |di |¤Žƒ d{  –—† S 7 Œ,7 Œ­w)z0Use tenacity to retry the async completion call.NrR   c               ›  óX   •K  —  ‰j                   j                  di | ¤Žƒ d {  –—† S 7 Œ­wrT   )rU   ÚacreaterW   s    €r,   rY   z6acompletion_with_retry.<locals>._completion_with_retry�   s)   øè ø€ ð (�S—Z‘Z×'Ñ'Ñ1¨&Ñ1×1Ð1Ð1ús   ƒ *£(¤*rA   rZ   )r#   Úasync_clientrV   rP   r\   s   `    r,   Úacompletion_with_retryrc   „   si   øè ø€ ô „~Ø,�S×%Ñ%×,Ñ,Ñ6¨vÑ6×6Ð6ä-¨c¸{ÔK€Oàô2ó ð2ñ (Ñ1¨&Ñ1×1Ð1ð 7øð 2ús!   ƒ*A­A®'AÁAÁAÁAc                  ó&  ‡ — e Zd ZU dZedVd„«       ZedWd„«       ZedXd„«       ZedYd„«       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<   	 dZded<   	 dZded<   	 dZded<   	 dZ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)<   d*Zded+<   	  e
dd,¬«      Zd-ed.<   	  e
e¬ «      Zd/ed0<   	 d1Zded2<   	 d3Z ded4<   	  e!«       Z"d5ed6<   	 d7Z#d8ed9<   	 dZ$d#ed:<   	 dZ%d;ed<<   dZ&d=ed><   dZ'd?ed@<   	 dZˆ fdA„Z( e)d	¬B«      Z* e+dC¬D«      ed[dE„«       «       Z,e-d\dF„«       Z.edXdG„«       Z/	 	 d]	 	 	 	 	 	 	 	 	 d^dH„Z0	 	 d]	 	 	 	 	 	 	 	 	 d_dI„Z1	 	 d]	 	 	 	 	 	 	 	 	 d`dJ„Z2	 	 d]	 	 	 	 	 	 	 	 	 dadK„Z3	 db	 	 	 	 	 	 	 dcdL„Z4ddMœ	 	 	 	 	 	 	 	 	 	 	 dddN„Z5edXdO„«       Z6ededP„«       Z7edfdQ„«       Z8dgˆ fdR„Z9e:dhdS„«       Z;edidT„«       Z<djdU„Z=ˆ xZ>S )kÚ
BaseOpenAIz'Base OpenAI large language model class.c                ó
   — ddiS )NÚopenai_api_keyÚOPENAI_API_KEYrA   ©Úselfs    r,   Ú
lc_secretszBaseOpenAI.lc_secretsš   s   € à Ð"2Ð3Ð3r.   c                ó
   — g d¢S ©z*Get the namespace of the langchain object.)Ú	langchainÚllmsrG   rA   ©Úclss    r,   Úget_lc_namespacezBaseOpenAI.get_lc_namespacež   ó
   € ò /Ð.r.   úDict[str, Any]c                ó¬   — i }| j                   r| j                   |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   |S )NÚopenai_api_baseÚopenai_organizationÚopenai_proxy)rv   rw   rx   )rj   Ú
attributess     r,   Úlc_attributeszBaseOpenAI.lc_attributes£   sZ   € à%'ˆ
Ø×ÒØ,0×,@Ñ,@ˆJÐ(Ñ)à×#Ò#Ø04×0HÑ0HˆJÐ,Ñ-à×ÒØ)-×):Ñ):ˆJ�~Ñ&àÐr.   Úboolc                 ó   — y)NTrA   rp   s    r,   Úis_lc_serializablezBaseOpenAI.is_lc_serializable±   s   € àr.   NT©ÚdefaultÚexcluder   rU   rb   ú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]rg   Úbase_urlrv   Úorganizationrw   rx   é   Ú
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                óÒ   •— |j                  dd«      }|j                  d«      s|j                  d«      r$d|vr t        j                  d«       t	        di |¤ŽS t
        ‰| �  | «      S )zInitialize the OpenAI object.r†   r1   úgpt-3.5-turboúgpt-4z	-instructú¥You 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__)rq   Údatar†   Ú	__class__s      €r,   r²   zBaseOpenAI.__new__ù   sg   ø€ à—X‘X˜l¨BÓ/ˆ
à×!Ñ! /Ô2°j×6KÑ6KÈGÔ6TØ Ñ+Ü�M‰MðKôô
 Ñ% Ñ%Ð%Ü‰w‰˜sÓ#Ð#r.   )Úpopulate_by_nameÚbefore©Úmodec                ó4   — t        | «      }t        ||«      }|S )ú>Build extra kwargs from additional params that were passed in.)r   r   )rq   ÚvaluesÚall_required_field_namess      r,   Úbuild_extrazBaseOpenAI.build_extra  s!   € ô $<¸CÓ#@Ð Ü$ VÐ-EÓFˆØˆr.   c           	     ó  — |d   dk  rt        d«      ‚|d   r|d   dkD  rt        d«      ‚|d   r|d   dkD  rt        d«      ‚t        |dd	«      |d<   |d
   xs t        j                  d«      |d
<   t        |ddd¬«      |d<   |d   xs, t        j                  d«      xs t        j                  d«      |d<   	 ddl}t        «       r…|d   |d   |d
   |d   |d   |d   |d   |d   dœ}|j                  d«      s |j                  di |¤Žj                  |d<   |j                  d«      s |j                  di |¤Žj                  |d<   |S |j                  d«      s|j                  |d<   |S 	 |S # t
        $ r t        d«      ‚w xY w)ú?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.rg   rh   rv   ÚOPENAI_API_BASErx   ÚOPENAI_PROXYr1   ©r   rw   ÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONr   NúTCould 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   rb   rA   )Ú
ValueErrorr   ÚosÚgetenvrG   ÚImportErrorr#   r:   ÚOpenAIÚcompletionsÚAsyncOpenAIÚ
Completion)rq   r»   rG   Úclient_paramss       r,   Úvalidate_environmentzBaseOpenAI.validate_environment  sû  € ð �#‰;˜Š?ÜÐ4Ó5Ð5Ø�+Ò 6¨#¡;°¢?ÜÐ@ÓAÐAØ�+Ò 6¨)Ñ#4°qÒ#8ÜÐFÓGÐGä#7ØÐ$Ð&6ó$
ˆÐÑ ð %+Ð+<Ñ$=ò %
ÄÇÁØóB
ˆÐ Ñ!ô "6ØØØØô	"
ˆˆ~Ñð Ð(Ñ)ò 0Ü�y‰y˜Ó)ò0ä�y‰yÐ.Ó/ð 	Ð$Ñ%ð
	Ûô Œ>à!Ð"2Ñ3Ø &Ð'<Ñ =Ø"Ð#4Ñ5Ø!Ð"3Ñ4Ø% mÑ4Ø#)Ð*;Ñ#<Ø!'¨Ñ!8Ø% mÑ4ñ	ˆMð —:‘:˜hÔ'Ø#0 6§=¡=Ñ#A°=Ñ#A×#MÑ#M��xÑ Ø—:‘:˜nÔ-Ø);¨×);Ñ);Ñ)L¸mÑ)L×)XÑ)X��~Ñ&ð ˆð —‘˜HÔ%Ø%×0Ñ0ˆF�8Ñð ˆð àˆøô5 ò 	Üð?óð ð	ús   Â<E4 Å4F	c                óh  — | j                   | j                  | j                  | j                  | j                  | j
                  dœ}| j                  �| j                  |d<   | j                  �t        «       s| j                  |d<   | j                  dkD  r| j                  |d<   i |¥| j                  ¥S )ú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”   )rj   Únormal_paramss     r,   Ú_default_paramszBaseOpenAI._default_paramsL  s¨   € ð  ×+Ñ+Ø—Z‘ZØ!%×!7Ñ!7Ø $× 5Ñ 5Ø—‘ØŸ/™/ñ)
ˆð �?‰?Ð&Ø*.¯/©/ˆM˜,Ñ'Ø×ÑÐ+´L´NØ/3×/CÑ/CˆMÐ+Ñ,ð �<‰<˜!ÒØ'+§|¡|ˆM˜)Ñ$à5�-Ð5 4×#4Ñ#4Ð5Ð5r.   c              +  ón  K  — i | j                   ¥|¥ddi¥}| j                  ||g|«       t        | f||dœ|¤ŽD ]w  }t        |t        «      s|j	                  «       }t        |«      }|rD|j                  |j                  || j                  |j                  r|j                  d   nd ¬«       |–— Œy y ­w©NÚstreamT©ÚpromptrF   r5   )ÚchunkÚverboser5   )
Ú_invocation_paramsÚget_sub_promptsr^   Ú
isinstancer9   r<   Úon_llm_new_tokenr3   rÝ   r8   ©rj   rÛ   ÚstoprF   rX   ÚparamsÚstream_resprÜ   s           r,   Ú_streamzBaseOpenAI._streamd  sË   è ø€ ð G�D×+Ñ+ÐF¨vÐF°xÀÑFˆØ×Ñ˜V f X¨tÔ4Ü0Øð
Ø¨[ñ
Ø<Bô
ˆKô ˜k¬4Ô0Ø)×.Ñ.Ó0�Ü8¸ÓEˆEÙØ×,Ñ,Ø—J‘JØØ ŸL™Là×,Ò,ð #×2Ñ2°:Ò>àð -ô ð ‹Kñ
ùs   ‚B3B5c               ó¨  K  — i | j                   ¥|¥ddi¥}| j                  ||g|«       t        | f||dœ|¤Žƒ d {  –—† 2 3 d {  –—† }t        |t        «      s|j	                  «       }t        |«      }|rL|j                  |j                  || j                  |j                  r|j                  d   nd ¬«      ƒ d {  –—†  |­–— Œˆ7 ŒŒ7 Œ…7 Œ6 y ­wrØ   )
rÞ   rß   rc   rà   r9   r<   rá   r3   rÝ   r8   râ   s           r,   Ú_astreamzBaseOpenAI._astream~  sö   è ø€ ð G�D×+Ñ+ÐF¨vÐF°xÀÑFˆØ×Ñ˜V f X¨tÔ4Ü'=Øð(
Ø¨[ñ(
Ø<Bñ(
÷ "
ð "
÷ 	�+ô ˜k¬4Ô0Ø)×.Ñ.Ó0�Ü8¸ÓEˆEÙØ!×2Ñ2Ø—J‘JØØ ŸL™Là×,Ò,ð #×2Ñ2°:Ò>àð 3ó ÷ ð ð ŒKð"
øð 	øðøñ"
ùsF   ‚;C½C
¾CÁCÁCÁCÁ
A5CÂ?CÃ CÃCÃCÃCc                óè  — | j                   }i |¥|¥}| j                  |||«      }g }i }h d£}	d}
|D �](  }| j                  r´t        |«      dkD  rt	        d«      ‚d} | j
                  |d   ||fi |¤ŽD ]  }|€|}Œ||z  }Œ |€J ‚|j                  |j                  |j                  r|j                  j                  d«      nd|j                  r|j                  j                  d«      nddœ«       ŒÄt        | f||d	œ|¤Ž}t        |t        «      s|j                  «       }|j                  |d
   «       t        |	||«       |
r�Œ|j                  d«      }
�Œ+ | j                  |||||
¬«      S )at  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©rj   Úpromptsrã   rF   rX   rä   Úsub_promptsr0   r)   Ú_keysrî   Ú_promptsÚ
generationrÜ   r(   s                  r,   Ú	_generatezBaseOpenAI._generate˜  s¯  € ð, ×(Ñ(ˆØ%�FÐ%˜fÐ%ˆØ×*Ñ*¨6°7¸DÓAˆØˆØ&(ˆò GˆØ,0ÐÜ#ˆHØ�~Š~Ü�x“= 1Ò$Ü$Ð%SÓTÐTà8<�
Ø)˜TŸ\™\¨(°1©+°t¸[ÑSÈFÔS�EØ!Ð)Ø%*™
à" eÑ+™
ð	 Tð
 "Ð-Ð-Ð-Ø—‘à *§¡à%×5Ò5ð *4×)CÑ)C×)GÑ)GÈÔ)Xà!à%×5Ò5ð %/×$>Ñ$>×$BÑ$BÀ:Ô$Nà!ñõ
ô 1ØðØ!)°{ñØFLñ�ô " (¬DÔ1ð  (Ÿ}™}›�Hà—‘˜x¨	Ñ2Ô3Ü" 5¨(°KÔ@Û)Ø)1¯©Ð6JÓ)KÒ&ðG $ðH ×%Ñ%ØØØØØ1ð &ó 
ð 	
r.   c              ‹  óè  K  — | j                   }i |¥|¥}| j                  |||«      }g }i }h d£}	d}
|D ]­  }| j                  rGt        |«      dkD  rt	        d«      ‚d} | j
                  |d   ||fi |¤Ž2 3 d{  –—† }|€|}Œ||z  }Œt        | f||d	œ|¤Žƒ d{  –—† }t        |t        «      s|j                  «       }|j                  |d
   «       t        |	||«       Œ¯ | j                  |||||
¬«      S 7 Œ6 |€J ‚|j                  |j                  |j                  r|j                  j                  d«      nd|j                  r|j                  j                  d«      nddœ«       �Œ<7 ŒÓ­w)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:   rc   rà   r9   rò   r-   ró   rô   s                  r,   Ú
_ageneratezBaseOpenAI._agenerateã  sº  è ø€ ð ×(Ñ(ˆØ%�FÐ%˜fÐ%ˆØ×*Ñ*¨6°7¸DÓAˆØˆØ&(ˆò GˆØ,0ÐÛ#ˆHØ�~Š~Ü�x“= 1Ò$Ü$Ð%SÓTÐTà8<�
Ø#0 4§=¡=Ø˜Q‘K  {ñ$Ø6<ò$÷ ,˜%ð "Ð)Ø%*™
à" eÑ+™
ô "8Øð"Ø!)°{ñ"ØFLñ"÷ �ô " (¬DÔ1Ø'Ÿ}™}›�HØ—‘˜x¨	Ñ2Ô3Ü" 5¨(°KÕ@ðA $ðB ×%Ñ%ØØØØØ1ð &ó 
ð 	
ð7,øð $ð "Ð-Ð-Ð-Ø—‘à *§¡à%×5Ò5ð *4×)CÑ)C×)GÑ)GÈÔ)Xà!à%×5Ò5ð %/×$>Ñ$>×$BÑ$BÀ:Ô$Nà!ñö
ðús8   ‚A4E2Á6C<Á:C:Á;C<Á>E2ÂE0ÂAE2Ã:C<Ã<A5E2c                ó&  — |�d|v rt        d«      ‚||d<   |d   dk(  r0t        |«      dk7  rt        d«      ‚| j                  |d   «      |d<   t        dt        |«      | j                  «      D �cg c]  }|||| j                  z    ‘Œ }}|S c c}w )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š   )rj   rä   rõ   rã   Úirö   s         r,   rß   zBaseOpenAI.get_sub_prompts  s»   € ð ÐØ˜ÑÜ Ð!UÓVÐVØ!ˆF�6‰NØ�,Ñ 2Ò%Ü�7‹|˜qÒ Ü ØMóð ð $(×#=Ñ#=¸gÀa¹jÓ#IˆF�<Ñ ô ˜1œc '›l¨D¯O©OÔ<ó
á<�ð �A˜˜DŸO™OÑ+Ò,Ø<ð 	ð 
ð Ðùò	
s   Á1Brï   c               ó|  — g }|j                  d| j                  «      }t        |«      D ]i  \  }}	|||z  |dz   |z   }
|j                  |
D �cg c];  }t	        |d   t        |j                  d«      |j                  d«      ¬«      ¬«      ‘Œ= c}«       Œk || j                  dœ}|r||d	<   t        ||¬
«      S c c}w )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   )rj   r0   rõ   rä   r)   rî   r  r�   r  Ú_Úsub_choicesÚchoicer  s                r,   ró   zBaseOpenAI.create_llm_result4  sÓ   € ð ˆØ�J‰J�s˜DŸF™FÓ#ˆÜ˜gÖ&‰DˆAˆqØ! ! a¡%¨1¨q©5°A©+Ð6ˆKØ×Ññ #.ó	ñ #.˜ô Ø# F™^Ü(,Ø*0¯*©*°_Ó*EØ%+§Z¡Z°
Ó%;ô)öð #.ñ	õð 'ð &1ÀÇÁÑPˆ
ÙØ/AˆJÐ+Ñ,Ü [¸ZÔHÐHùò	s   ÁA B9
c                óü   — i }t        «       s3|j                  | j                  | j                  | j                  dœ«       | j
                  r"ddl}| j
                  | j
                  dœ|_        i |¥| j                  ¥S )z,Get the parameters used to invoke the model.)r•   Úapi_baser˜   r   N©ÚhttpÚhttps)	r#   Úupdaterg   rv   rw   rx   rG   ÚproxyrÖ   )rj   Úopenai_credsrG   s      r,   rÞ   zBaseOpenAI._invocation_paramsS  sx   € ð (*ˆÜŒ~Ø×Ñà#×2Ñ2Ø $× 4Ñ 4Ø$(×$<Ñ$<ñôð ×ÒÛà$(×$5Ñ$5À×@QÑ@QÑRˆFŒLØ7�,Ð7 $×"6Ñ"6Ð7Ð7r.   c                ó:   — i d| j                   i¥| j                  ¥S ©zGet the identifying parameters.r†   ©r†   rÖ   ri   s    r,   Ú_identifying_paramszBaseOpenAI._identifying_paramse  ó$   € ð K�< §¡Ð1ÐJ°T×5IÑ5IÐJÐJr.   c                 ó   — y)úReturn type of llm.rG   rA   ri   s    r,   Ú	_llm_typezBaseOpenAI._llm_typej  s   € ð r.   c                óž  •— t         j                  d   dk  rt        ‰| �  |«      S 	 ddl}| j                  xs | j                  }	 |j                  |«      }|j                  || j                  | j                  ¬«      S # t
        $ r t        d«      ‚w xY w# t        $ r+ t        j                  d«       d}|j                  |«      }Y Œsw xY w)	ú-Get the token IDs using the tiktoken package.rŒ   é   r   Nú�Could 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¤   )rj   r3   r%  r†   Úencr‚   r´   s         €r,   Úget_token_idszBaseOpenAI.get_token_idso  sÞ   ø€ ô ×Ñ˜AÑ Ò"Ü‘7Ñ)¨$Ó/Ð/ð	Ûð ×-Ñ-Ò@°·±ˆ
ð	/Ø×-Ñ-¨jÓ9ˆCð �z‰zØØ ×0Ñ0Ø#×6Ñ6ð ó 
ð 	
øô ò 	ÜðAóð ð	ûô ò 	/Ü�N‰NÐRÔSØ!ˆEØ×'Ñ'¨Ó.ŠCð	/ús   ¨B  ÁB Â BÂ1CÃCc                ó@  — i dd“dd“dd“dd“dd“dd	“d
d	“dd	“dd“dd“dd“dd“dd“dd“dd“dd“dd“dddddddddddœ
¥}d| v r| j                  d«      d   } |j                  | d «      }|€/t        d!| › d"�d#j                  |j	                  «       «      z   «      ‚|S )$ao  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_contextsizez#BaseOpenAI.modelname_to_contextsize‹  sn  € ð
Ø�gð
à ð
ð �Tð
ð ˜$ð	
ð
 ˜$ð
ð ˜ð
ð ˜eð
ð ˜eð
ð ˜Tð
ð ! $ð
ð ! $ð
ð   ð
ð % eð
ð % dð
ð ˜Dð
ð  �4ð!
ð"  ð#
ð$ Ø"ØØØ $Ø $Ø $Ø $Ø $Ø $ò7
Ðð> �IÑØ!Ÿ™¨Ó,¨QÑ/ˆIà*×.Ñ.¨y¸$Ó?ˆàÐÜØ! ) ð -%ð %Ø'+§y¡yÐ1D×1IÑ1IÓ1KÓ'LñMóð ð
 Ðr.   c                ó8   — | j                  | j                  «      S )z$Get max context size for this model.)r9  r†   ri   s    r,   Úmax_context_sizezBaseOpenAI.max_context_sizeÆ  s   € ð ×,Ñ,¨T¯_©_Ó=Ð=r.   c                óB   — | j                  |«      }| j                  |z
  S )ap  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.")
        )r$  r;  )rj   rÛ   Ú
num_tokenss      r,   r   z BaseOpenAI.max_tokens_for_promptË  s%   € ð ×(Ñ(¨Ó0ˆ
Ø×$Ñ$ zÑ1Ð1r.   )r[   zDict[str, str]©r[   ú	List[str]©r[   rt   )r[   r{   )r³   r   r[   zUnion[OpenAIChat, BaseOpenAI]©r»   rt   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ã   rE  rF   ú'Optional[AsyncCallbackManagerForLLMRun]rX   r   r[   zAsyncIterator[GenerationChunk]©
rõ   r?  rã   rE  rF   rF  rX   r   r[   r   ©
rõ   r?  rã   rE  rF   rH  rX   r   r[   r   ©N)rä   rt   rõ   r?  rã   rE  r[   zList[List[str]])r0   r   rõ   r?  rä   rt   r)   zDict[str, int]rî   r–   r[   r   ©r[   zMapping[str, Any]©r[   r…   ©r3   r…   r[   z	List[int])r6  r…   r[   rŠ   )r[   rŠ   )rÛ   r…   r[   rŠ   )?Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyrk   Úclassmethodrr   rz   r}   r!   rU   Ú__annotations__rb   r†   rˆ   r‹   r�   rŽ   r�   r�   r‘   r9   r”   rg   rv   rw   rx   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  r-  Ústaticmethodr9  r;  r   Ú__classcell__©r´   s   @r,   re   re   —   s?  ø… Ù1àò4ó ð4ð ò/ó ð/ð òó ðð òó ðñ  ¨dÔ3€FˆCÓ3Ù d°DÔ9€L�#Ó9ÙÐ$<ÀGÔL€J�ÓLØØ€K�ÓØ+Ø€J�Óð(ð €Eˆ5ÓØDØ Ð�uÓ Ø;ØÐ�eÓØ$Ø€A€sƒJØ;Ø€GˆSÓØKÙ#(¸Ô#>€L�.Ó>ØVñ %*°$¸iÔ$H€N�MÓHØOÙ%*°4¸zÔ%J€O�]ÓJðá).°tÀ>Ô)RÐ˜ÓRØNà"&€L�-Ó&Ø€J�ÓØHÙDIØ˜IôE€OÐAó ðá-2À4Ô-H€JÐ*ÓHØDØ€K�ÓØ<Ø€IˆtÓØ/Ù?B»u€OÐ<ÓDØ3ØAFÐÐ>ÓFØ7Ø)-Ð˜Ó-ðJð 7;€OÐ3Ó:Ø7;€MÐ4Ó;ð %)€KÐ!Ó(Ø õ$ñ Øô€Lñ ˜(Ô#Øòó ó $ðð ò6ó ð6ðp ò6ó ð6ð4 %)Ø:>ð	àðð "ðð 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 ò>ó ð>÷2r.   re   z0.0.10z1.0zlangchain_openai.OpenAI)ÚsinceÚremovalÚalternative_importc                  ó@   ‡ — e Zd ZdZedd„«       Zedˆ fd„«       Zˆ xZS )rÍ   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                ó
   — g d¢S rm   rA   rp   s    r,   rr   zOpenAI.get_lc_namespaceî  rs   r.   c                ó8   •— i d| j                   i¥t        ‰| �  ¥S )Nr‚   )r†   r±   rÞ   ©rj   r´   s    €r,   rÞ   zOpenAI._invocation_paramsó  s!   ø€ àK�7˜DŸO™OÐ,ÐK´±Ñ0JÐKÐKr.   r>  r@  )	rO  rP  rQ  rR  rT  rr   rS  rÞ   rY  rZ  s   @r,   rÍ   rÍ   Ý  s2   ø„ ñð ò/ó ð/ð ôLó ôLr.   rÍ   zlangchain_openai.AzureOpenAIc                  óN  ‡ — e Zd ZU dZd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<   	 dZded<   	 dZded<   	 dZd
ed<   	 dZded<   	 edd„«       Zedd„«       Zedˆ fd„«       Zed ˆ fd„«       Zed!d„«       Zed d„«       Zˆ xZS )"ÚAzureOpenAIa   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•   rg   Ú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                ó
   — g d¢S rm   rA   rp   s    r,   rr   zAzureOpenAI.get_lc_namespace7  rs   r.   c                ót  — |d   dk  rt        d«      ‚|d   r|d   dkD  rt        d«      ‚|d   r|d   dkD  rt        d«      ‚|d   xs, t        j                  d	«      xs t        j                  d
«      |d<   |d   xs t        j                  d«      |d<   |d   xs t        j                  d«      |d<   |d   xs t        j                  d«      |d<   t        |ddd¬«      |d<   |d   xs, t        j                  d«      xs t        j                  d«      |d<   |d   xs t        j                  d«      |d<   t        |ddd¬«      |d<   	 ddl}t        «       �r1|d   }|r�|d    r˜d!|vr9|d   j                  d"«      d!z   |d<   t        j                  d#|› d$|d   › d%�«       |d&   rVt        j                  d'«       |d&   |d   vr2t        j                  d(|› d$|d   › d%�«       |dxx   d)|d&   z   z  cc<   d|d&<   |d   |d   |d&   |d   |d   |d*   |d   |d   |d+   |d,   i |d-   xs i ¥d.d/i¥|d0   |d1   d2œ} |j                  d6i |¤Žj                  |d3<   |d4   }|r||d*<    |j                  d6i |¤Žj                  |d5<   |S |j                  |d3<   |S # t
        $ r t        d«      ‚w xY w)7r¿   r�   rŒ   rÀ   rŸ   rÁ   r‘   rÂ   rg   ÚAZURE_OPENAI_API_KEYrh   rd  ÚAZURE_OPENAI_ENDPOINTri  ÚAZURE_OPENAI_AD_TOKENrv   rÃ   rx   rÄ   r1   rÅ   rw   rÆ   rÇ   rh  ÚOPENAI_API_VERSIONrl  ÚOPENAI_API_TYPEÚazurer   NrÈ   rm  z/openaiÚ/z¥As 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 Ú.rf  zâAs 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`.zÈAs 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/rj  rœ   rE   r¦   z
User-Agentz"langchain-comm-python-azure-openair§   r¨   )rg  rd  re  r•   ri  rj  r˜   r—   r›   rE   r¦   r§   r¨   rU   rk  rb   rA   )rÉ   rÊ   rË   r   rG   rÌ   r#   Úrstripr®   r¯   rc  rÎ   ÚAsyncAzureOpenAIrÐ   )rq   r»   rG   rv   rÑ   rk  s         r,   rÒ   z AzureOpenAI.validate_environment<  sî  € ð �#‰;˜Š?ÜÐ4Ó5Ð5Ø�+Ò 6¨#¡;°¢?ÜÐ@ÓAÐAØ�+Ò 6¨)Ñ#4°qÒ#8ÜÐFÓGÐGð Ð#Ñ$ò +Ü�y‰yÐ/Ó0ò+ä�y‰yÐ)Ó*ð 	ÐÑ ð $*Ð*:Ñ#;ò $
¼r¿y¹yØ#ó@
ˆÐÑ ð $*Ð*:Ñ#;ò $
¼r¿y¹yØ#ó@
ˆÐÑ ð %+Ð+<Ñ$=ò %
ÄÇÁØóB
ˆÐ Ñ!ô "6ØØØØô	"
ˆˆ~Ñð Ð(Ñ)ò 0Ü�y‰y˜Ó)ò0ä�y‰yÐ.Ó/ð 	Ð$Ñ%ð
 (.Ð.BÑ'Cò (
ÄrÇyÁyØ óH
ˆÐ#Ñ$ô %9ØÐ%Ð'8À'ô%
ˆÐ Ñ!ð	Ûô �>ð %Ð%6Ñ7ˆOÙ 6Ð*=Ò#>Ø OÑ3àÐ0Ñ1×8Ñ8¸Ó=À	ÑIð Ð,Ñ-ô —M‘MðRð +Ð+¨4°Ð7HÑ0IÐ/JÈ!ðMôð Ð+Ò,Ü—M‘Mð0ôð Ð/Ñ0¸Ð?PÑ8QÑQÜ Ÿ™ð(ð )8Ð'8¸Ø%Ð&7Ñ8Ð9¸ð<ôð Ð0Ó1Ø+¨fÐ5FÑ.GÑGñÓ1ð 15�FÐ,Ñ-à%Ð&:Ñ;Ø"(Ð)9Ñ":Ø$*Ð+<Ñ$=Ø!Ð"2Ñ3Ø"(Ð)9Ñ":Ø+1Ð2KÑ+LØ &Ð'<Ñ =Ø"Ð#4Ñ5Ø!Ð"3Ñ4Ø% mÑ4ð$ØÐ/Ñ0Ò6°Bð$à Ð"Fñ$ð "(¨Ñ!8Ø% mÑ4ñ!ˆMð$  2˜v×1Ñ1ÑB°MÑB×NÑNˆF�8Ñà,2Ð3RÑ,SÐ)á,Ø;X�Ð7Ñ8à%< V×%<Ñ%<ñ &Øñ&ç‰kð �>Ñ"ð ˆð  &×0Ñ0ˆF�8ÑàˆøôS ò 	Üð?óð ð	ús   ÅJ" Ê"J7c                ó8   •— i d| j                   i¥t        ‰| �  ¥S )Nrf  )rf  r±   r  ra  s    €r,   r  zAzureOpenAI._identifying_params¶  s-   ø€ ð
Ø  $×"6Ñ"6Ð7ð
ä‰gÑ)ð
ð 	
r.   c                óš   •— t        «       rd| j                  i}n$| j                  | j                  | j                  dœ}i |¥t        ‰| �  ¥S )Nr‚   )ÚengineÚapi_typerg  )r#   rf  rl  rh  r±   rÞ   )rj   Úopenai_paramsr´   s     €r,   rÞ   zAzureOpenAI._invocation_params½  sS   ø€ äŒ>Ø$ d×&:Ñ&:Ð;‰Mð ×.Ñ.Ø ×0Ñ0Ø#×6Ñ6ñˆMð
 ?�-Ð>¤5¡7Ñ#=Ð>Ð>r.   c                 ó   — y)r  ru  rA   ri   s    r,   r  zAzureOpenAI._llm_typeÉ  s   € ð r.   c                ó4   — | j                   | j                  dœS )N©rl  rh  r�  ri   s    r,   rz   zAzureOpenAI.lc_attributesÎ  s    € ð  $×3Ñ3Ø"&×"9Ñ"9ñ
ð 	
r.   r>  rB  rL  r@  rM  )rO  rP  rQ  rR  rd  rU  r!   rf  rh  rg   ri  rj  rk  rl  rm  rT  rr   r   rÒ   rS  r  rÞ   r  rz   rY  rZ  s   @r,   rc  rc  ø  s3  ø… ñð  (,€NÐ$Ó+ðñ ).°dÐBTÔ(U€OÐ%ÓUðñ
 $¨B°mÔDÐ˜ÓDØSÙ',°TÀÔ'K€NÐ$ÓKØUØ'+€NÐ$Ó+ðð ?CÐÐ;ÓBðð
 PTÐ!Ð#LÓSðð €O�SÓØ+Ø"Ð�tÓ"ðð ò/ó ð/ð òwó ðwðr ô
ó ð
ð ô	?ó ð	?ð òó ðð ò
ó ô
r.   rc  z0.0.1zlangchain_openai.ChatOpenAIc                  óN  ‡ — e Zd ZU dZ 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<   	 dZded<   dZded<   	  ee¬«      Zded<   	 dZded<   	  e«       Zded<   	 dZd ed!<   	  ed"¬#«      ed/d$„«       «       Zed0d%„«       Zed1d&„«       Z	 d2	 	 	 	 	 d3d'„Z	 	 d4	 	 	 	 	 	 	 	 	 d5d(„Z	 	 d4	 	 	 	 	 	 	 	 	 d6d)„Z	 	 d4	 	 	 	 	 	 	 	 	 d7d*„Z	 	 d4	 	 	 	 	 	 	 	 	 d8d+„Z ed9d,„«       Z!ed:d-„«       Z"d;ˆ fd.„Z#ˆ xZ$S )<r°   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   rb   rª   r…   r†   r’   rt   r”   r•   rƒ   r–   rg   r—   rv   rx   é   rŠ   rE   r   Úprefix_messagesFr{   rŸ   r    r¡   r¢   r£   r¤   r¶   r·   c                ó  — t        | «      j                  «       D �ch c]  }|j                  ’Œ }}|j                  di «      }t	        |«      D ].  }||vsŒ||v rt        d|› d�«      ‚|j                  |«      ||<   Œ0 ||d<   |S c c}w )rº   r”   zFound z supplied twice.)r   r»   r„   r:   ÚlistrÉ   Úpop)rq   r»   Úfieldr¼   ÚextraÚ
field_names         r,   r½   zOpenAIChat.build_extra  s›   € ô >HÈ»_×=SÑ=SÔ=UÓ#VÑ=U°E E§K£KÐ=UÐ Ð#Và—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØÐ!9Ò9Ø Ñ&Ü$ v¨j¨\Ð9IÐ%JÓKÐKØ$*§J¡J¨zÓ$:��jÒ!ð	 'ð
 "'ˆˆ~ÑØˆùò $Ws   œBc                óx  — t        |dd«      }t        |ddd¬«      }t        |ddd¬«      }t        |d	d
d¬«      }	 ddl}||_        |r||_        |r||_        |r
||dœ|_        	 |j                  |d<   t        j                  d«       |S # t        $ r t        d«      ‚w xY w# t        $ r t        d«      ‚w xY w)r¿   rg   rh   rv   rÃ   r1   rÅ   rx   rÄ   rw   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¯   )rq   r»   rg   rv   rx   rw   rG   s          r,   rÒ   zOpenAIChat.validate_environment  s  € ô .ØÐ$Ð&6ó
ˆô /ØØØØô	
ˆô ,ØØØØô	
ˆô 3ØÐ)Ð+@È"ô
Ðð	Ûà+ˆFŒNÙØ"1�”Ù"Ø&9�Ô#ÙØ(4¸|ÑL�”ð	Ø%×4Ñ4ˆF�8Ñô 	�‰ðGô	
ð
 ˆøô% ò 	Üð?óð ð	ûô ò 	Üð7óð ð	ús   ¼)B Á&B$ ÂB!Â$B9c                ó   — | j                   S )rÔ   )r”   ri   s    r,   rÖ   zOpenAIChat._default_paramsH  s   € ð × Ñ Ð r.   c                ó   — t        |«      dkD  rt        d|› �«      ‚| j                  d|d   dœgz   }i d| j                  i¥| j                  ¥}|�d|v rt        d«      ‚||d<   |j                  d	«      d
k(  r|d	= ||fS )NrŒ   z6OpenAIChat currently only supports single prompt, got Úuserr   )ÚroleÚcontentr‚   rã   rþ   r‹   rÿ   )rð   rÉ   r„  r†   rÖ   r:   )rj   rõ   rã   Úmessagesrä   s        r,   Ú_get_chat_paramszOpenAIChat._get_chat_paramsM  sª   € ô ˆw‹<˜!ÒÜØHÈÈ	ÐRóð ð ×'Ñ'°FÀwÈqÁzÑ+RÐ*SÑSˆØ!W W¨d¯o©oÐ$>Ð!WÀ$×BVÑBVÐ!WˆØÐØ˜ÑÜ Ð!UÓVÐVØ!ˆF�6‰NØ�:‰:�lÓ# rÒ)à�|Ð$Ø˜ÐÐr.   c              +  ó4  K  — | j                  |g|«      \  }}i |¥|¥ddi¥}t        | f||dœ|¤ŽD ]b  }t        |t        «      s|j                  «       }|d   d   d   j	                  dd«      }t        |¬	«      }	|r|j                  ||	¬
«       |	–— Œd y ­w©NrÙ   T©r“  rF   r0   r   Údeltar’  r1   r2   )rÜ   )r”  r^   rà   r9   r:   r   rá   ©
rj   rÛ   rã   rF   rX   r“  rä   rå   ÚtokenrÜ   s
             r,   ræ   zOpenAIChat._stream_  s»   è ø€ ð  ×0Ñ0°&°¸4Ó@Ñˆ�&Ø5�FÐ5˜fÐ5 h°Ñ5ˆÜ0Øð
Ø#°ñ
Ø@Fô
ˆKô ˜k¬4Ô0Ø)×.Ñ.Ó0�Ø 	Ñ*¨1Ñ-¨gÑ6×:Ñ:¸9ÀbÓIˆEÜ#¨Ô/ˆEÙØ×,Ñ,¨U¸%Ð,Ô@Ø‹Kñ
ùs   ‚BBc               ón  K  — | j                  |g|«      \  }}i |¥|¥ddi¥}t        | f||dœ|¤Žƒ d {  –—† 2 3 d {  –—† }t        |t        «      s|j                  «       }|d   d   d   j	                  dd«      }t        |¬	«      }	|r|j                  ||	¬
«      ƒ d {  –—†  |	­–— Œs7 Œw7 Œp7 Œ6 y ­wr–  )r”  rc   rà   r9   r:   r   rá   r™  s
             r,   rè   zOpenAIChat._astreams  sã   è ø€ ð  ×0Ñ0°&°¸4Ó@Ñˆ�&Ø5�FÐ5˜fÐ5 h°Ñ5ˆÜ'=Øð(
Ø#°ñ(
Ø@Fñ(
÷ "
ð "
÷ 		�+ô ˜k¬4Ô0Ø)×.Ñ.Ó0�Ø 	Ñ*¨1Ñ-¨gÑ6×:Ñ:¸9ÀbÓIˆEÜ#¨Ô/ˆEÙØ!×2Ñ2°5ÀÐ2ÓF×FÐFØŒKð"
øð 		øð Gøñ"
ùsC   ‚3B5µB-¶B5ºB3¾B/¿B3ÁA B5Â"B1Â#B5Â/B3Â1B5Â3B5c                ó’  — | j                   r;d } | j                  |d   ||fi |¤ŽD ]  }|€|}Œ||z  }Œ |€J ‚t        |gg¬«      S | j                  ||«      \  }}i |¥|¥}t	        | f||dœ|¤Ž}	t        |	t        «      s|	j                  «       }	|	d   | j                  dœ}
t        t        |	d   d   d   d   ¬	«      gg|
¬
«      S ©Nr   )r  r—  r%   r  r0   Úmessager’  r2   r  )	rŸ   ræ   r   r”  r^   rà   r9   r†   r   ©rj   rõ   rã   rF   rX   rù   rÜ   r“  rä   Úfull_responser  s              r,   rú   zOpenAIChat._generate‡  s  € ð �>Š>Ø48ˆJØ%˜Ÿ™ g¨a¡j°$¸ÑNÀvÔN�ØÐ%Ø!&‘Jà %Ñ'‘Jð	 Oð
 Ð)Ð)Ð)Ü¨:¨,¨Ô8Ð8à×0Ñ0°¸$Ó?Ñˆ�&Ø%�FÐ%˜fÐ%ˆÜ-Øð
Ø#°ñ
Ø@Fñ
ˆô ˜-¬Ô.Ø)×.Ñ.Ó0ˆMà(¨Ñ1ØŸ/™/ñ
ˆ
ô ä ¨yÑ!9¸!Ñ!<¸YÑ!GÈ	Ñ!RÔSÐTðð "ô	
ð 	
r.   c              ‹  ó¾  K  — | j                   r.d } | j                  |d   ||fi |¤Ž2 3 d {  –—† }|€|}Œ||z  }Œ| j                  ||«      \  }}i |¥|¥}t	        | f||dœ|¤Žƒ d {  –—† }	t        |	t        «      s|	j                  «       }	|	d   | j                  dœ}
t        t        |	d   d   d   d   ¬	«      gg|
¬
«      S 7 Œ˜6 |€J ‚t        |gg¬«      S 7 Œp­wr�  )	rŸ   rè   r   r”  rc   rà   r9   r†   r   rŸ  s              r,   rü   zOpenAIChat._agenerateª  s*  è ø€ ð �>Š>Ø48ˆJØ,˜tŸ}™}¨W°Q©Z¸¸{ÑUÈfÒU÷ (�eØÐ%Ø!&‘Jà %Ñ'‘Jð  ×0Ñ0°¸$Ó?Ñˆ�&Ø%�FÐ%˜fÐ%ˆÜ4Øð
Ø#°ñ
Ø@Fñ
÷ 
ˆô ˜-¬Ô.Ø)×.Ñ.Ó0ˆMà(¨Ñ1ØŸ/™/ñ
ˆ
ô ä ¨yÑ!9¸!Ñ!<¸YÑ!GÈ	Ñ!RÔSÐTðð "ô	
ð 	
ð'(øÐUð
 Ð)Ð)Ð)Ü¨:¨,¨Ô8Ð8ð
ús2   ‚'C©C­C®C±9CÁ*CÁ+ACÃCÃCc                ó:   — i d| j                   i¥| j                  ¥S r  r  ri   s    r,   r  zOpenAIChat._identifying_paramsÍ  r  r.   c                 ó   — y)r  zopenai-chatrA   ri   s    r,   r  zOpenAIChat._llm_typeÒ  s   € ð r.   c                ó  •— t         j                  d   dk  rt        ‰| �  |«      S 	 ddl}|j                  | j                  «      }|j                  || j                  | j                  ¬«      S # t
        $ r t        d«      ‚w xY w)r  rŒ   r  r   Nr  r!  )r"  r#  r±   r-  r%  rÌ   r&  r†   r+  r¡   r¤   )rj   r3   r%  r,  r´   s       €r,   r-  zOpenAIChat.get_token_ids×  s•   ø€ ô ×Ñ˜AÑ Ò"Ü‘7Ñ(¨Ó.Ð.ð	Ûð ×)Ñ)¨$¯/©/Ó:ˆØ�z‰zØØ ×0Ñ0Ø#×6Ñ6ð ó 
ð 	
øô ò 	ÜðAóð ð	ús   ¨A/ Á/BrA  rB  r@  rK  )rõ   r?  rã   rE  r[   r   rC  rD  rG  rI  rJ  rL  rM  rN  )%rO  rP  rQ  rR  r!   rU   rU  rb   r†   r9   r”   rg   rv   rx   rE   r†  r„  rŸ   rV  r¡   r¤   r"   rT  r½   r   rÒ   rS  rÖ   r”  ræ   rè   rú   rü   r  r  r-  rY  rZ  s   @r,   r°   r°   Ö  sc  ø… ññ  ¨dÔ3€FˆCÓ3Ù d°DÔ9€L�#Ó9Ø%€J�Ó%ØÙ#(¸Ô#>€L�.Ó>ØVñ %*°$¸iÔ$H€N�MÓHØOÙ%*°4¸zÔ%J€O�]ÓJðð #'€L�-Ó&Ø€K�ÓØ<Ù!°$Ô7€O�TÓ7Ø,Ø€IˆtÓØ/Ù?B»u€OÐ<ÓDØ3ØAFÐÐ>ÓFØ7á˜(Ô#Øòó ó $ðð ò0ó ð0ðd ò!ó ð!ð
 ?Cð Ø ð Ø(;ð à	ó ð* %)Ø:>ð	àðð "ðð 8ð	ð
 ðð 
#óð. %)Ø?Cð	àðð "ðð =ð	ð
 ðð 
(óð. %)Ø:>ð	!
àð!
ð "ð!
ð 8ð	!
ð
 ð!
ð 
ó!
ðL %)Ø?Cð	!
àð!
ð "ð!
ð =ð	!
ð
 ð!
ð 
ó!
ðF òKó ðKð òó ð÷
ñ 
r.   r°   )r'   zSet[str]r(   rt   r)   rt   r[   ÚNone)r;   rt   r[   r   )r(   rt   r;   rt   r[   r¥  r@  rK  )rN   úUnion[BaseOpenAI, OpenAIChat]rF   zHOptional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]]r[   zCallable[[Any], Any])rN   r¦  rF   rF  rX   r   r[   r   )rN   r¦  rF   rH  rX   r   r[   r   )>Ú
__future__r   ÚloggingrÊ   r"  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#   Ú	getLoggerrO  r(  r-   r<   r>   rB   rP   r^   rc   re   rÍ   rc  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	2ñL �( EÐ>WÔXôLˆZó Ló YðLñ4 Ø
˜EÐ6TôôX
�*ó X
óðX
ñv Ø
ØØ4ôô
O
�ó O
óñ
O
r.   