§
    æ˜ºh}º  ã                  ó6  — 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 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# d d	l$m%Z%m&Z& d d
l'm(Z( d dl)m*Z*  ej+        e,¦  «        Z-d4d„Z.d5d„Z/d6d„Z0d7d„Z1	 d8d9d„Z2	 d8d:d"„Z3	 d8d;d$„Z4 G d%„ d&e¦  «        Z5 ed'd(d)¬*¦  «         G d+„ d,e5¦  «        ¦   «         Z6 ed'd(d-¬*¦  «         G d.„ d/e5¦  «        ¦   «         Z7 ed0d(d1¬*¦  «         G d2„ d3e¦  «        ¦   «         Z8dS )<é    )ÚannotationsN)ÚAbstractSetÚAnyÚAsyncIteratorÚCallableÚ
CollectionÚDictÚIteratorÚListÚLiteralÚMappingÚOptionalÚSetÚTupleÚUnion)Ú
deprecated)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLLMÚcreate_base_retry_decorator)Ú
GenerationÚGenerationChunkÚ	LLMResult)ÚFieldÚroot_validator)Úget_from_dict_or_envÚget_pydantic_field_names)Úbuild_extra_kwargs)Ú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        úg/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/openai.pyÚupdate_token_usager-   (   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   r4   Úfinish_reasonNÚlogprobs©r5   r6   ©r4   Úgeneration_info)r   ÚdictÚget)r/   s    r,   Ú$_stream_response_to_generation_chunkr<   4   s—   € ð ˜9Ô%ð (Ý BÐ'Ñ'Ô'Ð'ÝØ˜YÔ'¨Ô*¨6Ô2ÝØ)¨)Ô4°QÔ7×;Ò;¸OÈTÑRÔRØ$ YÔ/°Ô2×6Ò6°zÀ4ÑHÔHð
ñ 
ô 
ðñ ô ð r.   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.r1   r   r4   r5   Nr6   )r;   )r"   r/   s     r,   Ú_update_responser>   C   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 )Nr1   r2   ©r4   r5   r6   © rA   r.   r,   Ú_streaming_response_templaterB   L   s'   € ààØ!%Ø ðð ð
ðð r.   Ú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_retriesrE   )	ÚopenaiÚerrorÚTimeoutÚAPIErrorÚAPIConnectionErrorÚRateLimitErrorÚServiceUnavailableErrorr   rJ   )rC   rE   rK   Úerrorss       r,   Ú_create_retry_decoratorrS   X   s`   € ð €M€M€Mð 	ŒÔØŒÔØŒÔ'ØŒÔ#ØŒÔ,ð€Fõ 'Ø¨¬À[ðñ ô ð r.   ú"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.©rE   rU   r   r%   c                 ó(   •—  ‰j         j        di | ¤ŽS ©NrA   )ÚclientÚcreate©rU   rC   s    €r,   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retryw   s   ø€ à ˆsŒzÔ Ð*Ð* 6Ð*Ð*Ð*r.   rA   ©rU   r   r%   r   )r   rZ   r[   rS   ©rC   rE   rU   Úretry_decoratorr]   s   `    r,   Úcompletion_with_retryra   l   s   ø€ õ �~„~ð +Ø ˆsŒzÔ Ð*Ð* 6Ð*Ð*Ð*å-¨c¸{ÐKÑKÔK€Oàð+ð +ð +ð +ð +ñ „_ð+ð "Ð!Ð+Ð+ FÐ+Ð+Ð+r.   ú'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.NrW   rU   r   r%   c               ›  ó8   •K  —  ‰j         j        di | ¤Žƒ d {V —†S rY   )rZ   Úacreater\   s    €r,   r]   z6acompletion_with_retry.<locals>._completion_with_retry‰   s6   øè è € ð (�S”ZÔ'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r.   rA   r^   )r   Úasync_clientr[   rS   r_   s   `    r,   Úacompletion_with_retryrg   ~   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Ð1r.   c                  óR  ‡ — 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( G dG„ dH¦  «        Z) e*d¬I¦  «        dwdK„¦   «         Z+ e*¦   «         dxdM„¦   «         Z,edtdN„¦   «         Z-	 	 dydzdV„Z.	 	 dyd{dY„Z/	 	 dyd|d\„Z0	 	 dyd}d]„Z1	 d~dd`„Z2ddaœd€df„Z3edtdg„¦   «         Z4ed�di„¦   «         Z5ed‚dj„¦   «         Z6dƒˆ fdm„Z7e8d„do„¦   «         Z9e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_KEYrA   ©Úselfs    r,   Ú
lc_secretszBaseOpenAI.lc_secrets”   s   € à Ð"2Ð3Ð3r.   ú	List[str]c                ó
   — g d¢S ©z*Get the namespace of the langchain object.)Ú	langchainÚllmsrK   rA   ©Úclss    r,   Úget_lc_namespacezBaseOpenAI.get_lc_namespace˜   ó   € ð /Ð.Ð.Ð.r.   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}   )ro   Ú
