Ë
    ´Œjx  ã                  óL  — d dl mZ d dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZmZmZ d dlZd dlZd dlmZmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZmZ d d
lm Z m!Z!m"Z"m#Z# d dl$m%Z%  ejL                  e'«      Z(	 	 	 	 	 	 	 	 dd„Z)	 	 	 	 dd„Z* G d„ de«      Z+ G d„ de+«      Z,y)é    )ÚannotationsN)ÚAsyncIteratorÚ
CollectionÚIteratorÚMapping)ÚAnyÚLiteralÚOptionalÚUnion)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLLM)Ú
GenerationÚGenerationChunkÚ	LLMResult)Úget_pydantic_field_names)Ú_build_model_kwargsÚfrom_envÚsecret_from_env)Ú
ConfigDictÚFieldÚ	SecretStrÚmodel_validator)ÚSelfc                ó€   — | j                  |d   «      }|D ]%  }||vr|d   |   ||<   Œ||xx   |d   |   z  cc<   Œ' y)zUpdate token usage.ÚusageN)Úintersection)ÚkeysÚresponseÚtoken_usageÚ_keys_to_useÚ_keys        úd/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_openai/llms/base.pyÚ_update_token_usager$      sY   € ð ×$Ñ$ X¨gÑ%6Ó7€LÛˆØ�{Ñ"Ø (¨Ñ 1°$Ñ 7ˆK˜Òà˜Ó ¨'Ñ!2°4Ñ!8Ñ8Ôñ	 ó    c           
     óÆ   — | d   st        d¬«      S t        | d   d   d   xs dt        | d   d   j                  dd«      | d   d   j                  dd«      ¬	«      ¬
«      S )z0Convert a stream response to a generation chunk.ÚchoicesÚ )Útextr   r)   Úfinish_reasonNÚlogprobs©r*   r+   ©r)   Úgeneration_info)r   ÚdictÚget)Ústream_responses    r#   Ú$_stream_response_to_generation_chunkr2   $   sw   € ð ˜9Ò%Ü BÔ'Ð'ÜØ˜YÑ'¨Ñ*¨6Ñ2Ò8°bÜØ)¨)Ñ4°QÑ7×;Ñ;¸OÈTÓRØ$ YÑ/°Ñ2×6Ñ6°zÀ4ÓHô
ôð r%   c                  ód  ‡ — e Zd ZU d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 edd¬«      ¬ «      Zd!ed"<   	  ed# ed$d¬«      ¬ «      Zd%ed&<   	  ed' ed(d)gd¬«      ¬ «      Zd%ed*<   	  e ed+d¬«      ¬«      Zd%ed,<   d-Zded.<   	  edd/¬
«      Zd0ed1<   	 dZd2ed3<   	 d4Zded5<   	 dZd6ed7<   	 dZd6ed8<   	 d9Zd:ed;<   	  e«       Z d<ed=<   	 d>Z!d?ed@<   	 dZ"d%edA<   	 dZ#dBedC<   dZ$dDedE<   dZ%dFedG<   	 dZ&dFedH<   	 dZ'dIedJ<   	  e(d¬K«      Z) e*dL¬M«      e+d`dN„«       «       Z, e*dO¬M«      dadP„«       Z-e.dbdQ„«       Z/	 	 dc	 	 	 	 	 	 	 	 	 dddR„Z0	 	 dc	 	 	 	 	 	 	 	 	 dedS„Z1	 	 dc	 	 	 	 	 	 	 	 	 dfdT„Z2	 	 dc	 	 	 	 	 	 	 	 	 dgdU„Z3	 dh	 	 	 	 	 	 	 didV„Z4ddWœ	 	 	 	 	 	 	 	 	 	 	 djdX„Z5e.dbdY„«       Z6e.dkdZ„«       Z7e.dld[„«       Z8dmˆ fd\„Z9e:dnd]„«       Z;e.dod^„«       Z<dpd_„Z=ˆ xZ>S )qÚ
BaseOpenAIu¤  Base OpenAI large language model class.

    Setup:
        Install ``langchain-openai`` and set environment variable ``OPENAI_API_KEY``.

        .. code-block:: bash

            pip install -U langchain-openai
            export OPENAI_API_KEY="your-api-key"

    Key init args â€” completion params:
        model_name: str
            Name of OpenAI model to use.
        temperature: float
            Sampling temperature.
        max_tokens: int
            Max number of tokens to generate.
        top_p: float
            Total probability mass of tokens to consider at each step.
        frequency_penalty: float
            Penalizes repeated tokens according to frequency.
        presence_penalty: float
            Penalizes repeated tokens.
        n: int
            How many completions to generate for each prompt.
        best_of: int
            Generates best_of completions server-side and returns the "best".
        logit_bias: Optional[dict[str, float]]
            Adjust the probability of specific tokens being generated.
        seed: Optional[int]
            Seed for generation.
        logprobs: Optional[int]
            Include the log probabilities on the logprobs most likely output tokens.
        streaming: bool
            Whether to stream the results or not.

    Key init args â€” client params:
        openai_api_key: Optional[SecretStr]
            OpenAI API key. If not passed in will be read from env var
            ``OPENAI_API_KEY``.
        openai_api_base: Optional[str]
            Base URL path for API requests, leave blank if not using a proxy or
            service emulator.
        openai_organization: Optional[str]
            OpenAI organization ID. If not passed in will be read from env
            var ``OPENAI_ORG_ID``.
        request_timeout: Union[float, tuple[float, float], Any, None]
            Timeout for requests to OpenAI completion API.
        max_retries: int
            Maximum number of retries to make when generating.
        batch_size: int
            Batch size to use when passing multiple documents to generate.

    See full list of supported init args and their descriptions in the params section.

    Instantiate:
        .. code-block:: python

            from langchain_openai.llms.base import BaseOpenAI

            llm = BaseOpenAI(
                model_name="gpt-3.5-turbo-instruct",
                temperature=0.7,
                max_tokens=256,
                top_p=1,
                frequency_penalty=0,
                presence_penalty=0,
                # openai_api_key="...",
                # openai_api_base="...",
                # openai_organization="...",
                # other params...
            )

    Invoke:
        .. code-block:: python

            input_text = "The meaning of life is "
            response = llm.invoke(input_text)
            print(response)

        .. code-block:: none

            "a philosophical question that has been debated by thinkers and
            scholars for centuries."

    Stream:
        .. code-block:: python

            for chunk in llm.stream(input_text):
                print(chunk, end="")

        .. code-block:: none

            a philosophical question that has been debated by thinkers and
            scholars for centuries.

    Async:
        .. code-block:: python

            response = await llm.ainvoke(input_text)

            # stream:
            # async for chunk in llm.astream(input_text):
            #     print(chunk, end="")

            # batch:
            # await llm.abatch([input_text])

        .. code-block:: none

            "a philosophical question that has been debated by thinkers and
            scholars for centuries."

    NT)ÚdefaultÚexcluder   ÚclientÚasync_clientúgpt-3.5-turbo-instructÚmodel)r5   ÚaliasÚstrÚ
