§
    šŠtj_¼  ã                  óN  — 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j0        e1¦  «        Z2d5d„Z3d6d„Z4d7d„Z5d8d„Z6	 d9d:d„Z7	 d9d;d#„Z8	 d9d<d%„Z9 G d&„ d'e¦  «        Z: ed(d)d*¬+¦  «         G d,„ d-e:¦  «        ¦   «         Z; ed(d)d.¬+¦  «         G d/„ d0e:¦  «        ¦   «         Z< ed1d)d2¬+¦  «         G d3„ d4e¦  «        ¦   «         Z=dS )=é    )Ú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_v1ÚkeysúSet[str]ÚresponseúDict[str, Any]Útoken_usageÚreturnÚNonec                óª   — |                       |d         ¦  «        }|D ]4}||vr|d         |         ||<   Œ||xx         |d         |         z  cc<   Œ5dS )zUpdate token usage.ÚusageN)Úintersection)r$   r&   r(   Ú_keys_to_useÚ_keys        ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/openai.pyÚupdate_token_usager1   .   s€   € ð ×$Ò$ X¨gÔ%6Ñ7Ô7€LØð 9ð 9ˆØ�{Ð"Ð"Ø (¨Ô 1°$Ô 7ˆK˜ÑÐà˜ÐÐÔ ¨'Ô!2°4Ô!8Ñ8ÐÐÑÐð	9ð 9ó    Ústream_responser   c           
     ó  — | d         st          d¬¦  «        S t          | d         d         d         t          | d         d                              dd¦  «        | d         d                              dd¦  «        ¬	¦  «        ¬
¦  «        S )z0Convert a stream response to a generation chunk.ÚchoicesÚ ©Útextr   r8   Úfinish_reasonNÚlogprobs©r9   r:   ©r8   Úgeneration_info)r   ÚdictÚget)r3   s    r0   Ú$_stream_response_to_generation_chunkr@   :   s—   € ð ˜9Ô%ð (Ý BÐ'Ñ'Ô'Ð'ÝØ˜YÔ'¨Ô*¨6Ô2ÝØ)¨)Ô4°QÔ7×;Ò;¸OÈTÑRÔRØ$ YÔ/°Ô2×6Ò6°zÀ4ÑHÔHð
ñ 
ô 
ðñ ô ð r2   c                ó
  — | d         d         dxx         |d         d         d         z  cc<   |d         d                               dd¦  «        | d         d         d<   |d         d         d         | d         d         d<   dS )z)Update response from the stream response.r5   r   r8   r9   Nr:   )r?   )r&   r3   s     r0   Ú_update_responserB   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Ô˜Ô˜:Ñ&Ð&Ð&r2   c                 ó   — ddd d dœgiS )Nr5   r6   ©r8   r9   r:   © rE   r2   r0   Ú_streaming_response_templaterF   R   s'   € ààØ!%Ø ðð ð
ðð r2   ÚllmúUnion[BaseOpenAI, OpenAIChat]Úrun_managerúHOptional[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_retriesrI   )	ÚopenaiÚerrorÚTimeoutÚAPIErrorÚAPIConnectionErrorÚRateLimitErrorÚServiceUnavailableErrorr   rN   )rG   rI   rO   Úerrorss       r0   Ú_create_retry_decoratorrW   ^   s`   € ð €M€M€Mð 	ŒÔØŒÔØŒÔ'ØŒÔ#ØŒÔ,ð€Fõ 'Ø¨¬À[ðñ ô ð r2   ú"Optional[CallbackManagerForLLMRun]Úkwargsr   c                ó’   ‡ — t          ¦   «         r ‰ j        j        di |¤ŽS t          ‰ |¬¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )z*Use tenacity to retry the completion call.©rI   rY   r   r)   c                 ó(   •—  ‰j         j        di | ¤ŽS ©NrE   )ÚclientÚcreate©rY   rG   s    €r0   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retry}   s   ø€ à ˆsŒzÔ Ð*Ð* 6Ð*Ð*Ð*r2   rE   ©rY   r   r)   r   )r#   r^   r_   rW   ©rG   rI   rY   Úretry_decoratorra   s   `    r0   Úcompletion_with_retryre   r   s   ø€ õ �~„~ð +Ø ˆsŒzÔ Ð*Ð* 6Ð*Ð*Ð*å-¨c¸{ÐKÑKÔK€Oàð+ð +ð +ð +ð +ñ „_ð+ð "Ð!Ð+Ð+ FÐ+Ð+Ð+r2   ú'Optional[AsyncCallbackManagerForLLMRun]c              ‹  ó®   ‡ 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.Nr[   rY   r   r)   c               ›  ó8   •K  —  ‰j         j        di | ¤Žƒ d {V —†S r]   )r^   Úacreater`   s    €r0   ra   z6acompletion_with_retry.<locals>._completion_with_retry�   s6   øè è € ð (�S”ZÔ'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r2   rE   rb   )r#   Úasync_clientr_   rW   rc   s   `    r0   Úacompletion_with_retryrk   „   s¨   øè è € õ �~„~ð 7Ø,�SÔ%Ô,Ð6Ð6¨vÐ6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6å-¨c¸{ÐKÑKÔK€Oàð2ð 2ð 2ð 2ð 2ñ „_ð2ð (Ð'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r2   c                  óP  ‡ — e Zd ZU dZedrd„¦   «         Zedsd„¦   «         Zedtd„¦   «         Zedud
„¦   «         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d0ed1<   	  e
e¬#¦  «        Zd2ed3<   	 d4Zded5<   	 d6Z d	ed7<   	  e!¦   «         Z"d8ed9<   	 d:Z#d;ed<<   	 dZ$d&ed=<   	 dZ%d>ed?<   dZ&d@edA<   dZ'dBedC<   	 dvˆ fdF„Z( e)d¬G¦  «        Z* e+dH¬I¦  «        edwdK„¦   «         ¦   «         Z,e-dxdM„¦   «         Z.edtdN„¦   «         Z/	 	 dydzdV„Z0	 	 dyd{dY„Z1	 	 dyd|d\„Z2	 	 dyd}d]„Z3	 d~dd`„Z4ddaœd€df„Z5edtdg„¦   «         Z6ed�di„¦   «         Z7ed‚dj„¦   «         Z8dƒˆ fdm„Z9e:d„do„¦   «         Z;ed…dp„¦   «         Z<d†dq„Z=ˆ xZ>S )‡Ú
BaseOpenAIz'Base OpenAI large language model class.r)   úDict[str, str]c                ó
   — ddiS )NÚopenai_api_keyÚOPENAI_API_KEYrE   ©Úselfs    r0   Ú
lc_secretszBaseOpenAI.lc_secretsš   s   € à Ð"2Ð3Ð3r2   ú	List[str]c                ó
   — g d¢S ©z*Get the namespace of the langchain object.)Ú	langchainÚllmsrO   rE   ©Úclss    r0   Úget_lc_namespacezBaseOpenAI.get_lc_namespacež   ó   € ð /Ð.Ð.Ð.r2   r'   c                óp   — i }| j         r