attributess     r,   Úlc_attributeszBaseOpenAI.lc_attributes�   sY   € à%'ˆ
ØÔð 	AØ,0Ô,@ˆJÐ(Ñ)àÔ#ð 	IØ04Ô0HˆJÐ,Ñ-àÔð 	;Ø)-Ô):ˆJ�~Ñ&àÐr.   Úboolc                ó   — dS )NTrA   rv   s    r,   Úis_lc_serializablezBaseOpenAI.is_lc_serializable«   s   € àˆtr.   NT©ÚdefaultÚexcluder   rZ   rf   ú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]rl   Úbase_urlr{   Úorganizationr|   r}   é   Ú
batch_sizeÚtimeoutz,Union[float, Tuple[float, float], Any, None]Úrequest_timeoutzOptional[Dict[str, float]]Ú
logit_biasé   rJ   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‹   r2   ú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__)rw   r®   r‹   Ú	__class__s      €r,   r¹   zBaseOpenAI.__new__ó   s“   ø€ à—X’X˜l¨BÑ/Ô/ˆ
à×!Ò! /Ñ2Ô2ð	&Ø6@×6KÒ6KÈGÑ6TÔ6Tð	&à Ð+Ð+ÝŒMðKñô ð õ
 Ð%Ð% Ð%Ð%Ð%Ý‰wŒw�Š˜sÑ#Ô#Ð#r.   c                  ó   — e Zd ZdZdZdS )úBaseOpenAI.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úallow_population_by_field_namerA   r.   r,   ÚConfigr¼     s   € € € € € Ø5Ð5à)-Ð&Ð&Ð&r.   rÂ   ©ÚpreÚvaluesc                óx   — t          | ¦  «        }|                     di ¦  «        }t          |||¦  «        |d<   |S )ú>Build extra kwargs from additional params that were passed in.r™   )r   r;   r   )rw   rÅ   Úall_required_field_namesÚextras       r,   Úbuild_extrazBaseOpenAI.build_extra  sH   € õ $<¸CÑ#@Ô#@Ð Ø—