model_namegffffffæ?ÚfloatÚtemperatureé   ÚintÚ
max_tokensé   Útop_pr   Úfrequency_penaltyÚpresence_penaltyÚnÚbest_of)Údefault_factoryúdict[str, Any]Úmodel_kwargsÚapi_keyÚOPENAI_API_KEY)r5   )r;   rI   zOptional[SecretStr]Úopenai_api_keyÚbase_urlÚOPENAI_API_BASEúOptional[str]Úopenai_api_baseÚorganizationÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONÚopenai_organizationÚOPENAI_PROXYÚopenai_proxyé   Ú
batch_sizeÚtimeoutz,Union[float, tuple[float, float], Any, None]Úrequest_timeoutzOptional[dict[str, float]]Ú
logit_biasé   Úmax_retrieszOptional[int]Úseedr+   FÚboolÚ	streamingzUnion[Literal['all'], set[str]]Úallowed_specialÚallz&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Úhttp_async_clientzOptional[Mapping[str, Any]]Ú
extra_body)Úpopulate_by_nameÚbefore)Úmodec                ó4   — t        | «      }t        ||«      }|S )z>Build extra kwargs from additional params that were passed in.)r   r   )ÚclsÚvaluesÚall_required_field_namess      r#   Úbuild_extrazBaseOpenAI.build_extra  s!   € ô $<¸CÓ#@Ð Ü$ VÐ-EÓFˆØˆr%   Úafterc                óª  — | j                   dk  rt        d«      ‚| j                  r| j                   dkD  rt        d«      ‚| j                  r| j                  dkD  rt        d«      ‚| j                  r| j                  j                  «       nd| j                  | j                  | j                  | j                  | j                  | j                  dœ}| j                  s4d| j                  i}t        j                  di |¤|¤Žj                   | _        | j"                  s4d| j$                  i}t        j&                  di |¤|¤Žj                   | _        | S )	z?Validate that api key and python package exists in environment.rC   zn must be at least 1.z!Cannot stream results when n > 1.z'Cannot stream results when best_of > 1.N)rL   rS   rO   r[   r_   rg   rh   ri   © )rG   Ú
ValueErrorrb   rH   rN   Úget_secret_valuerV   rR   r\   r_   rg   rh   r7   ri   ÚopenaiÚOpenAIÚcompletionsr8   rj   ÚAsyncOpenAI)ÚselfÚclient_paramsÚsync_specificÚasync_specifics       r#   Úvalidate_environmentzBaseOpenAI.validate_environment  s6  € ð �6‰6�AŠ:ÜÐ4Ó5Ð5Ø�>Š>˜dŸf™f qšjÜÐ@ÓAÐAØ�>Š>˜dŸl™l¨QÒ.ÜÐFÓGÐGð ;?×:MÒ:M�×#Ñ#×4Ñ4Ô6ÐSWà ×4Ñ4Ø×,Ñ,Ø×+Ñ+Ø×+Ñ+Ø#×3Ñ3Ø!×/Ñ/ñ