| j         |d<   | j        r
| j        |d<   | j        r
| j        |d<   |S )NÚopenai_api_baseÚopenai_organizationÚopenai_proxy)r   r€   r�   )rs   Ú
attributess     r0   Úlc_attributeszBaseOpenAI.lc_attributes£   sY   € à%'ˆ
ØÔð 	AØ,0Ô,@ˆJÐ(Ñ)àÔ#ð 	IØ04Ô0HˆJÐ,Ñ-àÔð 	;Ø)-Ô):ˆJ�~Ñ&àÐr2   Úboolc                ó   — dS )NTrE   rz   s    r0   Úis_lc_serializablezBaseOpenAI.is_lc_serializable±   s   € àˆtr2   NT©ÚdefaultÚexcluder   r^   rj   ú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]rp   Úbase_urlr   Úorganizationr€   r�   é   Ú
batch_sizeÚtimeoutz,Union[float, Tuple[float, float], Any, None]Úrequest_timeoutzOptional[Dict[str, float]]Ú
logit_biasé   rN   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_clientÚdataúUnion[OpenAIChat, BaseOpenAI]c                ó  •— |                      dd¦  «        }|                     d¦  «        s|                     d¦  «        r$d|vr t          j        d¦  «         t	          di |¤ŽS t          ¦   «                              | ¦  «        S )zInitialize the OpenAI object.r�   r6   ú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`rE   )r?   Ú
startswithÚwarningsÚwarnÚ
OpenAIChatÚsuperÚ__new__)r{   r²   r�   Ú	__class__s      €r0   r½   zBaseOpenAI.__new__ù   s“   ø€ à—X’X˜l¨BÑ/Ô/ˆ
à×!Ò! /Ñ2Ô2ð	&Ø6@×6KÒ6KÈGÑ6TÔ6Tð	&à Ð+Ð+ÝŒMðKñô ð õ
 Ð%Ð% Ð%Ð%Ð%Ý‰wŒw�Š˜sÑ#Ô#Ð#r2   )Úpopulate_by_nameÚbefore©ÚmodeÚvaluesc                óD   — t          | ¦  «        }t          ||¦  «        }|S )ú>Build extra kwargs from additional params that were passed in.)r   r   )r{   rÃ   Úall_required_field_namess      r0   Úbuild_extrazBaseOpenAI.build_extra  s'   € õ $<¸CÑ#@Ô#@Ð Ý$ VÐ-EÑFÔFˆØˆr2   r
   c           	     ó„  — |d         dk     rt          d¦  «        ‚|d         r|d         dk    rt          d¦  «        ‚|d         r|d         dk    rt          d¦  «        ‚t          |dd	¦  «        |d<   |d
         pt          j        d¦  «        |d
<   t          |ddd¬¦  «        |d<   |d         p't          j        d¦  «        pt          j        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	        |d<   |                     d¦  «        s |j
        di |¤Žj	        |d<   n!|                     d¦  «        s|j        |d<   n	 |S )ú?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.rp   rq   r   ÚOPENAI_API_BASEr�   ÚOPENAI_PROXYr6   ©rˆ   r€   ÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONr   NúTCould not import openai python package. Please install it with `pip install openai`.r¥   rN   r¯   r°   r±   )rž   r¡   r    r¤   rN   r¯   r°   r±   r^   rj   rE   )Ú
ValueErrorr   ÚosÚgetenvrO   ÚImportErrorr#   r?   ÚOpenAIÚcompletionsÚAsyncOpenAIÚ
Completion)r{   rÃ   rO   Úclient_paramss       r0   Úvalidate_environmentzBaseOpenAI.validate_environment  sY  € ð �#Œ;˜Š?ˆ?ÝÐ4Ñ5Ô5Ð5Ø�+Ôð 	B 6¨#¤;°¢? ?ÝÐ@ÑAÔAÐAØ�+Ôð 	H 6¨)Ô#4°qÒ#8Ð#8ÝÐFÑGÔGÐGå#7ØÐ$Ð&6ñ$
ô $
ˆÐÑ ð %+Ð+<Ô$=ð %
ÅÄØñB
ô B
ˆÐ Ñ!õ "6ØØØØð	"
ñ "
ô "
ˆˆ~Ñð Ð(Ô)ð 0ÝŒy˜Ñ)Ô)ð0åŒyÐ.Ñ/Ô/ð 	Ð$Ñ%ð
	ØˆMˆMˆMˆMøÝð 	ð 	ð 	Ýð?ñô ð ð	øøøõ ‰>Œ>ð 	à!Ð"2Ô3Ø &Ð'<Ô =Ø"Ð#4Ô5Ø!Ð"3Ô4Ø% mÔ4Ø#)Ð*;Ô#<Ø!'¨Ô!8Ø% mÔ4ð	ð 	ˆMð —:’:˜hÑ'Ô'ð NØ#0 6¤=Ð#AÐ#A°=Ð#AÐ#AÔ#M��xÑ Ø—:’:˜nÑ-Ô-ð YØ);¨Ô);Ð)LÐ)L¸mÐ)LÐ)LÔ)X��~Ñ&øØ—’˜HÑ%Ô%ð 	Ø%Ô0ˆF�8ÑÐààˆs   ÃC$ Ã$C>c                óð   — | j         | j        | j        | j        | j        | j        dœ}| j        �
| j        |d<   | j        �t          ¦   «         s
| j        |d<   | j	        dk    r
| j	        |d<   i |¥| j
        ¥S )ú2Get the default parameters for calling OpenAI API.)r‘   r–   r—   r˜   r™   r¦   Nr”   r¥   r•   rš   )r‘   r–   r—   r˜   r™   r¦   r”   r¥   r#   rš   r�   )rs   Únormal_paramss     r0   Ú_default_paramszBaseOpenAI._default_paramsL  s•   € ð  Ô+Ø”ZØ!%Ô!7Ø $Ô 5Ø”Øœ/ð)
ð )
ˆð Œ?Ð&Ø*.¬/ˆM˜,Ñ'ØÔÐ+µL±N´NÐ+Ø/3Ô/CˆMÐ+Ñ,ð Œ<˜!ÒÐØ'+¤|ˆM˜)Ñ$à5�-Ð5 4Ô#4Ð5Ð5r2   ÚpromptÚstopúOptional[List[str]]rI   rX   rY   úIterator[GenerationChunk]c              +  óh  K  — i | j         ¥|¥ddi¥}|                      ||g|¦  «         t          | f||dœ|¤ŽD ]w}t          |t          ¦  «        s|                     ¦   «         }t          |¦  «        }|r7|                     |j        || j        |j	        r|j	        d         nd ¬¦  «         |V — Œxd S ©NÚstreamT©rá   rI   r:   )ÚchunkÚverboser:   )
Ú_invocation_paramsÚget_sub_promptsre   Ú
isinstancer>   r@   Úon_llm_new_tokenr8   rê   r=   ©rs   rá   râ   rI   rY   ÚparamsÚstream_respré   s           r0   Ú_streamzBaseOpenAI._streamd  s  è è € ð G�DÔ+ÐF¨vÐF°xÀÐFÐFˆØ×Ò˜V f X¨tÑ4Ô4Ð4Ý0Øð
Ø¨[ð
ð 
Ø<Bð
ð 
ð 	ð 	ˆKõ ˜k­4Ñ0Ô0ð 1Ø)×.Ò.Ñ0Ô0�Ý8¸ÑEÔEˆEØð Ø×,Ò,Ø”JØØ œLàÔ,ð˜UÔ2°:Ô>Ð>àð -ñ ô ð ð ˆKˆKˆKˆKð	ð 	r2   rf   úAsyncIterator[GenerationChunk]c               óŽ  K  — i | j         ¥|¥ddi¥}|                      ||g|¦  «         t          | f||dœ|¤Žƒ d {V —†2 3 d {V —†}t          |t          ¦  «        s|                     ¦   «         }t          |¦  «        }|r=|                     |j        || j        |j	        r|j	        d         nd ¬¦  «        ƒ d {V —† |W V — Œ„6 d S ræ   )
rë   rì   rk   rí   r>   r@   rî   r8   rê   r=   rï   s           r0   Ú_astreamzBaseOpenAI._astream~  sd  è è € ð G�DÔ+ÐF¨vÐF°xÀÐFÐFˆØ×Ò˜V f X¨tÑ4Ô4Ð4Ý'=Øð(
Ø¨[ð(
ð (
Ø<Bð(
ð (
ð "
ð "
ð "
ð "
ð "
ð "
ð 	ð 	ð 	ð 	ð 	ð 	ð 	�+õ ˜k­4Ñ0Ô0ð 1Ø)×.Ò.Ñ0Ô0�Ý8¸ÑEÔEˆEØð Ø!×2Ò2Ø”JØØ œLàÔ,ð˜UÔ2°:Ô>Ð>àð 3ñ ô ð ð ð ð ð ð ð ð ˆKˆKˆKˆKˆKð"
ð "
ð "
s   Á CÚpromptsr   c                óþ  — | j         }i |¥|¥}|                      |||¦  «        }g }i }h d£}	d}
|D �]2}| j        r¬t          |¦  «        dk    rt	          d¦  «        ‚d} | j        |d         ||fi |¤ŽD ]}|€|}Œ||z  }Œ|€J ‚|                     |j        |j        r|j         	                    d¦  «        nd|j        r|j         	                    d¦  «        nddœ¦  «         Œ¶t          | f||d	œ|¤Ž}t          |t          ¦  «        s|                     ¦   «         }|                     |d
         ¦  «         t          |	||¦  «         |
s| 	                    d¦  «        }
�Œ4|                      |||||
¬¦  «        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   r9   r:   rD   rè   r5   Úsystem_fingerprint©rý   )rë   rì   r¨   ÚlenrÓ   rò   Úappendr8   r=   r?   re   rí   r>   Úextendr1   Úcreate_llm_result©rs   rö   râ   rI   rY   rð   Úsub_promptsr5   r(   Ú_keysrý   Ú_promptsÚ
generationré   r&   s                  r0   Ú	_generatezBaseOpenAI._generate˜  s  € ð, Ô(ˆØ%�FÐ%˜fÐ%ˆØ×*Ò*¨6°7¸DÑAÔAˆØˆØ&(ˆð GÐFÐFˆØ,0ÐØ#ð #	Lñ #	LˆHØŒ~ð "LÝ�x‘=”= 1Ò$Ð$Ý$Ð%SÑTÔTÐTà8<�
Ø)˜Tœ\¨(°1¬+°t¸[ÐSÐSÈFÐSÐSð ,ð ,�EØ!Ð)Ø%*˜
˜
à" eÑ+˜
˜
Ø!Ð-Ð-Ð-Ø—’à *¤à%Ô5ð*"¨Ô)C×)GÒ)GÈÑ)XÔ)XÐ)Xà!à%Ô5ð%" JÔ$>×$BÒ$BÀ:Ñ$NÔ$NÐ$Nà!ðð ñ
ô 
ð 
ð 
õ 1ØðØ!)°{ðð ØFLðð �õ " (­DÑ1Ô1ð /ð  (Ÿ}š}™œ�Hà—’˜x¨	Ô2Ñ3Ô3Ð3Ý" 5¨(°KÑ@Ô@Ð@Ø)ð LØ)1¯ªÐ6JÑ)KÔ)KÐ&ùØ×%Ò%ØØØØØ1ð &ñ 
ô 
ð 	
r2   c              ‹  óì  K  — | j         }i |¥|¥}|                      |||¦  «        }g }i }h d£}	d}
|D �]'}| j        r²t          |¦  «        dk    rt	          d¦  «        ‚d} | j        |d         ||fi |¤Ž2 3 d{V —†}|€|}Œ||z  }Œ6 |€J ‚|                     |j        |j        r|j         	                    d¦  «        nd|j        r|j         	                    d¦  «        nddœ¦  «         Œ¼t          | f||d	œ|¤Žƒ d{V —†}t          |t          ¦  «        s|                     ¦   «         }|                     |d
         ¦  «         t          |	||¦  «         �Œ)|                      |||||
¬¦  «        S )z:Call out to OpenAI's endpoint async with k unique prompts.rø   Nr•   rü   r   r9   r:   rD   rè   r5   rþ   )rë   rì   r¨   rÿ   rÓ   rõ   r   r8   r=   r?   rk   rí   r>   r  r1   r  r  s                  r0   Ú
_ageneratezBaseOpenAI._agenerateã  sE  è è € ð Ô(ˆØ%�FÐ%˜fÐ%ˆØ×*Ò*¨6°7¸DÑAÔAˆØˆØ&(ˆð GÐFÐFˆØ,0ÐØ#ð  	Añ  	AˆHØŒ~ð AÝ�x‘=”= 1Ò$Ð$Ý$Ð%SÑTÔTÐTà8<�
Ø#0 4¤=Ø˜Q”K  {ð$ð $Ø6<ð$ð $ð ,ð ,ð ,ð ,ð ,ð ,ð ,˜%ð "Ð)Ø%*˜
˜
à" eÑ+˜
˜
ð$ð "Ð-Ð-Ð-Ø—’à *¤à%Ô5ð*"¨Ô)C×)GÒ)GÈÑ)XÔ)XÐ)Xà!à%Ô5ð%" JÔ$>×$BÒ$BÀ:Ñ$NÔ$NÐ$Nà!ðð ñ
ô 
ð 
ð 
õ "8Øð"Ø!)°{ð"ð "ØFLð"ð "ð ð ð ð ð ð �õ " (­DÑ1Ô1ð /Ø'Ÿ}š}™œ�HØ—’˜x¨	Ô2Ñ3Ô3Ð3Ý" 5¨(°KÑ@Ô@Ð@Ñ@Ø×%Ò%ØØØØØ1ð &ñ 
ô 
ð 	
s   Á7B	rð   úList[List[str]]c                ó6  ‡ ‡— |�d|v rt          d¦  «        ‚||d<   |d         dk    r@t          ‰¦  «        dk    rt          d¦  «        ‚‰                      ‰d         ¦  «        |d<   ˆˆ fd	„t          dt          ‰¦  «        ‰ j        ¦  «        D ¦   «         }|S )
z!Get the sub prompts for llm call.Nrâ   ú2`stop` found in both the input and default params.r”   éÿÿÿÿr•   z7max_tokens set to -1 not supported for multiple inputs.r   c                ó4   •— g | ]}‰||‰j         z   …         ‘ŒS rE   )r£   )Ú.0Úirö   rs   s     €€r0   ú
<listcomp>z.BaseOpenAI.get_sub_prompts.<locals>.<listcomp>.  s:   ø€ ð 
ð 
ð 
àð �A˜˜DœOÑ+Ð+Ô,ð
ð 
ð 
r2   )rÓ   rÿ   Úmax_tokens_for_promptÚranger£   )rs   rð   rö   râ   r  s   ` `  r0   rì   zBaseOpenAI.get_sub_prompts  sÌ   øø€ ð ÐØ˜ÐÐÝ Ð!UÑVÔVÐVØ!ˆF�6‰NØ�,Ô 2Ò%Ð%Ý�7‰|Œ|˜qÒ Ð Ý ØMñô ð ð $(×#=Ò#=¸gÀa¼jÑ#IÔ#IˆF�<Ñ ð
ð 
ð 
ð 
ð 
å˜1�c '™lœl¨D¬OÑ<Ô<ð
ñ 
ô 
ˆð Ðr2   rþ   r5   r(   úDict[str, int]rý   c               ó  — g }|                      d| j        ¦  «        }t          |¦  «        D ]7\  }}	|||z  |dz   |z  …         }
|                     d„ |
D ¦   «         ¦  «         Œ8|| j        dœ}|r||d<   t          ||¬¦  «        S )z2Create the LLMResult from the choices and prompts.r™   r•   c                ó¦   — g | ]N}t          |d          t          |                     d¦  «        |                     d¦  «        ¬¦  «        ¬¦  «        ‘ŒOS )r8   r9   r:   r;   r<   )r   r>   r?   )r  Úchoices     r0   r  z0BaseOpenAI.create_llm_result.<locals>.<listcomp>C  sp   € ð 	ð 	ð 	ð õ Ø# Fœ^Ý(,Ø*0¯*ª*°_Ñ*EÔ*EØ%+§Z¢Z°
Ñ%;Ô%;ð)ñ )ô )ðñ ô ð	ð 	ð 	r2   ©r(   r�   rý   ©ÚgenerationsÚ
llm_output)r?   r™   Ú	enumerater   r�   r   )rs   r5   rö   rð   r(   rý   r  r™   r  Ú_Úsub_choicesr  s               r0   r  zBaseOpenAI.create_llm_result4  sÇ   € ð ˆØ�JŠJ�s˜DœFÑ#Ô#ˆÝ˜gÑ&Ô&ð 	ð 	‰DˆAˆqØ! ! a¡%¨1¨q©5°A©+Ð"5Ô6ˆKØ×Òð	ð 	ð #.ð	ñ 	ô 	ñô ð ð ð &1ÀÄÐPÐPˆ
Øð 	BØ/AˆJÐ+Ñ,Ý [¸ZÐHÑHÔHÐHr2   c                óÆ   — i }t          ¦   «         s(|                     | 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#   Úupdaterp   r   r€   r�   rO   Úproxyrà   )rs   Úopenai_credsrO   s      r0   rë   zBaseOpenAI._invocation_paramsS  sˆ   € ð (*ˆÝ‰~Œ~ð 	Ø×Òà#Ô2Ø $Ô 4Ø$(Ô$<ðð ñô ð ð Ôð 	SØˆMˆMˆMà$(Ô$5ÀÔ@QÐRÐRˆFŒLØ7�,Ð7 $Ô"6Ð7Ð7r2   úMapping[str, Any]c                ó&   — i d| j         i¥| j        ¥S ©zGet the identifying parameters.r�   ©r�   rà   rr   s    r0   Ú_identifying_paramszBaseOpenAI._identifying_paramse  ó   € ð K�< ¤Ð1ÐJ°TÔ5IÐJÐJr2   c                ó   — dS )úReturn type of llm.rO   rE   rr   s    r0   Ú	_llm_typezBaseOpenAI._llm_typej  s	   € ð ˆxr2   r8   ú	List[int]c                óÈ  •— t           j        d         dk     r!t          ¦   «                              |¦  «        S 	 ddl}n# t
          $ r t          d¦  «        ‚w xY w| j        p| j        }	 |                     |¦  «        }nA# t          $ r4 t                               d¦  «         d}|                     |¦  «        }Y nw xY w|                     || j        | j        ¬¦  «        S )	ú-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­   )rs   r8   r;  r�   Úencr‹   r¾   s         €r0   Úget_token_idszBaseOpenAI.get_token_idso  s  ø€ õ Ô˜AÔ Ò"Ð"Ý‘7”7×)Ò)¨$Ñ/Ô/Ð/ð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	ÝðAñô ð ð	øøøð Ô-Ð@°´ˆ
ð	/Ø×-Ò-¨jÑ9Ô9ˆCˆCøÝð 	/ð 	/ð 	/Ý�NŠNÐRÑSÔSÐSØ!ˆEØ×'Ò'¨Ñ.Ô.ˆCˆCˆCð	/øøøð
 �zŠzØØ Ô0Ø#Ô6ð ñ 
ô 
ð 	
s   º? ¿AÁ+B Â;B?Â>B?Ú	modelnamec                ón  — 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|                       d¦  «        d         } |                     | d ¦  «        }|€;t          d!| › d"�d#                     |                     ¦   «         ¦  «        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$   )rD  Úmodel_token_mappingÚcontext_sizes      r0   Úmodelname_to_contextsizez#BaseOpenAI.modelname_to_contextsize‹  s‘  € ð
Ø�gð
à ð
ð �Tð
ð ˜$ð	
ð
 ˜$ð
ð ˜ð
ð ˜eð
ð ˜eð
ð ˜Tð
ð ! $ð
ð ! $ð
ð   ð
ð % eð
ð % dð
ð ˜Dð
ð  �4ð!
ð"  ð#
ð$ Ø"ØØØ $Ø $Ø $Ø $Ø $Ø $ð7
ð 
ð 
Ðð> �IÐÐØ!Ÿš¨Ñ,Ô,¨QÔ/ˆIà*×.Ò.¨y¸$Ñ?Ô?ˆàÐÝð% )ð %ð %ð %Ø'+§y¢yÐ1D×1IÒ1IÑ1KÔ1KÑ'LÔ'LñMñô ð ð
 Ðr2   c                ó6   — |                       | j        ¦  «        S )z$Get max context size for this model.)rO  r�   rr   s    r0   Úmax_context_sizezBaseOpenAI.max_context_sizeÆ  s   € ð ×,Ò,¨T¬_Ñ=Ô=Ð=r2   c                ó@   — |                       |¦  «        }| 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:  rQ  )rs   rá   Ú
num_tokenss      r0   r  z BaseOpenAI.max_tokens_for_promptË  s%   € ð ×(Ò(¨Ñ0Ô0ˆ
ØÔ$ zÑ1Ð1r2   )r)   rn   ©r)   ru   ©r)   r'   )r)   r„   )r²   r   r)   r³   ©rÃ   r'   r)   r   ©rÃ   r
   r)   r
   ©NN©
rá   rŽ   râ   rã   rI   rX   rY   r   r)   rä   ©
rá   rŽ   râ   rã   rI   rf   rY   r   r)   ró   ©
rö   ru   râ   rã   rI   rX   rY   r   r)   r   ©
rö   ru   râ   rã   rI   rf   rY   r   r)   r   ©N)rð   r'   rö   ru   râ   rã   r)   r  )r5   r   rö   ru   rð   r'   r(   r  rý   rŸ   r)   r   ©r)   r(  ©r)   rŽ   ©r8   rŽ   r)   r1  )rD  rŽ   r)   r“   )r)   r“   )rá   rŽ   r)   r“   )?Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyrt   Úclassmethodr|   rƒ   r†   r!   r^   Ú__annotations__rj   r�   r‘   r”   r–   r—   r˜   r™   rš   r>   r�   rp   r   r€   r�   r£   r¥   r¦   rN   r¨   Úsetrª   r­   r®   r¯   r°   r±   r½   r    Úmodel_configr"   rÇ   r   rÜ   rà   rò   rõ   r  r
  rì   r  rë   r,  r0  rC  ÚstaticmethodrO  rQ  r  Ú__classcell__©r¾   s   @r0   rm   rm   —   s©  ø€ € € € € € Ø1Ð1àð4ð 4ð 4ñ „Xð4ð ð/ð /ð /ñ „[ð/ð ðð ð ñ „Xðð ðð ð ñ „[ðð �% ¨dÐ3Ñ3Ô3€FÐ3Ð3Ð3Ñ3Ø˜ d°DÐ9Ñ9Ô9€LÐ9Ð9Ð9Ñ9Ø�eÐ$<ÀGÐLÑLÔL€JÐLÐLÐLÑLØØ€KÐÐÐÑØ+Ø€JÐÐÐÑð(ð €EÐÐÐÑØDØ ÐÐ Ð Ð Ñ Ø;ØÐÐÐÐÑØ$Ø€A€J€J€J�JØ;Ø€GÐÐÐÑØKØ#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>ØVð %* E°$¸iÐ$HÑ$HÔ$H€NÐHÐHÐHÑHØOØ%* U°4¸zÐ%JÑ%JÔ%J€OÐJÐJÐJÑJðà).¨°tÀ>Ð)RÑ)RÔ)RÐÐRÐRÐRÑRØNà"&€LÐ&Ð&Ð&Ñ&Ø€JÐÐÐÑØHØDIÀEØ˜IðEñ Eô E€Oð ð ð ñ ðà-2¨UÀ4Ð-HÑ-HÔ-H€JÐHÐHÐHÑHØDØ€KÐÐÐÑØ<Ø€IÐÐÐÑØ/Ø?B¸s¹u¼u€OÐDÐDÐDÑDØ3ØAFÐÐFÐFÐFÑFØ7Ø)-ÐÐ-Ð-Ð-Ñ-ðJð 7;€OÐ:Ð:Ð:Ñ:Ø7;€MÐ;Ð;Ð;Ñ;ð %)€KÐ(Ð(Ð(Ñ(Ø ð$ð $ð $ð $ð $ð $ð �:Øðñ ô €Lð €_˜(Ð#Ñ#Ô#Øðð ð ñ „[ñ $Ô#ðð ð6ð 6ð 6ñ „Xð6ðp ð6ð 6ð 6ñ „Xð6ð4 %)Ø:>ð	ð ð ð ð ð: %)Ø?Cð	ð ð ð ð ð: %)Ø:>ð	I
ð I
ð I
ð I
ð I
ð\ %)Ø?Cð	8
ð 8
ð 8
ð 8
ð 8
ð| %)ð	ð ð ð ð ð< -1ðIð Ið Ið Ið Ið Ið> ð8ð 8ð 8ñ „Xð8ð" ðKð Kð Kñ „XðKð ðð ð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð8 ð8ð 8ð 8ñ „\ð8ðt ð>ð >ð >ñ „Xð>ð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r2   rm   z0.0.10z1.0zlangchain_openai.OpenAI)ÚsinceÚremovalÚalternative_importc                  óL   ‡ — 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")
    r)   ru   c                ó
   — g d¢S rw   rE   rz   s    r0   r|   zOpenAI.get_lc_namespaceî  r}   r2   r'   c                ó@   •— i d| j         i¥t          ¦   «         j        ¥S )Nr‹   )r�   r¼   rë   ©rs   r¾   s    €r0   rë   zOpenAI._invocation_paramsó  s!   ø€ àK�7˜DœOÐ,ÐKµ±´Ô0JÐKÐKr2   rT  rU  )	ra  rb  rc  rd  rf  r|   re  rë   rk  rl  s   @r0   r×   r×   Ý  s}   ø€ € € € € ðð ð ð/ð /ð /ñ „[ð/ð ðLð Lð Lð Lð Lñ „XðLð Lð Lð Lð Lr2   r×   zlangchain_openai.AzureOpenAIc                  ó„  ‡ — 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_namer6   Úapi_versionrŽ   Úopenai_api_versionrž   rp   Ú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_urlr)   ru   c                ó
   — g d¢S rw   rE   rz   s    r0   r|   zAzureOpenAI.get_lc_namespace7  r}   r2   rÃ   r
   c                ó"  — |d         dk     rt          d¦  «        ‚|d         r|d         dk    rt          d¦  «        ‚|d         r|d         dk    rt          d¦  «        ‚|d         p't          j        d	¦  «        pt          j        d
¦  «        |d<   |d         pt          j        d¦  «        |d<   |d         pt          j        d¦  «        |d<   |d         pt          j        d¦  «        |d<   t          |d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          ¦   «         �rc|d         }|r¹|d          r±d!|vrB|d                              d"¦  «        d!z   |d<   t          j	        d#|› d$|d         › d%�¦  «         |d&         rct          j	        d'¦  «         |d&         |d         vr:t          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-         pi ¥d.d/i¥|d0         |d1         d2œ} |j
        d6i |¤Žj        |d3<   |d4         }|r||d*<    |j        d6i |¤Žj        |d5<   n
|j        |d3<   |S )7rÉ   r™   r•   rÊ   r¨   rË   rš   rÌ   rp   ÚAZURE_OPENAI_API_KEYrq   rv  ÚAZURE_OPENAI_ENDPOINTr{  ÚAZURE_OPENAI_AD_TOKENr   rÍ   r�   rÎ   r6   rÏ   r€   rÐ   rÑ   rz  ÚOPENAI_API_VERSIONr~  ÚOPENAI_API_TYPEÚazurer   NrÒ   r  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 ú.rx  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/r|  r¥   rN   r¯   z
User-Agentz"langchain-comm-python-azure-openair°   r±   )ry  rv  rw  rž   r{  r|  r¡   r    r¤   rN   r¯   r°   r±   r^   r}  rj   rE   )rÓ   rÔ   rÕ   r   rO   rÖ   r#   Úrstripr¹   rº   ru  rØ   ÚAsyncAzureOpenAIrÚ   )r{   rÃ   rO   r   rÛ   r}  s         r0   rÜ   z AzureOpenAI.validate_environment<  s·  € ð �#Œ;˜Š?ˆ?ÝÐ4Ñ5Ô5Ð5Ø�+Ôð 	B 6¨#¤;°¢? ?ÝÐ@ÑAÔAÐAØ�+Ôð 	H 6¨)Ô#4°qÒ#8Ð#8ÝÐFÑGÔGÐGð Ð#Ô$ð +ÝŒyÐ/Ñ0Ô0ð+åŒyÐ)Ñ*Ô*ð 	ÐÑ ð $*Ð*:Ô#;ð $
½r¼yØ#ñ@
ô @
ˆÐÑ ð $*Ð*:Ô#;ð $
½r¼yØ#ñ@
ô @
ˆÐÑ ð %+Ð+<Ô$=ð %
ÅÄØñB
ô B
ˆÐ Ñ!õ "6ØØØØð	"
ñ "
ô "
ˆˆ~Ñð Ð(Ô)ð 0ÝŒy˜Ñ)Ô)ð0åŒyÐ.Ñ/Ô/ð 	Ð$Ñ%ð
 (.Ð.BÔ'Cð (
ÅrÄyØ ñH
ô H
ˆÐ#Ñ$õ %9ØÐ%Ð'8À'ð%
ñ %
ô %
ˆÐ Ñ!ð	ØˆMˆMˆMˆMøÝð 	ð 	ð 	Ýð?ñô ð ð	øøøõ
 ‰>Œ>ñ B	1ð %Ð%6Ô7ˆOØð 5 6Ð*=Ô#>ð 5Ø OÐ3Ð3àÐ0Ô1×8Ò8¸Ñ=Ô=À	ÑIð Ð,Ñ-õ ”MðMð +ðMð Mð 17Ð7HÔ0IðMð Mð Mñô ð ð Ð+Ô,ð 5Ý”Mð0ñô ð ð Ð/Ô0¸Ð?PÔ8QÐQÐQÝ œð<ð )8ð	<ð <ð
  &Ð&7Ô8ð<ð <ð <ñô ð ð Ð0Ð1Ð1Ô1Ø+¨fÐ5FÔ.GÑGñÐ1Ð1Ñ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ÐBÐB°MÐBÐBÔNˆF�8Ñà,2Ð3RÔ,SÐ)à,ð YØ;X�Ð7Ñ8à%< VÔ%<ð &ð &Øð&ð &äð �>Ñ"Ð"ð
  &Ô0ˆF�8Ñàˆs   Å1E6 Å6Fr(  c                ó@   •— i d| j         i¥t          ¦   «         j        ¥S )Nrx  )rx  r¼   r,  rs  s    €r0   r,  zAzureOpenAI._identifying_params¶  s,   ø€ ð
Ø  $Ô"6Ð7ð
å‰gŒgÔ)ð
ð 	
r2   r'   c                óŒ   •— t          ¦   «         r
d| j        i}n| j        | j        | j        dœ}i |¥t	          ¦   «         j        ¥S )Nr‹   )ÚengineÚapi_typery  )r#   rx  r~  rz  r¼   rë   )rs   Úopenai_paramsr¾   s     €r0   rë   zAzureOpenAI._invocation_params½  sW   ø€ å‰>Œ>ð 	Ø$ dÔ&:Ð;ˆMˆMð Ô.Ø Ô0Ø#Ô6ðð ˆMð
 ?�-Ð>¥5¡7¤7Ô#=Ð>Ð>r2   c                ó   — dS )r/  r‡  rE   rr   s    r0   r0  zAzureOpenAI._llm_typeÉ  s	   € ð ˆwr2   c                ó    — | j         | j        dœS )N©r~  rz  r“  rr   s    r0   rƒ   zAzureOpenAI.lc_attributesÎ  s   € ð  $Ô3Ø"&Ô"9ð
ð 
ð 	
r2   rT  rW  r^  rU  r_  )ra  rb  rc  rd  rv  rg  r!   rx  rz  rp   r{  r|  r}  r~  r  rf  r|   r   rÜ   re  r,  rë   r0  rƒ   rk  rl  s   @r0   ru  ru  ø  s  ø€ € € € € € ðð ð  (,€NÐ+Ð+Ð+Ñ+ðð ).¨°dÐBTÐ(UÑ(UÔ(U€OÐUÐUÐUÑUðð
 $˜e¨B°mÐDÑDÔDÐÐDÐDÐDÑDØSØ', u°TÀÐ'KÑ'KÔ'K€NÐKÐKÐKÑKØUØ'+€NÐ+Ð+Ð+Ñ+ðð ?CÐÐBÐBÐBÑBðð
 PTÐ!ÐSÐSÐSÑSðð €OÐÐÐÑØ+Ø"ÐÐ"Ð"Ð"Ñ"ðð ð/ð /ð /ñ „[ð/ð ðwð wð wñ „Xðwðr ð
ð 
ð 
ð 
ð 
ñ „Xð
ð ð	?ð 	?ð 	?ð 	?ð 	?ñ „Xð	?ð ðð ð ñ „Xðð ð
ð 
ð 
ñ „Xð
ð 
ð 
ð 
ð 
r2   ru  z0.0.1zlangchain_openai.ChatOpenAIc                  óP  ‡ — 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dBd&„¦   «         ¦   «         ZedCd(„¦   «         ZedDd)„¦   «         Z	 dEdFd/„Z	 	 dGdHd5„Z	 	 dGdId8„Z	 	 dGdJd:„Z	 	 dGdKd;„Z edLd=„¦   «         Z!edMd>„¦   «         Z"dNˆ fdA„Z#ˆ xZ$S )Or»   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   r^   rj   rµ   rŽ   r�   r›   r'   r�   rž   rŒ   rŸ   rp   r    r   r�   é   r“   rN   r   Úprefix_messagesFr„   r¨   r©   rª   r«   r¬   r­   rÀ   rÁ   rÃ   r)   c                ó  — d„ t          | ¦  «                             ¦   «         D ¦   «         }|                     di ¦  «        }t          |¦  «        D ]5}||vr/||v rt	          d|› d�¦  «        ‚|                     |¦  «        ||<   Œ6||d<   |S )rÅ   c                ó   — h | ]	}|j         ’Œ
S rE   )r�   )r  Úfields     r0   ú	<setcomp>z)OpenAIChat.build_extra.<locals>.<setcomp>
  s   € Ð#VÐ#VÐ#V°E E¤KÐ#VÐ#VÐ#Vr2   r�   zFound z supplied twice.)r   rÃ   r?   ÚlistrÓ   Úpop)r{   rÃ   rÆ   ÚextraÚ
field_names        r0   rÇ   zOpenAIChat.build_extra  sª   € ð $WÐ#V½ZÈ¹_¼_×=SÒ=SÑ=UÔ=UÐ#VÑ#VÔ#VÐ à—
’
˜>¨2Ñ.Ô.ˆÝ˜v™,œ,ð 	;ð 	;ˆJØÐ!9Ð9Ð9Ø Ð&Ð&Ý$Ð%J¨jÐ%JÐ%JÐ%JÑKÔKÐKØ$*§J¢J¨zÑ$:Ô$:��jÑ!øØ!&ˆˆ~ÑØˆr2   r
   c                ó¤  — t          |dd¦  «        }t          |ddd¬¦  «        }t          |ddd¬¦  «        }t          |d	d
d¬¦  «        }	 ddl}||_        |r||_        |r||_        |r
||dœ|_        n# t          $ r t          d¦  «        ‚w xY w	 |j        |d<   n# t          $ r t          d¦  «        ‚w xY wt          j        d¦  «         |S )rÉ   rp   rq   r   rÍ   r6   rÏ   r�   rÎ   r€   rÑ   r   Nr"  rÒ   r^   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   rO   rž   r!  r¡   r&  rÖ   ÚChatCompletionÚAttributeErrorrÓ   r¹   rº   )r{   rÃ   rp   r   r�   r€   rO   s          r0   rÜ   zOpenAIChat.validate_environment  sk  € õ .ØÐ$Ð&6ñ
ô 
ˆõ /ØØØØð	
ñ 
ô 
ˆõ ,ØØØØð	
ñ 
ô 
ˆõ 3ØÐ)Ð+@È"ð
ñ 
ô 
Ðð	ØˆMˆMˆMà+ˆFŒNØð 2Ø"1�”Ø"ð :Ø&9�Ô#Øð MØ(4¸|ÐLÐL�”øøÝð 	ð 	ð 	Ýð?ñô ð ð	øøøð
	Ø%Ô4ˆF�8ÑÐøÝð 	ð 	ð 	Ýð7ñô ð ð	øøøõ 	ŒðGñ	
ô 	
ð 	
ð
 ˆs   Á)A6 Á6BÂ
B ÂB9c                ó   — | j         S )rÞ   )r�   rr   s    r0   rà   zOpenAIChat._default_paramsH  s   € ð Ô Ð r2   rö   ru   râ   rã   r   c                ó  — t          |¦  «        dk    rt          d|› �¦  «        ‚| j        d|d         dœgz   }i d| j        i¥| j        ¥}|�d|v rt          d¦  «        ‚||d<   |                     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?   )rs   rö   râ   Úmessagesrð   s        r0   Ú_get_chat_paramszOpenAIChat._get_chat_paramsM  s¼   € õ ˆw‰<Œ<˜!ÒÐÝØRÈÐRÐRñô ð ð Ô'°FÀwÈqÄzÐ+RÐ+RÐ*SÑSˆØ!W W¨d¬oÐ$>Ð!WÀ$ÔBVÐ!WˆØÐØ˜ÐÐÝ Ð!UÑVÔVÐVØ!ˆF�6‰NØ�:Š:�lÑ#Ô# rÒ)Ð)à�|Ð$Ø˜ÐÐr2   rá   rI   rX   rY   rä   c              +  ót  K  — |                       |g|¦  «        \  }}i |¥|¥ddi¥}t          | f||dœ|¤ŽD ]€}t          |t          ¦  «        s|                     ¦   «         }|d         d         d                              dd¦  «        }t          |¬	¦  «        }	|r|                     ||	¬
¦  «         |	V — Œ�d S ©Nrç   T©r§  rI   r5   r   Údeltar¦  r6   r7   )ré   )r¨  re   rí   r>   r?   r   rî   ©
rs   rá   râ   rI   rY   r§  rð   rñ   Útokenré   s
             r0   rò   zOpenAIChat._stream_  s   è è € ð  ×0Ò0°&°¸4Ñ@Ô@Ñˆ�&Ø5�FÐ5˜fÐ5 h°Ð5Ð5ˆÝ0Øð
Ø#°ð
ð 
Ø@Fð
ð 
ð 		ð 		ˆKõ ˜k­4Ñ0Ô0ð 1Ø)×.Ò.Ñ0Ô0�Ø 	Ô*¨1Ô-¨gÔ6×:Ò:¸9ÀbÑIÔIˆEÝ#¨Ð/Ñ/Ô/ˆEØð AØ×,Ò,¨U¸%Ð,Ñ@Ô@Ð@ØˆKˆKˆKˆKð		ð 		r2   rf   ró   c               óš  K  — |                       |g|¦  «        \  }}i |¥|¥ddi¥}t          | f||dœ|¤Žƒ d {V —†2 3 d {V —†}t          |t          ¦  «        s|                     ¦   «         }|d         d         d                              dd¦  «        }t          |¬	¦  «        }	|r|                     ||	¬
¦  «        ƒ d {V —† |	W V — Œ�6 d S rª  )r¨  rk   rí   r>   r?   r   rî   r­  s
             r0   rõ   zOpenAIChat._astreams  sP  è è € ð  ×0Ò0°&°¸4Ñ@Ô@Ñˆ�&Ø5�FÐ5˜fÐ5 h°Ð5Ð5ˆÝ'=Øð(
Ø#°ð(
ð (
Ø@Fð(
ð (
ð "
ð "
ð "
ð "
ð "
ð "
ð 		ð 		ð 		ð 		ð 		ð 		ð 		�+õ ˜k­4Ñ0Ô0ð 1Ø)×.Ò.Ñ0Ô0�Ø 	Ô*¨1Ô-¨gÔ6×:Ò:¸9ÀbÑIÔIˆEÝ#¨Ð/Ñ/Ô/ˆEØð GØ!×2Ò2°5ÀÐ2ÑFÔFÐFÐFÐFÐFÐFÐFÐFØˆKˆKˆKˆKˆKð"
ð "
ð "
s   ½C
r   c                óÈ  — | j         r;d } | j        |d         ||fi |¤ŽD ]}|€|}Œ||z  }Œ|€J ‚t          |gg¬¦  «        S |                      ||¦  «        \  }}i |¥|¥}t	          | f||dœ|¤Ž}	t          |	t          ¦  «        s|	                     ¦   «         }	|	d         | j        dœ}
t          t          |	d         d         d         d         ¬	¦  «        gg|
¬
¦  «        S ©Nr   )r  r«  r,   r  r5   Úmessager¦  r7   r  )	r¨   rò   r   r¨  re   rí   r>   r�   r   ©rs   rö   râ   rI   rY   r  ré   r§  rð   Úfull_responser  s              r0   r  zOpenAIChat._generate‡  sP  € ð Œ>ð 	9Ø48ˆJØ%˜œ g¨a¤j°$¸ÐNÐNÀvÐNÐNð (ð (�ØÐ%Ø!&�J�Jà %Ñ'�J�JØÐ)Ð)Ð)Ý¨:¨,¨Ð8Ñ8Ô8Ð8à×0Ò0°¸$Ñ?Ô?Ñˆ�&Ø%�FÐ%˜fÐ%ˆÝ-Øð
Ø#°ð
ð 
Ø@Fð
ð 
ˆõ ˜-­Ñ.Ô.ð 	1Ø)×.Ò.Ñ0Ô0ˆMà(¨Ô1Øœ/ð
ð 
ˆ
õ å ¨yÔ!9¸!Ô!<¸YÔ!GÈ	Ô!RÐSÑSÔSÐTðð "ð	
ñ 
ô 
ð 	
r2   c              ‹  óä  K  — | j         rAd } | j        |d         ||fi |¤Ž2 3 d {V —†}|€|}Œ||z  }Œ6 |€J ‚t          |gg¬¦  «        S |                      ||¦  «        \  }}i |¥|¥}t	          | f||dœ|¤Žƒ d {V —†}	t          |	t          ¦  «        s|	                     ¦   «         }	|	d         | j        dœ}
t          t          |	d         d         d         d         ¬	¦  «        gg|
¬
¦  «        S r±  )	r¨   rõ   r   r¨  rk   rí   r>   r�   r   r³  s              r0   r
  zOpenAIChat._agenerateª  s“  è è € ð Œ>ð 	9Ø48ˆJØ,˜tœ}¨W°Q¬Z¸¸{ÐUÐUÈfÐUÐUð (ð (ð (ð (ð (ð (ð (�eØÐ%Ø!&�J�Jà %Ñ'�J�Jð	  Vð
 Ð)Ð)Ð)Ý¨:¨,¨Ð8Ñ8Ô8Ð8à×0Ò0°¸$Ñ?Ô?Ñˆ�&Ø%�FÐ%˜fÐ%ˆÝ4Øð
Ø#°ð
ð 
Ø@Fð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ ˜-­Ñ.Ô.ð 	1Ø)×.Ò.Ñ0Ô0ˆMà(¨Ô1Øœ/ð
ð 
ˆ
õ å ¨yÔ!9¸!Ô!<¸YÔ!GÈ	Ô!RÐSÑSÔSÐTðð "ð	
ñ 
ô 
ð 	
s   ¢4r(  c                ó&   — i d| j         i¥| j        ¥S r*  r+  rr   s    r0   r,  zOpenAIChat._identifying_paramsÍ  r-  r2   c                ó   — dS )r/  zopenai-chatrE   rr   s    r0   r0  zOpenAIChat._llm_typeÒ  s	   € ð ˆ}r2   r8   r1  c                ó0  •— t           j        d         dk     r!t          ¦   «                              |¦  «        S 	 ddl}n# t
          $ r t          d¦  «        ‚w xY w|                     | j        ¦  «        }|                     || j	        | j
        ¬¦  «        S )r3  r•   r4  r   Nr5  r7  )r8  r9  r¼   rC  r;  rÖ   r<  r�   rA  rª   r­   )rs   r8   r;  rB  r¾   s       €r0   rC  zOpenAIChat.get_token_ids×  s´   ø€ õ Ô˜AÔ Ò"Ð"Ý‘7”7×(Ò(¨Ñ.Ô.Ð.ð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	ÝðAñô ð ð	øøøð ×)Ò)¨$¬/Ñ:Ô:ˆØ�zŠzØØ Ô0Ø#Ô6ð ñ 
ô 
ð 	
s	   º? ¿ArV  rW  rU  r]  )rö   ru   râ   rã   r)   r   rX  rY  rZ  r[  r\  r^  r_  r`  )%ra  rb  rc  rd  r!   r^   rg  rj   r�   r>   r�   rp   r   r�   rN   r›  r–  r¨   rh  rª   r­   r"   rf  rÇ   r   rÜ   re  rà   r¨  rò   rõ   r  r
  r,  r0  rC  rk  rl  s   @r0   r»   r»   Ö  sõ  ø€ € € € € € ðð ð �% ¨dÐ3Ñ3Ô3€FÐ3Ð3Ð3Ñ3Ø˜ d°DÐ9Ñ9Ô9€LÐ9Ð9Ð9Ñ9Ø%€JÐ%Ð%Ð%Ñ%ØØ#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>ØVð %* E°$¸iÐ$HÑ$HÔ$H€NÐHÐHÐHÑHØOØ%* U°4¸zÐ%JÑ%JÔ%J€OÐJÐJÐJÑJðð #'€LÐ&Ð&Ð&Ñ&Ø€KÐÐÐÑØ<Ø!˜E°$Ð7Ñ7Ô7€OÐ7Ð7Ð7Ñ7Ø,Ø€IÐÐÐÑØ/Ø?B¸s¹u¼u€OÐDÐDÐDÑDØ3ØAFÐÐFÐFÐFÑFØ7à€_˜(Ð#Ñ#Ô#Øðð ð ñ „[ñ $Ô#ðð ð0ð 0ð 0ñ „Xð0ðd ð!ð !ð !ñ „Xð!ð
 ?Cð ð  ð  ð  ð  ð* %)Ø:>ð	ð ð ð ð ð. %)Ø?Cð	ð ð ð ð ð. %)Ø:>ð	!