’
˜>¨2Ñ.Ô.ˆÝ!3Ø�6Ð3ñ"
ô "
ˆˆ~Ñð ˆ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¦  «        ‚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.rl   rm   r{   ÚOPENAI_API_BASEr}   ÚOPENAI_PROXYr2   ©r„   r|   ÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONr   NúTCould not import openai python package. Please install it with `pip install openai`.r¡   rJ   r«   r¬   r­   )rš   r�   rœ   r    rJ   r«   r¬   r­   rZ   rf   rA   )Ú
ValueErrorr   ÚosÚgetenvrK   ÚImportErrorr   r;   ÚOpenAIÚcompletionsÚAsyncOpenAIÚ
Completion)rw   rÅ   rK   Úclient_paramss       r,   Ú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™   )ro   Únormal_paramss     r,   Ú_default_paramszBaseOpenAI._default_paramsI  s•   € ð  Ô+Ø”ZØ!%Ô!7Ø $Ô 5Ø”Øœ/ð)
ð )
ˆð Œ?Ð&Ø*.¬/ˆM˜,Ñ'ØÔÐ+µL±N´NÐ+Ø/3Ô/CˆMÐ+Ñ,ð Œ<˜!ÒÐØ'+¤|ˆM˜)Ñ$à5�-Ð5 4Ô#4Ð5Ð5r.   ÚpromptÚstopúOptional[List[str]]rE   rT   rU   úIterator[GenerationChunk]c              +  óh  K  — i | j         ¥|¥ddi¥}|                      ||g|¦  «         t          | f||dœ|¤ŽD ]w}t          |t          ¦  «        s|                     ¦   «         }t          |¦  «        }|V — |r7|                     |j        || j        |j	        r|j	        d         nd ¬¦  «         Œxd S ©NÚstreamT©rä   rE   r6   )ÚchunkÚverboser6   )
Ú_invocation_paramsÚget_sub_promptsra   Ú
isinstancer:   r<   Úon_llm_new_tokenr4   rí   r9   ©ro   rä   rå   rE   rU   ÚparamsÚstream_resprì   s           r,   Ú_streamzBaseOpenAI._streama  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ØˆKˆKˆKØð Ø×,Ò,Ø”JØØ œLàÔ,ð˜UÔ2°:Ô>Ð>àð -ñ ô ð øð	ð 	r.   rb   úAsyncIterator[GenerationChunk]c               óŽ  K  — i | j         ¥|¥ddi¥}|                      ||g|¦  «         t          | f||dœ|¤Žƒ d {V —†2 3 d {V —†}t          |t          ¦  «        s|                     ¦   «         }t          |¦  «        }|W V — |r=|                     |j        || j        |j	        r|j	        d         nd ¬¦  «        ƒ d {V —† Œ„6 d S ré   )
rî   rï   rg   rð   r:   r<   rñ   r4   rí   r9   rò   s           r,   Ú_astreamzBaseOpenAI._astream{  sa  è è € ð 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ØˆKˆKˆKˆKØð Ø!×2Ò2Ø”JØØ œLàÔ,ð˜UÔ2°:Ô>Ð>àð 3ñ ô ð ð ð ð ð ð ð øð"
ð "
ð "
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   r5   r6   r@   rë   r1   Úsystem_fingerprint©r   )rî   rï   r¤   ÚlenrÖ   rõ   Úappendr4   r9   r;   ra   rð   r:   Úextendr-   Úcreate_llm_result©ro   rù   rå   rE   rU   ró   Úsub_promptsr1   r$   Ú_keysr   Ú_promptsÚ
generationrì   r"   s                  r,   Ú	_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ð &ñ 
ô 
ð 	
r.   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   r5   r6   r@   rë   r1   r  )rî   rï   r¤   r  rÖ   rø   r  r4   r9   r;   rg   rð   r:   r  r-   r  r  s                  r,   Ú
_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 rA   )rŸ   )Ú.0Úirù   ro   s     €€r,   ú
<listcomp>z.BaseOpenAI.get_sub_prompts.<locals>.<listcomp>+  s:   ø€ ð 
ð 
ð 
àð �A˜˜DœOÑ+Ð+Ô,ð
ð 
ð 
r.   )rÖ   r  Úmax_tokens_for_promptÚrangerŸ   )ro   ró   rù   rå   r  s   ` `  r,   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Ñ<Ô<ð
ñ 
ô 
ˆð Ðr.   r  r1   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 )r4   r5   r6   r7   r8   )r   r:   r;   )r  Úchoices     r,   r  z0BaseOpenAI.create_llm_result.<locals>.<listcomp>@  sp   € ð 	ð 	ð 	ð õ Ø# Fœ^Ý(,Ø*0¯*ª*°_Ñ*EÔ*EØ%+§Z¢Z°
Ñ%;Ô%;ð)ñ )ô )ðñ ô ð	ð 	ð 	r.   ©r$   r‹   r   ©ÚgenerationsÚ
llm_output)r;   r•   Ú	enumerater  r‹   r   )ro   r1   rù   ró   r$   r   r  r•   r  Ú_Úsub_choicesr  s               r,   r  zBaseOpenAI.create_llm_result1  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ÐHr.   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   Úupdaterl   r{   r|   r}   rK   Úproxyrã   )ro   Úopenai_credsrK   s      r,   rî   zBaseOpenAI._invocation_paramsP  sˆ   € ð (*ˆÝ‰~Œ~ð 	Ø×Òà#Ô2Ø $Ô 4Ø$(Ô$<ðð ñô ð ð Ôð 	SØˆMˆMˆMà$(Ô$5ÀÔ@QÐRÐRˆFŒLØ7�,Ð7 $Ô"6Ð7Ð7r.   úMapping[str, Any]c                ó&   — i d| j         i¥| j        ¥S ©zGet the identifying parameters.r‹   ©r‹   rã   rn   s    r,   Ú_identifying_paramszBaseOpenAI._identifying_paramsb  ó   € ð K�< ¤Ð1ÐJ°TÔ5IÐJÐJr.   c                ó   — dS )úReturn type of llm.rK   rA   rn   s    r,   Ú	_llm_typezBaseOpenAI._llm_typeg  s	   € ð ˆxr.   r4   ú	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©   )ro   r4   r>  r‹   Úencr‡   rº   s         €r,   Úget_token_idszBaseOpenAI.get_token_idsl  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           
     ój  — 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| 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")
        r²   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ø  Úbabbageztext-curie-001i  iA  i   )Ú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    )rG  Úmodel_token_mappingÚcontext_sizes      r,   Úmodelname_to_contextsizez#BaseOpenAI.modelname_to_contextsizeˆ  s‹  € ð