ˆð �{Š{Ø*¨D×,<Ñ,<Ð=ˆMÜ Ÿ-™-ÑI¨-ÐI¸=ÑI×UÑUˆDŒKØ× Ò Ø+¨T×-CÑ-CÐDˆNÜ &× 2Ñ 2ñ !Øð!à ñ!÷ ‰kð Ôð
 ˆr%   c                ó   — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  dœ}| j                  �| j                  |d<   | j                  �| j                  |d<   | j                  �| j                  |d<   | j                  dkD  r| j                  |d<   i |¥| j                  ¥S )z2Get the default parameters for calling OpenAI API.)r?   rD   rE   rF   rG   r`   r+   r]   rB   rk   rC   rH   )r?   rD   rE   rF   rG   r`   r+   r]   rB   rk   rH   rK   )r}   Únormal_paramss     r#   Ú_default_paramszBaseOpenAI._default_params,  s¾   € ð  ×+Ñ+Ø—Z‘ZØ!%×!7Ñ!7Ø $× 5Ñ 5Ø—‘Ø—I‘IØŸ™ñ)
ˆð �?‰?Ð&Ø*.¯/©/ˆM˜,Ñ'à�?‰?Ð&Ø*.¯/©/ˆM˜,Ñ'à�?‰?Ð&Ø*.¯/©/ˆM˜,Ñ'ð �<‰<˜!ÒØ'+§|¡|ˆM˜)Ñ$à5�-Ð5 4×#4Ñ#4Ð5Ð5r%   c              +  óŒ  K  — i | j                   ¥|¥ddi¥}| j                  ||g|«        | j                  j                  dd|i|¤ŽD ]w  }t	        |t
        «      s|j                  «       }t        |«      }|rD|j                  |j                  || j                  |j                  r|j                  d   nd ¬«       |–— Œy y ­w©NÚstreamTÚpromptr+   )ÚchunkÚverboser+   rv   )Ú_invocation_paramsÚget_sub_promptsr7   ÚcreateÚ
isinstancer/   Ú
model_dumpr2   Úon_llm_new_tokenr)   rŠ   r.   ©r}   rˆ   ÚstopÚrun_managerÚkwargsÚparamsÚstream_respr‰   s           r#   Ú_streamzBaseOpenAI._streamI  sË   è ø€ ð G�D×+Ñ+ÐF¨vÐF°xÀÑFˆØ×Ñ˜V f X¨tÔ4Ø-˜4Ÿ;™;×-Ñ-ÑF°VÐF¸vÔFˆKÜ˜k¬4Ô0Ø)×4Ñ4Ó6�Ü8¸ÓEˆEáØ×,Ñ,Ø—J‘JØØ ŸL™Lð !×0Ò0ð ×-Ñ-¨jÒ9à!ð -ô 	ð ‹Kñ! Gùs   ‚CCc               óÆ  K  — i | j                   ¥|¥ddi¥}| j                  ||g|«        | j                  j                  dd|i|¤Žƒ d {  –—† 2 3 d {  –—† }t	        |t
        «      s|j                  «       }t        |«      }|rL|j                  |j                  || j                  |j                  r|j                  d   nd ¬«      ƒ d {  –—†  |­–— Œˆ7 ŒŒ7 Œ…7 Œ6 y ­wr†   )r‹   rŒ   r8   r�   rŽ   r/   r�   r2   r�   r)   rŠ   r.   r‘   s           r#   Ú_astreamzBaseOpenAI._astreamd  s  è ø€ ð G�D×+Ñ+ÐF¨vÐF°xÀÑFˆØ×Ñ˜V f X¨tÔ4Ø'? t×'8Ñ'8×'?Ñ'?ñ (