ð !
ð !
ð !
ð !
ðL %)Ø?Cð	!
ð !
ð !
ð !
ð !
ðF ðKð Kð Kñ „XðKð ðð ð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r2   r»   )r$   r%   r&   r'   r(   r'   r)   r*   )r3   r'   r)   r   )r&   r'   r3   r'   r)   r*   rU  r]  )rG   rH   rI   rJ   r)   rK   )rG   rH   rI   rX   rY   r   r)   r   )rG   rH   rI   rf   rY   r   r)   r   )>Ú
__future__r   ÚloggingrÔ   r8  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#   Ú	getLoggerra  r>  r1   r@   rB   rF   rW   re   rk   rm   r×   ru  r»   rE   r2   r0   ú<module>rÆ     sê  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ 7Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð UÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Iðð ð ð ð ð ð ð ð ð ð
 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø :Ð :Ð :Ð :Ð :Ð :Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à 9Ð 9Ð 9Ð 9Ð 9Ð 9à	ˆÔ	˜8Ñ	$Ô	$€ð	9ð 	9ð 	9ð 	9ðð ð ð ðSð Sð Sð Sð	ð 	ð 	ð 	ð  	ð	ð ð ð ð ð, 7;ð,ð ,ð ,ð ,ð ,ð( <@ð2ð 2ð 2ð 2ð 2ð&C	2ð C	2ð C	2ð C	2ð C	2�ñ C	2ô C	2ð C	2ðL €�( EÐ>WÐXÑXÔXðLð Lð Lð Lð LˆZñ Lô Lñ YÔXðLð4 €Ø
˜EÐ6Tðñ ô ðX
ð X
ð X
ð X
ð X
�*ñ X
ô X
ñô ðX
ðv €Ø
ØØ4ðñ ô ð
O
ð O
ð O
ð O
ð O
�ñ O
ô O
ñô ð
O
ð O
ð O
r2   