Ø�Tð
à˜$ð
ð ˜$ð
ð ˜ð	
ð
 ˜eð
ð ˜eð
ð ˜Tð
ð ! $ð
ð ! $ð
ð   ð
ð % eð
ð % dð
ð ˜Dð
ð �4ð
ð  ð
ð  �tð!
ð" ˜dð#
ð$ ØØ $Ø $Ø $Ø $Ø $Ø $ð3
ð 
ð 
Ðð: �IÐÐØ!Ÿš¨Ñ,Ô,¨QÔ/ˆIà*×.Ò.¨y¸$Ñ?Ô?ˆàÐÝð% )ð %ð %ð %Ø'+§y¢yÐ1D×1IÒ1IÑ1KÔ1KÑ'LÔ'LñMñô ð ð
 Ðr.   c                ó6   — |                       | j        ¦  «        S )z$Get max context size for this model.)rR  r‹   rn   s    r,   Úmax_context_sizezBaseOpenAI.max_context_sizeÁ  s   € ð ×,Ò,¨T¬_Ñ=Ô=Ð=r.   c                ó@   — |                       |¦  «        }| j        |z
  S )ao  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_token_for_prompt("Tell me a joke.")
        )r=  rT  )ro   rä   Ú
num_tokenss      r,   r  z BaseOpenAI.max_tokens_for_promptÆ  s%   € ð ×(Ò(¨Ñ0Ô0ˆ
ØÔ$ zÑ1Ð1r.   )r%   rj   ©r%   rq   ©r%   r#   )r%   r€   )r®   r   r%   r¯   ©rÅ   r#   r%   r#   ©rÅ   r	   r%   r	   ©NN©
rä   rŠ   rå   ræ   rE   rT   rU   r   r%   rç   ©
rä   rŠ   rå   ræ   rE   rb   rU   r   r%   rö   ©
rù   rq   rå   ræ   rE   rT   rU   r   r%   r   ©
rù   rq   rå   ræ   rE   rb   rU   r   r%   r   ©N)ró   r#   rù   rq   rå   ræ   r%   r  )r1   r   rù   rq   ró   r#   r$   r  r   r›   r%   r   ©r%   r+  ©r%   rŠ   ©r4   rŠ   r%   r4  )rG  rŠ   r%   r�   )r%   r�   )rä   rŠ   r%   r�   )=r½   r¾   r¿   rÀ   Úpropertyrp   Úclassmethodrx   r   r‚   r   rZ   Ú__annotations__rf   r‹   r�   r�   r’   r“   r”   r•   r–   r:   r™   rl   r{   r|   r}   rŸ   r¡   r¢   rJ   r¤   Úsetr¦   r©   rª   r«   r¬   r­   r¹   rÂ   r   rÊ   rß   rã   rõ   rø   r  r  rï   r  rî   r/  r3  rF  ÚstaticmethodrR  rT  r  Ú__classcell__©rº   s   @r,   ri   ri   ‘   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Ð(Ð(Ð(Ñ(Ø ð$ð $ð $ð $ð $ð $ð.ð .ð .ð .ð .ñ .ô .ð .ð
 €^˜ÐÑÔðð ð ñ Ôðð €^ÑÔð6ð 6ð 6ñ Ôð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 ð6ð 6ð 6ñ „\ð6ðp ð>ð >ð >ñ „Xð>ð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r.   ri   z0.0.10z0.2.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%   rq   c                ó
   — g d¢S rs   rA   rv   s    r,   rx   zOpenAI.get_lc_namespaceë  ry   r.   r#   c                ó@   •— i d| j         i¥t          ¦   «         j        ¥S )Nr‡   )r‹   r¸   rî   ©ro   rº   s    €r,   rî   zOpenAI._invocation_paramsð  s!   ø€ àK�7˜DœOÐ,ÐKµ±´Ô0JÐKÐKr.   rW  rX  )	r½   r¾   r¿   rÀ   re  rx   rd  rî   ri  rj  s   @r,   rÚ   rÚ   Ø  s}   ø€ € € € € ðð ð ð/ð /ð /ñ „[ð/ð ðLð Lð Lð Lð Lñ „XðLð Lð Lð Lð Lr.   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<   	 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_namer2   Úapi_versionrŠ   Úopenai_api_versionrš   rl   Úazure_ad_tokenzUnion[Callable[[], str], None]Úazure_ad_token_providerÚopenai_api_typeTr€   Úvalidate_base_urlr%   rq   c                ó
   — g d¢S rs   rA   rv   s    r,   rx   zAzureOpenAI.get_lc_namespace-  ry   r.   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          ¦   «         �rL|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,         |d-         |d.         |d/         d0œ} |j
        d3i |¤Žj        |d1<    |j        d3i |¤Žj        |d2<   n