Øð(
Ø#ñ(
÷ "
ð "
÷ 	�+ô ˜k¬4Ô0Ø)×4Ñ4Ó6�Ü8¸ÓEˆEáØ!×2Ñ2Ø—J‘JØØ ŸL™Lð !×0Ò0ð ×-Ñ-¨jÒ9à!ð 3ó 	÷ 	ð 	ð ŒKð%"
øð 	øð	øñ"
ùsI   ‚A
C!ÁCÁC!ÁCÁCÁCÁA5C!ÃCÃC!ÃCÃC!ÃC!c                ón  — | j                   }i |¥|¥}| j                  |||«      }g }i }h d£}	d}
|D �]k  }| j                  r½t        |«      dkD  rt	        d«      ‚d} | j
                  |d   ||fi |¤ŽD ]  }|€|}Œ||z  }Œ |€t	        d«      ‚|j                  |j                  |j                  r|j                  j                  d«      nd|j                  r|j                  j                  d«      ndd	œ«       ŒÍ | j                  j                  dd
|i|¤Ž}t        |t        «      s|j                  «       }|j                  d«      rt	        |j                  d«      «      ‚|j                  |d   «       t!        |	||«       |
r�Œ[|j                  d«      }
�Œn | j#                  |||||
¬«      S )au  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_tokensNrC   ú,Cannot stream results with multiple prompts.r   ú$Generation is empty after streaming.r*   r+   ©r)   r*   r+   rˆ   Úerrorr'   Úsystem_fingerprint©r¢   rv   )r‹   rŒ   rb   Úlenrw   r—   Úappendr)   r.   r0   r7   r�   rŽ   r/   r�   Úextendr$   Úcreate_llm_result©r}   Úpromptsr’   r“   r”   r•   Úsub_promptsr'   r    Ú_keysr¢   Ú_promptsÚ
generationr‰   r   s                  r#   Ú	_generatezBaseOpenAI._generate�  sØ  € ð. ×(Ñ(ˆØ%�FÐ%˜fÐ%ˆØ×*Ñ*¨6°7¸DÓAˆØˆØ&(ˆò GˆØ,0ÐÜ#ˆHØ�~Š~Ü�x“= 1Ò$Ü$Ð%SÓTÐTà8<�
Ø)˜TŸ\™\¨(°1©+°t¸[ÑSÈFÔS�EØ!Ð)Ø%*™
à" eÑ+™
ð	 Tð
 Ð%Ü$Ð%KÓLÐLØ—‘à *§¡ð  *×9Ò9ð '×6Ñ6×:Ñ:¸?ÔKà!%ð  *×9Ò9ð '×6Ñ6×:Ñ:¸:ÔFà!%ñõð  .˜4Ÿ;™;×-Ñ-ÑH°XÐHÀÑH�Ü! (¬DÔ1ð  (×2Ñ2Ó4�Hð —<‘< Ô(Ü$ X§\¡\°'Ó%:Ó;Ð;à—‘˜x¨	Ñ2Ô3Ü# E¨8°[ÔAÛ)Ø)1¯©Ð6JÓ)KÒ&ð[ $ð\ ×%Ñ%Ø�W˜f kÐFXð &ó 
ð 	
r%   c              ‹  ó  K  — | j                   }i |¥|¥}| j                  |||«      }g }i }h d£}	d}
|D ]¼  }| j                  rGt        |«      dkD  rt	        d«      ‚d} | j
                  |d   ||fi |¤Ž2 3 d{  –—† }|€|}Œ||z  }Œ | j                  j                  dd