|j        |d1<   |S )4rÌ   r•   r‘   rÍ   r¤   rÎ   r–   rÏ   rl   ÚAZURE_OPENAI_API_KEYrm   rt  ÚAZURE_OPENAI_ENDPOINTry  ÚAZURE_OPENAI_AD_TOKENr{   rÐ   r}   rÑ   r2   rÒ   r|   rÓ   rÔ   rx  Ú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 ú.rv  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/rz  r¡   rJ   r«   r¬   r­   )rw  rt  ru  rš   ry  rz  r�   rœ   r    rJ   r«   r¬   r­   rZ   rf   rA   )rÖ   r×   rØ   r   rK   rÙ   r   Úrstriprµ   r¶   rs  rÛ   ÚAsyncAzureOpenAIrÝ   )rw   rÅ   rK   r{   rÞ   s        r,   rß   z AzureOpenAI.validate_environment2  su  € ð �#Œ;˜Š?ˆ?ÝÐ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øÝð 	ð 	ð 	Ýð?ñô ð ð	øøøõ
 ‰>Œ>ñ 9	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Ø#)Ð*;Ô#<Ø!'¨Ô!8Ø% mÔ4ðð ˆMð  2˜vÔ1ÐBÐB°MÐBÐBÔNˆF�8ÑØ%< VÔ%<ð &ð &Øð&ð &äð �>Ñ"Ð"ð
  &Ô0ˆF�8Ñàˆs   Å1E6 Å6Fr+  c                ó@   •— i d| j         i¥t          ¦   «         j        ¥S )Nrv  )rv  r¸   r/  rq  s    €r,   r/  zAzureOpenAI._identifying_params£  s,   ø€ ð