|i|¤Žƒ d{  –—† }t        |t        «      s|j                  «       }|j                  |d   «       t!        |	||«       Œ¾ | j#                  |||||
¬«      S 7 ŒŽ6 |€t	        d«      ‚|j                  |j                  |j                  r|j                  j                  d«      nd|j                  r|j                  j                  d«      ndd	œ«       �ŒT7 ŒÜ­w)z:Call out to OpenAI's endpoint async with k unique prompts.>   r›   rœ   r�   NrC   rž   r   rŸ   r*   r+   r    rˆ   r'   r£   rv   )r‹   rŒ   rb   r¤   rw   r™   r¥   r)   r.   r0   r8   r�   rŽ   r/   r�   r¦   r$   r§   r¨   s                  r#   Ú
_ageneratezBaseOpenAI._agenerateÓ  sÂ  è ø€ ð ×(Ñ(ˆØ%�FÐ%˜fÐ%ˆØ×*Ñ*¨6°7¸DÓAˆØˆØ&(ˆò GˆØ,0ÐÛ#ˆHØ�~Š~Ü�x“= 1Ò$Ü$Ð%SÓTÐTà8<�
Ø#0 4§=¡=Ø˜Q‘K  {ñ$Ø6<ò$÷ ,˜%ð "Ð)Ø%*™
à" eÑ+™
ð& ": ×!2Ñ!2×!9Ñ!9Ñ!TÀÐ!TÈVÑ!T×T�Ü! (¬DÔ1Ø'×2Ñ2Ó4�HØ—‘˜x¨	Ñ2Ô3Ü# E¨8°[ÕAðG $ðH ×%Ñ%Ø�W˜f kÐFXð &ó 
ð 	
ð=,øð $ð Ð%Ü$Ð%KÓLÐLØ—‘à *§¡ð  *×9Ò9ð '×6Ñ6×:Ñ:¸?ÔKà!%ð  *×9Ò9ð '×6Ñ6×:Ñ:¸:ÔFà!%ñöð  Uús8   ‚A4F
Á6DÁ:D	Á;DÁ>-F
Â+FÂ,AF
Ä	DÄA>F
c                ó  — |�||d<   |d   dk(  r0t        |«      dk7  rt        d«      ‚| j                  |d   «      |d<   t        dt        |«      | j                  «      D �cg c]  }|||| j                  z    ‘Œ }}|S c c}w )z!Get the sub prompts for llm call.r’   rB   éÿÿÿÿrC   z7max_tokens set to -1 not supported for multiple inputs.r   )r¤   rw   Úmax_tokens_for_promptÚrangerZ   )r}   r•   r©   r’   Úirª   s         r#   rŒ   zBaseOpenAI.get_sub_prompts  s§   € ð ÐØ!ˆF�6‰NØ�,Ñ 2Ò%Ü�7‹|˜qÒ Ü ØMóð ð $(×#=Ñ#=¸gÀa¹jÓ#IˆF�<Ñ ô ˜1œc '›l¨D¯O©OÔ<ó
á<�ð �A˜˜DŸO™OÑ+Ò,Ø<ð 	ð 
ð Ðùò	
s   Á"A?r£   c               ó|  — g }|j                  d| j                  «      }t        |«      D ]i  \  }}	|||z  |dz   |z   }
|j                  |
D �cg c];  }t	        |d   t        |j                  d«      |j                  d«      ¬«      ¬«      ‘Œ= c}«       Œk || j                  dœ}|r||d	<   t        ||¬
«      S c c}w )z2Create the LLMResult from the choices and prompts.rG   rC   r)   r*   r+   r,   r-   )r    r=   r¢   )ÚgenerationsÚ
llm_output)r0   rG   Ú	enumerater¥   r   r/   r=   r   )r}   r'   r©   r•   r    r¢   r·   rG   rµ   Ú_Úsub_choicesÚchoicer¸   s                r#   r§   zBaseOpenAI.create_llm_result!  sÓ   € ð ˆØ�J‰J�s˜DŸF™FÓ#ˆÜ˜gÖ&‰DˆAˆqØ! ! a¡%¨1¨q©5°A©+Ð6ˆKØ×Ññ #.ó	ñ #.˜ô Ø# F™^Ü(,Ø*0¯*©*°_Ó*EØ%+§Z¡Z°
Ó%;ô)öð #.ñ	õð 'ð &1ÀÇÁÑPˆ
ÙØ/AˆJÐ+Ñ,Ü [¸ZÔHÐHùò	s   ÁA B9
c                ó   — | j                   S )z,Get the parameters used to invoke the model.)r„   ©r}   s    r#   r‹   zBaseOpenAI._invocation_params@  s   € ð ×#Ñ#Ð#r%   c                ó:   — i d| j                   i¥| j                  ¥S )zGet the identifying parameters.r=   )r=   r„   r¾   s    r#   Ú_identifying_paramszBaseOpenAI._identifying_paramsE  s$   € ð K�< §¡Ð1ÐJ°T×5IÑ5IÐJÐJr%   c                 ó   — y)zReturn type of llm.ry   rv   r¾   s    r#   Ú	_llm_typezBaseOpenAI._llm_typeJ  s   € ð r%   c                ó€  •— | j                   �| j                  |«      S t        j                  d   dk  rt        ‰| �  |«      S | j
                  xs | j                  }	 t        j                  |«      }|j                  || j                  | j                  ¬«      S # t        $ r t        j                  d«      }Y ŒHw xY w)z-Get the token IDs using the tiktoken package.rC   é   Úcl100k_base)rc   re   )Úcustom_get_token_idsÚsysÚversion_infoÚsuperÚget_num_tokensrf   r=   ÚtiktokenÚencoding_for_modelÚKeyErrorÚget_encodingÚencoderc   re   )r}   r)   r=   ÚencÚ	__class__s       €r#   Úget_token_idszBaseOpenAI.get_token_idsO  sº   ø€ à×$Ñ$Ð0Ø×,Ñ,¨TÓ2Ð2ä×Ñ˜AÑ Ò"Ü‘7Ñ)¨$Ó/Ð/à×-Ñ-Ò@°·±ˆ
ð	7Ü×-Ñ-¨jÓ9ˆCð �z‰zØØ ×0Ñ0Ø#×6Ñ6ð ó 
ð 	
øô ò 	7Ü×'Ñ'¨Ó6ŠCð	7ús   ÁB ÂB=Â<B=c                óB  — 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œ¥}d| v r| j                  d«      d   } |j                  | d «      }|€/t        d!| › d"�d#j                  |j	                  «       «      z   «      ‚|S )$ap  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-4o-minii ô zgpt-4ozgpt-4o-2024-05-13zgpt-4i    z
gpt-4-0314z
gpt-4-0613z	gpt-4-32ki €  zgpt-4-32k-0314zgpt-4-32k-0613zgpt-3.5-turboi   zgpt-3.5-turbo-0301zgpt-3.5-turbo-0613zgpt-3.5-turbo-16ki@  zgpt-3.5-turbo-16k-0613r9   ztext-ada-001i  Úadaiø  i  iA  i   )ztext-babbage-001Ú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, )Úsplitr0   rw   Újoinr   )Ú	modelnameÚmodel_token_mappingÚcontext_sizes      r#   Úmodelname_to_contextsizez#BaseOpenAI.modelname_to_contextsizec  sr  € ð 
Ø˜7ð
à�gð
ð   ð
ð �Tð	
ð
 ˜$ð
ð ˜$ð
ð ˜ð
ð ˜eð
ð ˜eð
ð ˜Tð
ð ! $ð
ð ! $ð
ð   ð
ð % eð
ð % dð
ð  ˜Dð!
ð" �4ð#
ð$ !%ØØ"ØØØ $Ø $Ø $Ø $Ø $Ø $ò9
Ðð@ �IÑØ!Ÿ™¨Ó,¨QÑ/ˆIà*×.Ñ.¨y¸$Ó?ˆàÐÜØ! ) ð -%ð %Ø'+§y¡yÐ1D×1IÑ1IÓ1KÓ'LñMóð ð
 Ðr%   c                ó8   — | j                  | j                  «      S )z$Get max context size for this model.)rÞ   r=   r¾   s    r#   Úmax_context_sizezBaseOpenAI.max_context_size   s   € ð ×,Ñ,¨T¯_©_Ó=Ð=r%   c                óB   — | j                  |«      }| j                  |z
  S )aq  Calculate the maximum number of tokens possible to generate for a prompt.

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

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

        Example:
            .. code-block:: python

                max_tokens = openai.max_tokens_for_prompt("Tell me a joke.")

        )rÊ   rà   )r}   rˆ   Ú