Ø  $Ô"6Ð7ð
å‰gŒgÔ)ð
ð 	
r.   r#   c                óŒ   •— t          ¦   «         r
d| j        i}n| j        | j        | j        dœ}i |¥t	          ¦   «         j        ¥S )Nr‡   )ÚengineÚapi_typerw  )r   rv  r{  rx  r¸   rî   )ro   Úopenai_paramsrº   s     €r,   rî   zAzureOpenAI._invocation_paramsª  sW   ø€ å‰>Œ>ð 	Ø$ dÔ&:Ð;ˆMˆMð Ô.Ø Ô0Ø#Ô6ðð ˆMð
 ?�-Ð>¥5¡7¤7Ô#=Ð>Ð>r.   c                ó   — dS )r2  r„  rA   rn   s    r,   r3  zAzureOpenAI._llm_type¶  s	   € ð ˆwr.   c                ó    — | j         | j        dœS )N©r{  rx  r�  rn   s    r,   r   zAzureOpenAI.lc_attributes»  s   € ð  $Ô3Ø"&Ô"9ð
ð 
ð 	
r.   rW  rZ  ra  rX  rb  )r½   r¾   r¿   rÀ   rt  rf  r   rv  rx  rl   ry  rz  r{  r|  re  rx   r   rß   rd  r/  rî   r3  r   ri  rj  s   @r,   rs  rs  õ  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ðð €OÐÐÐÑØ+Ø"ÐÐ"Ð"Ð"Ñ"ðð ð/ð /ð /ñ „[ð/ð €^ÑÔðnð nð nñ Ôðnð` ð
ð 
ð 
ð 
ð 
ñ „Xð
ð ð	?ð 	?ð 	?ð 	?ð 	?ñ „Xð	?ð ðð ð ñ „Xðð ð
ð 
ð 
ñ „Xð
ð 
ð 
ð 
ð 
r.   rs  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¬"¦  «        dAd%„¦   «         Z e¦   «         dBd'„¦   «         ZedCd(„¦   «         Z	 dDdEd.„Z	 	 dFdGd4„Z	 	 dFdHd7„Z	 	 dFdId9„Z	 	 dFdJd:„ZedKd<„¦   «         ZedLd=„¦   «         Z dMˆ fd@„Z!ˆ xZ"S )Nr·   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   rZ   rf   r±   rŠ   r‹   r—   r#   r™   rš   rˆ   r›   rl   rœ   r{   r}   é   r�   rJ   r   Úprefix_messagesFr€   r¤   r¥   r¦   r§   r¨   r©   rÃ   rÅ   r%   c                ó  — d„ | j                              ¦   «         D ¦   «         }|                     di ¦  «        }t          |¦  «        D ]5}||vr/||v rt	          d|› d�¦  «        ‚|                     |¦  «        ||<   Œ6||d<   |S )rÇ   c                ó   — h | ]	}|j         ’Œ
S rA   )r‰   )r  Úfields     r,   ú	<setcomp>z)OpenAIChat.build_extra.<locals>.<setcomp>ö  s   € Ð#UÐ#UÐ#U°E E¤KÐ#UÐ#UÐ#Ur.   r™   zFound z supplied twice.)Ú
__fields__rÅ   r;   ÚlistrÖ   Úpop)rw   rÅ   rÈ   rÉ   Ú
field_names        r,   rÊ   zOpenAIChat.build_extraó  s¦   € ð $VÐ#U¸S¼^×=RÒ=RÑ=TÔ=TÐ#UÑ#UÔ#UÐ à—
’
˜>¨2Ñ.Ô.ˆÝ˜v™,œ,ð 	;ð 	;ˆJØÐ!9Ð9Ð9Ø Ð&Ð&Ý$Ð%J¨jÐ%JÐ%JÐ%JÑKÔKÐKØ$*§J¢J¨zÑ$:Ô$:��jÑ!øØ!&ˆˆ~ÑØˆr.   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Ì   rl   rm   r{   rÐ   r2   rÒ   r}   rÑ   r|   rÔ   r   Nr%  rÕ   rZ   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   rK   rš   r$  r�   r)  rÙ   ÚChatCompletionÚAttributeErrorrÖ   rµ   r¶   )rw   rÅ   rl   r{   r}   r|   rK   s          r,   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™   rn   s    r,   rã   zOpenAIChat._default_params4  s   € ð Ô Ð r.   rù   rq   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;   )ro   rù   rå   Úmessagesró   s        r,   Ú_get_chat_paramszOpenAIChat._get_chat_params9  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Ò)Ð)à�|Ð$Ø˜ÐÐr.   rä   rE   rT   rU   rç   c              +  ót  K  — |                       |g|¦  «        \  }}i |¥|¥ddi¥}t          | f||dœ|¤ŽD ]€}t          |t          ¦  «        s|                     ¦   «         }|d         d         d                              dd¦  «        }t          |¬	¦  «        }	|	V — |r|                     ||	¬
¦  «         Œ�d S ©Nrê   T©r¤  rE   r1   r   Údeltar£  r2   r3   )rì   )r¥  ra   rð   r:   r;   r   rñ   ©
ro   rä   rå   rE   rU   r¤  ró   rô   Útokenrì   s
             r,   rõ   zOpenAIChat._streamK  s  è è € ð  ×0Ò0°&°¸4Ñ@Ô@Ñˆ�&Ø5�FÐ5˜fÐ5 h°Ð5Ð5ˆÝ0Øð