num_tokenss      r#   r³   z BaseOpenAI.max_tokens_for_prompt¥  s%   € ð ×(Ñ(¨Ó0ˆ
Ø×$Ñ$ zÑ1Ð1r%   )rq   rJ   Úreturnr   )rã   r   ©rã   rJ   )NN)
rˆ   r<   r’   úOptional[list[str]]r“   ú"Optional[CallbackManagerForLLMRun]r”   r   rã   zIterator[GenerationChunk])
rˆ   r<   r’   rå   r“   ú'Optional[AsyncCallbackManagerForLLMRun]r”   r   rã   zAsyncIterator[GenerationChunk])
r©   ú	list[str]r’   rå   r“   ræ   r”   r   rã   r   )
r©   rè   r’   rå   r“   rç   r”   r   rã   r   )N)r•   rJ   r©   rè   r’   rå   rã   zlist[list[str]])r'   r   r©   rè   r•   rJ   r    zdict[str, int]r¢   rQ   rã   r   )rã   zMapping[str, Any])rã   r<   )r)   r<   rã   z	list[int])rÛ   r<   rã   rA   )rã   rA   )rˆ   r<   rã   rA   )?Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r7   Ú__annotations__r8   r=   r?   rB   rD   rE   rF   rG   rH   r/   rK   r   rN   r   rR   rV   rX   rZ   r\   r]   r_   r`   r+   rb   Úsetrc   re   rf   rg   rh   ri   rj   rk   r   Úmodel_configr   Úclassmethodrs   r�   Úpropertyr„   r—   r™   r®   r°   rŒ   r§   r‹   rÀ   rÂ   rÒ   ÚstaticmethodrÞ   rà   r³   Ú__classcell__©rÑ   s   @r#   r4   r4   3   sx  ø… ñqñf  ¨dÔ3€FˆCÓ3Ù d°DÔ9€L�#Ó9ÙÐ$<ÀGÔL€J�ÓLØØ€K�ÓØ+Ø€J�Óð(ð €Eˆ5ÓØDØ Ð�uÓ Ø;ØÐ�eÓØ$Ø€A€sƒJØ;Ø€GˆSÓØKÙ#(¸Ô#>€L�.Ó>ØVÙ*/Ø©Ð9IÐSWÔ)Xô+€NÐ'ó ð RÙ%*Ø©(Ð3DÈdÔ*Sô&€O�]ó ðá).ØÙ ØÐ3Ð4¸dô
ô*Ð˜ó ð Qá"'Ù  ¸Ô>ô#€L�-ó ð €J�ÓØHÙDIØ˜IôE€OÐAó ðà-1€JÐ*Ó1ØDØ€K�ÓØ<Ø€Dˆ-ÓØØ"€HˆmÓ"ð#à€IˆtÓØ/Ù7:³u€OÐ4Ó<Ø3ØAFÐÐ>ÓFØ7Ø)-Ð˜Ó-ðJð 7;€OÐ3Ó:Ø7;€MÐ4Ó;ð %)€KÐ!Ó(ðð +/ÐÐ'Ó.ðWà.2€JÐ+Ó2ð@ñ ¨tÔ4€Lá˜(Ô#Øòó ó $ðñ ˜'Ô"òó #ðð@ ò6ó ð6ð> %)Ø:>ð	àðð "ðð 8ð	ð
 ðð 
#óð< %)Ø?Cð	àðð "ðð =ð	ð
 ðð 
(óð@ %)Ø:>ð	P
àðP
ð "ðP
ð 8ð	P
ð
 ðP
ð 
óP
ðj %)Ø?Cð	7
àð7
ð "ð7
ð =ð	7
ð
 ð7
ð 
ó7
ðz %)ð	àðð ðð "ð	ð
 
óð8 -1ñIàðIð ðIð ð	Ið
 $ðIð *ðIð 
óIð> ò$ó ð$ð òKó ðKð òó ðõ
ð( ò:ó ð:ðx ò>ó ð>÷2r%   r4   c                  óv   ‡ — e Zd ZdZedd„«       Zedd„«       Zed	ˆ fd„«       Zed
d„«       Z	ed	d„«       Z
ˆ xZS )rz   u–  OpenAI completion model integration.

    Setup:
        Install ``langchain-openai`` and set environment variable ``OPENAI_API_KEY``.

        .. code-block:: bash

            pip install -U langchain-openai
            export OPENAI_API_KEY="your-api-key"

    Key init args â€” completion params:
        model: str
            Name of OpenAI model to use.
        temperature: float
            Sampling temperature.
        max_tokens: Optional[int]
            Max number of tokens to generate.
        logprobs: Optional[bool]
            Whether to return logprobs.
        stream_options: Dict
            Configure streaming outputs, like whether to return token usage when
            streaming (``{"include_usage": True}``).

    Key init args â€” client params:
        timeout: Union[float, Tuple[float, float], Any, None]
            Timeout for requests.
        max_retries: int
            Max number of retries.
        api_key: Optional[str]
            OpenAI API key. If not passed in will be read from env var ``OPENAI_API_KEY``.
        base_url: Optional[str]
            Base URL for API requests. Only specify if using a proxy or service
            emulator.
        organization: Optional[str]
            OpenAI organization ID. If not passed in will be read from env
            var ``OPENAI_ORG_ID``.

    See full list of supported init args and their descriptions in the params section.

    Instantiate:
        .. code-block:: python

            from langchain_openai import OpenAI

            llm = OpenAI(
                model="gpt-3.5-turbo-instruct",
                temperature=0,
                max_retries=2,
                # api_key="...",
                # base_url="...",
                # organization="...",
                # other params...
            )

    Invoke:
        .. code-block:: python

            input_text = "The meaning of life is "
            llm.invoke(input_text)

        .. code-block:: none

            "a philosophical question that has been debated by thinkers and scholars for centuries."

    Stream:
        .. code-block:: python

            for chunk in llm.stream(input_text):
                print(chunk, end="|")

        .. code-block:: none

            a| philosophical| question| that| has| been| debated| by| thinkers| and| scholars| for| centuries|.

        .. code-block:: python

            "".join(llm.stream(input_text))

        .. code-block:: none

            "a philosophical question that has been debated by thinkers and scholars for centuries."

    Async:
        .. code-block:: python

            await llm.ainvoke(input_text)

            # stream:
            # async for chunk in (await llm.astream(input_text)):
            #    print(chunk)

            # batch:
            # await llm.abatch([input_text])

        .. code-block:: none

            "a philosophical question that has been debated by thinkers and scholars for centuries."

    c                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚllmsry   rv   ©rp   s    r#   Úget_lc_namespacezOpenAI.get_lc_namespace  s
   € ò /Ð.r%   c                 ó   — y)z9Return whether this model can be serialized by LangChain.Trv   rù   s    r#   Úis_lc_serializablezOpenAI.is_lc_serializable"  s   € ð r%   c                ó8   •— i d| j                   i¥t        ‰| �  ¥S )Nr:   )r=   rÉ   r‹   )r}   rÑ   s    €r#   r‹   zOpenAI._invocation_params'  s!   ø€ àK�7˜DŸO™OÐ,ÐK´±Ñ0JÐKÐKr%   c                ó
   — ddiS )NrN   rM   rv   r¾   s    r#   Ú
lc_secretszOpenAI.lc_secrets+  s   € à Ð"2Ð3Ð3r%   c                ó¬   — i }| j                   r| j                   |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   |S )NrR   rV   rX   )rR   rV   rX   )r}   Ú
attributess     r#   Úlc_attributeszOpenAI.lc_attributes/  sZ   € à%'ˆ
Ø×ÒØ,0×,@Ñ,@ˆJÐ(Ñ)à×#Ò#Ø04×0HÑ0HˆJÐ,Ñ-à×ÒØ)-×):Ñ):ˆJ�~Ñ&àÐr%   )rã   rè   )rã   ra   rä   )rã   zdict[str, str])ré   rê   rë   rì   rð   rú   rü   rñ   r‹   rÿ   r  ró   rô   s   @r#   rz   rz   ¸  sp   ø„ ñbðH ò/ó ð/ð òó ðð ôLó ðLð ò4ó ð4ð òó ôr%   rz   )r   zset[str]r   rJ   r    rJ   rã   ÚNone)r1   rJ   rã   r   )-Ú
__future__r   ÚloggingrÇ   Úcollections.abcr   r   r   r   Útypingr   r	   r
   r   ry   rË   Úlangchain_core.callbacksr   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r   r   Úlangchain_core.utilsr   Úlangchain_core.utils.utilsr   r   r   Úpydanticr   r   r   r   Útyping_extensionsr   Ú	getLoggerré   Úloggerr$   r2   r4   rz   rv   r%   r#   Ú<module>r     s«   ðÝ "ã Û 
ß HÓ Hß 0Ó 0ã Û ÷õ 8ß IÑ IÝ 9ß UÑ Uß BÓ BÝ "à	ˆ×	Ñ	˜8Ó	$€ð	9Ø
ð	9Ø,ð	9Ø;Ið	9à	ó	9ðØ#ðàóôB
2�ô B
2ôJCˆZõ Cr%   