Ø#°ð
ð 
Ø@Fð
ð 
ð 		Að 		AˆKõ ˜k­4Ñ0Ô0ð 1Ø)×.Ò.Ñ0Ô0�Ø 	Ô*¨1Ô-¨gÔ6×:Ò:¸9ÀbÑIÔIˆEÝ#¨Ð/Ñ/Ô/ˆEØˆKˆKˆKØð AØ×,Ò,¨U¸%Ð,Ñ@Ô@Ð@øð		Að 		Ar.   rb   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          |¬	¦  «        }	|	W V — |r|                     ||	¬
¦  «        ƒ d {V —† Œ�6 d S r§  )r¥  rg   rð   r:   r;   r   rñ   rª  s
             r,   rø   zOpenAIChat._astream_  sV  è è € ð  ×0Ò0°&°¸4Ñ@Ô@Ñˆ�&Ø5�FÐ5˜fÐ5 h°Ð5Ð5ˆÝ'=Øð(
Ø#°ð(
ð (
Ø@Fð(
ð (
ð "
ð "
ð "
ð "
ð "
ð "
ð 		Gð 		Gð 		Gð 		Gð 		Gð 		Gð 		G�+õ ˜k­4Ñ0Ô0ð 1Ø)×.Ò.Ñ0Ô0�Ø 	Ô*¨1Ô-¨gÔ6×:Ò:¸9ÀbÑIÔIˆEÝ#¨Ð/Ñ/Ô/ˆEØˆKˆKˆKˆKØð GØ!×2Ò2°5ÀÐ2ÑFÔFÐFÐFÐFÐFÐFÐFÐFøð"
ð "
ð "
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  r1   Úmessager£  r3   r  )	r¤   rõ   r   r¥  ra   rð   r:   r‹   r   ©ro   rù   rå   rE   rU   r
  rì   r¤  ró   Úfull_responser  s              r,   r  zOpenAIChat._generates  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ðð "ð	
ñ 
ô 
ð 	
r.   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¥  rg   rð   r:   r‹   r   r°  s              r,   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.  rn   s    r,   r/  zOpenAIChat._identifying_params¹  r0  r.   c                ó   — dS )r2  zopenai-chatrA   rn   s    r,   r3  zOpenAIChat._llm_type¾  s	   € ð ˆ}r.   r4   r4  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 )r6  r‘   r7  r   Nr8  r:  )r;  r<  r¸   rF  r>  rÙ   r?  r‹   rD  r¦   r©   )ro   r4   r>  rE  rº   s       €r,   rF  zOpenAIChat.get_token_idsÃ  s´   ø€ õ Ô˜AÔ Ò"Ð"Ý‘7”7×(Ò(¨Ñ.Ô.Ð.ð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	ÝðAñô ð ð	øøøð ×)Ò)¨$¬/Ñ:Ô:ˆØ�zŠzØØ Ô0Ø#Ô6ð ñ 
ô 
ð 	
s	   º? ¿ArY  rZ  rX  r`  )rù   rq   rå   ræ   r%   r   r[  r\  r]  r^  r_  ra  rb  rc  )#r½   r¾   r¿   rÀ   r   rZ   rf  rf   r‹   r:   r™   rl   r{   r}   rJ   r™  r“  r¤   rg  r¦   r©   r   rÊ   rß   rd  rã   r¥  rõ   rø   r  r  r/  r3  rF  ri  rj  s   @r,   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ñ Ôð0ðd ð!ð !ð !ñ „Xð!ð
 ?Cð ð  ð  ð  ð  ð* %)Ø:>ð	Að Að Að Að Að. %)Ø?Cð	Gð Gð Gð Gð Gð. %)Ø:>ð	!
ð !
ð !
ð !
ð !
ðL %)Ø?Cð	!
ð !
ð !
ð !
ð !
ðF ðKð Kð Kñ „XðKð ðð ð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r.   r·   )r    r!   r"   r#   r$   r#   r%   r&   )r/   r#   r%   r   )r"   r#   r/   r#   r%   r&   rX  r`  )rC   rD   rE   rF   r%   rG   )rC   rD   rE   rT   rU   r   r%   r   )rC   rD   rE   rb   rU   r   r%   r   )9Ú
__future__r   Úloggingr×   r;  rµ   Útypingr   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.pydantic_v1r   r   Úlangchain_core.utilsr   r   Úlangchain_core.utils.utilsr   Ú langchain_community.utils.openair   Ú	getLoggerr½   rA  r-   r<   r>   rB   rS   ra   rg   ri   rÚ   rs  r·   rA   r.   r,   ú<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Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ 9Ð 9Ð 9Ð 9Ð 9Ð 9à 9Ð 9Ð 9Ð 9Ð 9Ð 9à	ˆÔ	˜8Ñ	$Ô	$€ð	9ð 	9ð 	9ð 	9ðð ð ð ðSð Sð Sð Sð	ð 	ð 	ð 	ð  	ð	ð ð ð ð ð, 7;ð,ð ,ð ,ð ,ð ,ð( <@ð2ð 2ð 2ð 2ð 2ð&D	2ð D	2ð D	2ð D	2ð D	2�ñ D	2ô D	2ð D	2ðN €Ø
˜GÐ8Qðñ ô ðLð Lð Lð Lð LˆZñ Lô Lñô ðLð4 €Ø
˜GÐ8Vðñ ô ðH
ð H
ð H
ð H
ð H
�*ñ H
ô H
ñô ðH
ðV €Ø
ØØ4ðñ ô ð
N
ð N
ð N
ð N
ð N
�ñ N
ô N
ñô ð
N
ð N
ð N
r.   