Ë
    ´Œj k  ã                  ó  — d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
mZmZmZ d dlZd dl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mZmZmZmZ d d	lmZ  ej@                  e!«      Z"	 	 	 	 	 	 	 	 	 	 	 	 dd
„Z# G d„ dee«      Z$y)é    )ÚannotationsN)ÚIterableÚMappingÚSequence)ÚAnyÚLiteralÚOptionalÚUnionÚcast)Ú
Embeddings)Úrun_in_executor)Úfrom_envÚget_pydantic_field_namesÚsecret_from_env)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrÚmodel_validator)ÚSelfc                ó
  — t        | «      D �cg c]  }g ‘Œ }}t        | «      D �cg c]  }g ‘Œ }}t        t        |«      «      D ]S  }|rt        ||   «      dk(  rŒ|||      j                  ||   «       |||      j                  t        ||   «      «       ŒU g }	t        | «      D ]Ä  }||   }
t        |
«      dk(  r|	j                  d «       Œ(t        |
«      dk(  r|	j                  |
d   «       ŒKt        ||   «      }t	        |
Ž D �cg c]$  }t        d„ t	        |||   «      D «       «      |z  ‘Œ& }}t        d„ |D «       «      dz  }|	j                  |D �cg c]  }||z  ‘Œ	 c}«       ŒÆ |	S c c}w c c}w c c}w c c}w )Né   r   c              3  ó,   K  — | ]  \  }}||z  –— Œ y ­w©N© )Ú.0ÚvalÚweights      új/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_openai/embeddings/base.pyÚ	<genexpr>z6_process_batched_chunked_embeddings.<locals>.<genexpr>@   s    è ø€ ð á'M™˜˜Vð ˜&•LÙ'Mùs   ‚c              3  ó&   K  — | ]	  }|d z  –— Œ y­w)é   Nr   )r   r   s     r   r    z6_process_batched_chunked_embeddings.<locals>.<genexpr>J   s   è ø€ Ð6©g s˜C �F©gùó   ‚g      à?)ÚrangeÚlenÚappendÚsumÚzip)Ú	num_textsÚtokensÚbatched_embeddingsÚindicesÚ
skip_emptyÚ_ÚresultsÚnum_tokens_in_batchÚiÚ
embeddingsÚ_resultÚtotal_weightÚ	embeddingÚaverageÚ	magnituder   s                   r   Ú#_process_batched_chunked_embeddingsr8      sÂ  € ô 5:¸)Ô4DÓ'EÑ4D¨qªÐ4D€GÐ'Eô
 9>¸iÔ8HÓ+IÑ8H°1ªBÐ8HÐÐ+Iä”3�w“<Ö ˆÙœ#Ð0°Ñ3Ó4¸Ò9ØØ�˜‘
Ñ×"Ñ"Ð#5°aÑ#8Ô9Ø˜G A™JÑ'×.Ñ.¬s°6¸!±9«~Õ>ð	 !ð /1€JÜ�9Öˆà%,¨Q¡Zˆäˆw‹<˜1Òð ×Ñ˜dÔ#Øä�‹\˜QÒà×Ñ˜g a™jÔ)Øô Ð2°1Ñ5Ó6ˆLô "% g¡óñ "/�Iô ñ ä'*¨9Ð6IÈ!Ñ6LÔ'Móó ð ó	ð
 "/ð ð ô Ñ6©gÓ6Ó6¸#Ñ=ˆIØ×Ñ¹'ÓB¹'°3˜s Y›¸'ÑBÕCðA ðD Ðùòc (Fùò
 ,Jùò<ùò Cs   Ž	E1¦	E6Ä)E;ÅF 
c                  óä  — 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
<   dZ	ded<   	 eZ
ded<    e edd¬«      d¬«      Zded<   	  ed edd¬«      ¬«      Zded<   	  e edd¬«      ¬«      Zded<    e edd¬«      ¬«      Z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'<   	 dZd(ed)<   dZd*ed+<   d,Zded-<   	 d.Zded/<   	  edd0¬1«      Zd2ed3<   	 dZded4<   dZd5ed6<   	 dZded7<   	 d8Zd5ed9<   	  ee¬«      Zd:ed;<   	 d8Zd5ed<<   	 dZ d=ed><   dZ!d?ed@<   dAZ"dedB<   	 dCZ#dedD<   	 dZ$dEedF<   	 dZ%dEedG<   	 dZ&d5edH<   	  e'dIddJ¬K«      Z( e)dL¬M«      e*dZdN„«       «       Z+ e)dO¬M«      d[dP„«       Z,e-d\dQ„«       Z.	 	 	 	 	 	 d]dR„Z/ddSœ	 	 	 	 	 	 	 	 	 d^dT„Z0ddSœ	 	 	 	 	 	 	 	 	 d^dU„Z1	 d_	 	 	 	 	 	 	 d`dV„Z2	 d_	 	 	 	 	 	 	 d`dW„Z3dadX„Z4dadY„Z5y)bÚOpenAIEmbeddingsuñ	  OpenAI embedding 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 â€” embedding params:
        model: str
            Name of OpenAI model to use.
        dimensions: Optional[int] = None
            The number of dimensions the resulting output embeddings should have.
            Only supported in ``'text-embedding-3'`` and later models.

    Key init args â€” client params:
        api_key: Optional[SecretStr] = None
            OpenAI API key.
        organization: Optional[str] = None
            OpenAI organization ID. If not passed in will be read
            from env var ``OPENAI_ORG_ID``.
        max_retries: int = 2
            Maximum number of retries to make when generating.
        request_timeout: Optional[Union[float, Tuple[float, float], Any]] = None
            Timeout for requests to OpenAI completion API

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

    Instantiate:
        .. code-block:: python

            from langchain_openai import OpenAIEmbeddings

            embed = OpenAIEmbeddings(
                model="text-embedding-3-large"
                # With the `text-embedding-3` class
                # of models, you can specify the size
                # of the embeddings you want returned.
                # dimensions=1024
            )

    Embed single text:
        .. code-block:: python

            input_text = "The meaning of life is 42"
            vector = embeddings.embed_query("hello")
            print(vector[:3])

        .. code-block:: python

            [-0.024603435769677162, -0.007543657906353474, 0.0039630369283258915]

    Embed multiple texts:
        .. code-block:: python

            vectors = embeddings.embed_documents(["hello", "goodbye"])
            # Showing only the first 3 coordinates
            print(len(vectors))
            print(vectors[0][:3])

        .. code-block:: python

            2
            [-0.024603435769677162, -0.007543657906353474, 0.0039630369283258915]

    Async:
        .. code-block:: python

            await embed.aembed_query(input_text)
            print(vector[:3])

            # multiple:
            # await embed.aembed_documents(input_texts)

        .. code-block:: python

            [-0.009100092574954033, 0.005071679595857859, -0.0029193938244134188]

    NT)ÚdefaultÚexcluder   ÚclientÚasync_clientztext-embedding-ada-002ÚstrÚmodelúOptional[int]Ú
dimensionszOptional[str]Ú
deploymentÚOPENAI_API_VERSION)r;   Úapi_version)Údefault_factoryÚaliasÚopenai_api_versionÚbase_urlÚOPENAI_API_BASE)rG   rF   Úopenai_api_baseÚOPENAI_API_TYPE)rF   Úopenai_api_typeÚOPENAI_PROXYÚopenai_proxyiÿ  ÚintÚembedding_ctx_lengthÚapi_keyÚOPENAI_API_KEYzOptional[SecretStr]Úopenai_api_keyÚorganizationÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONÚopenai_organizationz%Union[Literal['all'], set[str], None]Úallowed_specialz4Union[Literal['all'], set[str], Sequence[str], None]Údisallowed_specialiè  Ú
chunk_sizer"   Úmax_retriesÚtimeout)r;   rG   z0Optional[Union[float, tuple[float, float], Any]]Úrequest_timeoutÚheadersÚboolÚtiktoken_enabledÚtiktoken_model_nameFÚshow_progress_barúdict[str, Any]Úmodel_kwargsr-   zUnion[Mapping[str, str], None]Údefault_headersz!Union[Mapping[str, object], None]Údefault_queryé   Úretry_min_secondsé   Úretry_max_secondszUnion[Any, None]Úhttp_clientÚhttp_async_clientÚcheck_embedding_ctx_lengthÚforbidr   )ÚextraÚpopulate_by_nameÚprotected_namespacesÚbefore)Úmodec           
     ó`  — t        | «      }|j                  di «      }t        |«      D ]M  }||v rt        d|› d�«      ‚||vsŒt	        j
                  d|› d|› d|› d�«       |j                  |«      ||<   ŒO |j                  |j                  «       «      }|rt        d|› d	�«      ‚||d<   |S )
z>Build extra kwargs from additional params that were passed in.re   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r   ÚgetÚlistÚ
ValueErrorÚwarningsÚwarnÚpopÚintersectionÚkeys)ÚclsÚvaluesÚall_required_field_namesrp   Ú
field_nameÚinvalid_model_kwargss         r   Úbuild_extrazOpenAIEmbeddings.build_extra  sç   € ô $<¸CÓ#@Ð Ø—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØ˜UÑ"Ü  6¨*¨Ð5EÐ!FÓGÐGØÐ!9Ò9Ü—‘Ø! * ð .Ø�Lð !)Ø)3¨Ð4JðNôð
 %+§J¡J¨zÓ$:��jÒ!ð 'ð  8×DÑDÀUÇZÁZÃ\ÓRÐÙÜØÐ2Ð3ð 4Sð Tóð ð
 "'ˆˆ~ÑØˆó    Úafterc                ó4  — | j                   dv rt        d«      ‚| j                  r| j                  j                  «       nd| j                  | j
                  | j                  | j                  | j                  | j                  dœ}| j                  rP| j                  s| j                  r8| j                  }| j                  }| j                  }t        d|›d|›d|›�«      ‚| j                  sr| j                  r2| j                  s&	 ddl}|j!                  | j                  ¬
«      | _        d| j                  i}t#        j$                  di |¤|¤Žj&                  | _        | j(                  sr| j                  r2| j                  s&	 ddl}|j+                  | j                  ¬
«      | _        d| j                  i}t#        j,                  di |¤|¤Žj&                  | _        | S # t        $ r}t        d	«      |‚d}~ww xY w# t        $ r}t        d	«      |‚d}~ww xY w)z?Validate that api key and python package exists in environment.)ÚazureÚazure_adÚazureadzEIf you are using Azure, please use the `AzureOpenAIEmbeddings` class.N)rR   rU   rI   r]   r\   rf   rg   zwCannot specify 'openai_proxy' if one of 'http_client'/'http_async_client' is already specified. Received:
openai_proxy=z
http_client=z
http_async_client=r   zRCould not import httpx python package. Please install it with `pip install httpx`.)Úproxyrl   r   )rM   rx   rT   Úget_secret_valuerX   rK   r^   r\   rf   rg   rO   rl   rm   r=   ÚhttpxÚImportErrorÚClientÚopenaiÚOpenAIr2   r>   ÚAsyncClientÚAsyncOpenAI)	ÚselfÚclient_paramsrO   rl   rm   rŒ   ÚeÚsync_specificÚasync_specifics	            r   Úvalidate_environmentz%OpenAIEmbeddings.validate_environment!  s*  € ð ×ÑÐ#CÑCÜØWóð ð
 ;?×:MÒ:M�×#Ñ#×4Ñ4Ô6ÐSWà ×4Ñ4Ø×,Ñ,Ø×+Ñ+Ø×+Ñ+Ø#×3Ñ3Ø!×/Ñ/ñ

ˆð ×Ò $×"2Ò"2°d×6LÒ6LØ×,Ñ,ˆLØ×*Ñ*ˆKØ $× 6Ñ 6ÐÜð!à�/  K >Ð1FÐ4EÐ3GðIóð ð
 �{Š{Ø× Ò ¨×)9Ò)9ðÛ ð $)§<¡<°d×6GÑ6G <Ó#H�Ô Ø*¨D×,<Ñ,<Ð=ˆMÜ Ÿ-™-ÑI¨-ÐI¸=ÑI×TÑTˆDŒKØ× Ò Ø× Ò ¨×)?Ò)?ðÛ ð */×):Ñ):À×ARÑARÐ):Ó)S�Ô&Ø+¨T×-CÑ-CÐDˆNÜ &× 2Ñ 2ñ !Øð!à ñ!÷ ‰jð Ôð ˆøô/ #ò Ü%ðFóð ðûðûô #ò Ü%ðFóð ðûðús0   ÄG  ÆG= Ç 	G:Ç)G5Ç5G:Ç=	HÈHÈHc                óp   — d| j                   i| j                  ¥}| j                  �| j                  |d<   |S )Nr@   rB   )r@   re   rB   )r“   Úparamss     r   Ú_invocation_paramsz#OpenAIEmbeddings._invocation_paramsZ  s8   € à §¡ÐA¨t×/@Ñ/@ÐAˆØ�?‰?Ð&Ø#'§?¡?ˆF�<Ñ Øˆr„   c                ó2  — g }g }| j                   xs | j                  }| j                  s«	 ddlm} |j                  |¬«      }t        |«      D ]‚  \  }}	|j                  |	d¬«      }
t        dt        |
«      | j                  «      D ]G  }|
||| j                  z    }|j                  |«      }|j                  |«       |j                  |«       ŒI Œ„ �n	 t        j                   |«      }| j&                  | j(                  dœj+                  «       D ��ci c]
  \  }}|�||“Œ }}}t        |«      D ]°  \  }}	| j                  j-                  d	«      r|	j/                  d
d«      }	|r |j                  |	fi |¤Ž}n|j1                  |	«      }t        dt        |«      | j                  «      D ]4  }|j                  |||| j                  z    «       |j                  |«       Œ6 Œ² | j2                  r$	 ddlm}  |t        dt        |«      |«      «      }nt        dt        |«      |«      }|||fS # t
        $ r t        d«      ‚w xY w# t"        $ r t        j$                  d«      }Y �Œ~w xY wc c}}w # t
        $ r t        dt        |«      |«      }Y Œiw xY w)aí  
        Take the input `texts` and `chunk_size` and return 3 iterables as a tuple:

        We have `batches`, where batches are sets of individual texts
        we want responses from the openai api. The length of a single batch is
        `chunk_size` texts.

        Each individual text is also split into multiple texts based on the
        `embedding_ctx_length` parameter (based on number of tokens).

        This function returns a 3-tuple of the following:

        _iter: An iterable of the starting index in `tokens` for each *batch*
        tokens: A list of tokenized texts, where each text has already been split
            into sub-texts based on the `embedding_ctx_length` parameter. In the
            case of tiktoken, this is a list of token arrays. In the case of
            HuggingFace transformers, this is a list of strings.
        indices: An iterable of the same length as `tokens` that maps each token-array
            to the index of the original text in `texts`.
        r   )ÚAutoTokenizerz¡Could not import transformers python package. This is needed for OpenAIEmbeddings to work without `tiktoken`. Please install it with `pip install transformers`. )Úpretrained_model_name_or_pathF)Úadd_special_tokensÚcl100k_base)rY   rZ   Ú001Ú
Ú )Útqdm)rb   r@   ra   Útransformersr�   r�   rx   Úfrom_pretrainedÚ	enumerateÚencoder$   r%   rQ   Údecoder&   ÚtiktokenÚencoding_for_modelÚKeyErrorÚget_encodingrY   rZ   ÚitemsÚendswithÚreplaceÚencode_ordinaryrc   Ú	tqdm.autor¤   )r“   Útextsr[   r*   r,   Ú
model_namer�   Ú	tokenizerr1   ÚtextÚ	tokenizedÚjÚtoken_chunkÚ
chunk_textÚencodingÚkÚvÚencoder_kwargsÚtokenr¤   Ú_iters                        r   Ú	_tokenizezOpenAIEmbeddings._tokenizea  s¯  € ð. /1ˆØˆØ×-Ñ-Ò;°·±ˆ
ð ×$Ò$ðÝ6ð &×5Ñ5Ø.8ð 6ó ˆIô % UÖ+‘��4à'0×'7Ñ'7¸ÐQVÐ'7Ó'W�	ô ˜q¤# i£.°$×2KÑ2KÖL�AØ-6Ø˜A × 9Ñ 9Ñ9ð.�Kð
 '0×&6Ñ&6°{Ó&C�JØ—M‘M *Ô-Ø—N‘N 1Õ%ñ Mò ,ð@Ü#×6Ñ6°zÓB�ð (,×';Ñ';Ø*.×*AÑ*Añ÷ ‘%“'ðô.ñ‘D�A�qð �=ð �1‘ðð ñ .ô % UÖ+‘��4Ø—:‘:×&Ñ& uÔ-ð  Ÿ<™<¨¨cÓ2�Dá!Ø+˜HŸO™O¨DÑC°NÑC‘Eà$×4Ñ4°TÓ:�Eô ˜q¤# e£*¨d×.GÑ.GÖH�AØ—M‘M %¨¨A°×0IÑ0IÑ,IÐ"JÔKØ—N‘N 1Õ%ñ Ið ,ð" ×!Ò!ð:Ý*á"&¤u¨Q´°F³¸ZÓ'HÓ"I‘ô ˜!œS ›[¨*Ó5ˆEØ�f˜gÐ%Ð%øô ò Ü ðVóð ðûô6 ò @Ü#×0Ñ0°Ó?“ð@üó.øô< ò :Ü˜a¤ V£¨jÓ9’ð:ús5   ¬H1 ÃI	 ÄI.Ç3"I4 È1IÉ	I+É*I+É4JÊJ)r[   c          	     óØ  ‡ ‡‡— |xs ‰ j                   }i ‰ j                  ¥|¥Š‰ j                  ||«      \  }}}g }	|D ]a  }
 ‰ j                  j                  dd||
|
|z    i‰¤Ž}t        |t        «      s|j                  «       }|	j                  d„ |d   D «       «       Œc t        t        |«      ||	|‰ j                  «      }dŠdˆˆˆ fd„}|D �cg c]  }|�|n |«       ‘Œ c}S c c}w )al  
        Generate length-safe embeddings for a list of texts.

        This method handles tokenization and embedding generation, respecting the
        set embedding context length and chunk size. It supports both tiktoken
        and HuggingFace tokenizer based on the tiktoken_enabled flag.

        Args:
            texts (List[str]): A list of texts to embed.
            engine (str): The engine or model to use for embeddings.
            chunk_size (Optional[int]): The size of chunks for processing embeddings.

        Returns:
            List[List[float]]: A list of embeddings for each input text.
        Úinputc              3  ó&   K  — | ]	  }|d    –— Œ y­w©r5   Nr   ©r   Úrs     r   r    z<OpenAIEmbeddings._get_len_safe_embeddings.<locals>.<genexpr>ä  ó   è ø€ Ð%OÑ>N¸ a¨¥nÑ>Nùr#   ÚdataNc                 óž   •— ‰€I ‰j                   j                  dddi‰¤Ž} t        | t        «      s| j	                  «       } | d   d   d   Š‰S ©NrÃ   Ú rÉ   r   r5   r   )r=   ÚcreateÚ
isinstanceÚdictÚ
model_dump©Úaverage_embeddedÚ_cached_empty_embeddingÚclient_kwargsr“   s    €€€r   Úempty_embeddingzBOpenAIEmbeddings._get_len_safe_embeddings.<locals>.empty_embeddingë  s]   ø€ à&Ð.Ø#5 4§;¡;×#5Ñ#5Ñ#P¸BÐ#PÀ-Ñ#PÐ Ü!Ð"2´DÔ9Ø'7×'BÑ'BÓ'DÐ$Ø*:¸6Ñ*BÀ1Ñ*EÀkÑ*RÐ'Ø*Ð*r„   r   ©Úreturnúlist[float])r[   r›   rÁ   r=   rÍ   rÎ   rÏ   rÐ   Úextendr8   r%   r-   ©r“   r³   Úenginer[   ÚkwargsÚ_chunk_sizerÀ   r*   r,   r+   r1   Úresponser2   rÕ   r•   rÓ   rÔ   s   `              @@r   Ú_get_len_safe_embeddingsz)OpenAIEmbeddings._get_len_safe_embeddingsÃ  s  ú€ ð. !Ò3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆØ!%§¡°°{Ó!CÑˆˆv�wØ02ÐÛˆAØ)�t—{‘{×)Ñ)ñ Ø˜Q  [¡Ð1ðØ5BñˆHô ˜h¬Ô-Ø#×.Ñ.Ó0�Ø×%Ñ%Ñ%O¸hÀvÒ>NÓ%OÕOð ô 9Ü�‹J˜Ð 2°G¸T¿_¹_ó
ˆ
ð :>Ð÷	+ñ DNÓNÁ:¸a�Q�]‘©Ó(9Ñ9À:ÑNÐNùÒNs   ÃC'c          	   ‹  óP  ‡ ‡‡K  — |xs ‰ j                   }i ‰ j                  ¥|¥Št        d‰ j                  ||«      ƒ d{  –—† \  }}}g }	t	        dt        |«      |«      D ]i  }
 ‰ j                  j                  dd||
|
|z    i‰¤Žƒ d{  –—† }t        |t        «      s|j                  «       }|	j                  d„ |d   D «       «       Œk t        t        |«      ||	|‰ j                  «      }dŠdˆˆˆ fd„}|D �cg c]  }|�|n |«       ƒ d{  –—† ‘Œ c}S 7 ŒÙ7 Œ�7 Œc c}w ­w)	aŒ  
        Asynchronously generate length-safe embeddings for a list of texts.

        This method handles tokenization and asynchronous embedding generation,
        respecting the set embedding context length and chunk size. It supports both
        `tiktoken` and HuggingFace `tokenizer` based on the tiktoken_enabled flag.

        Args:
            texts (List[str]): A list of texts to embed.
            engine (str): The engine or model to use for embeddings.
            chunk_size (Optional[int]): The size of chunks for processing embeddings.

        Returns:
            List[List[float]]: A list of embeddings for each input text.
        Nr   rÃ   c              3  ó&   K  — | ]	  }|d    –— Œ y­wrÅ   r   rÆ   s     r   r    z=OpenAIEmbeddings._aget_len_safe_embeddings.<locals>.<genexpr>  rÈ   r#   rÉ   c               “  óº   •K  — ‰€Q ‰j                   j                  dddi‰¤Žƒ d {  –—† } t        | t        «      s| j	                  «       } | d   d   d   Š‰S 7 Œ1­wrË   )r>   rÍ   rÎ   rÏ   rÐ   rÑ   s    €€€r   rÕ   zCOpenAIEmbeddings._aget_len_safe_embeddings.<locals>.empty_embedding$  sw   øè ø€ à&Ð.Ø)A¨×):Ñ):×)AÑ)Añ *Øð*Ø -ñ*÷ $Ð ô "Ð"2´DÔ9Ø'7×'BÑ'BÓ'DÐ$Ø*:¸6Ñ*BÀ1Ñ*EÀkÑ*RÐ'Ø*Ð*ð$ús   ƒ$A§A¨2Ar   rÖ   )r[   r›   r   rÁ   r$   r%   r>   rÍ   rÎ   rÏ   rÐ   rÙ   r8   r-   rÚ   s   `              @@r   Ú_aget_len_safe_embeddingsz*OpenAIEmbeddings._aget_len_safe_embeddingsø  sC  úè ø€ ð0 !Ò3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆÜ'6Ø�$—.‘. %¨ó(
÷ "
Ñˆˆv�wð 13ÐÜ�qœ#˜f›+ {Ö3ˆAØ5˜T×.Ñ.×5Ñ5ñ Ø˜Q  [¡Ð1ðØ5Bñ÷ ˆHô ˜h¬Ô-Ø#×.Ñ.Ó0�Ø×%Ñ%Ñ%O¸hÀvÒ>NÓ%OÕOð 4ô 9Ü�‹J˜Ð 2°G¸T¿_¹_ó
ˆ
ð :>Ð÷		+ñ JTÓTÉÀA�Q�]‘©oÓ.?×(?Ñ?ÈÑTÐTð;"
øð
øð0 )@úÒTùsI   …<D&ÁDÁA
D&ÂDÂA1D&Ã>D!ÄD
ÄD!ÄD&ÄD&ÄD!Ä!D&c           	     ó¶  — |xs | j                   }i | j                  ¥|¥}| j                  s~g }t        dt	        |«      |«      D ]a  } | j
                  j                  dd||||z    i|¤Ž}t        |t        «      s|j                  «       }|j                  d„ |d   D «       «       Œc |S t        t        | j                  «      }	 | j                  |f|	|dœ|¤ŽS )aœ  Call out to OpenAI's embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.
            chunk_size: The chunk size of embeddings. If None, will use the chunk size
                specified by the class.
            kwargs: Additional keyword arguments to pass to the embedding API.

        Returns:
            List of embeddings, one for each text.
        r   rÃ   c              3  ó&   K  — | ]	  }|d    –— Œ y­wrÅ   r   rÆ   s     r   r    z3OpenAIEmbeddings.embed_documents.<locals>.<genexpr>I  ó   è ø€ Ð!KÑ:J°Q ! K¥.Ñ:Jùr#   rÉ   ©rÛ   r[   r   )r[   r›   rn   r$   r%   r=   rÍ   rÎ   rÏ   rÐ   rÙ   r   r?   rC   rß   ©
r“   r³   r[   rÜ   Úchunk_size_rÔ   r2   r1   rÞ   rÛ   s
             r   Úembed_documentsz OpenAIEmbeddings.embed_documents1  sô   € ð !Ò3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆØ×.Ò.Ø,.ˆJÜ˜1œc %›j¨+Ö6�Ø-˜4Ÿ;™;×-Ñ-ñ Ø  A¨¡OÐ4ðØ8Eñ�ô " (¬DÔ1Ø'×2Ñ2Ó4�HØ×!Ñ!Ñ!K¸(À6Ò:JÓ!KÕKð 7ð Ðô ”c˜4Ÿ?™?Ó+ˆØ,ˆt×,Ñ,Øð
Ø ¨Zñ
Ø;Añ
ð 	
r„   c           	   ‹  óæ  K  — |xs | j                   }i | j                  ¥|¥}| j                  s†g }t        dt	        |«      |«      D ]i  } | j
                  j                  dd||||z    i|¤Žƒ d{  –—† }t        |t        «      s|j                  «       }|j                  d„ |d   D «       «       Œk |S t        t        | j                  «      }	 | j                  |f|	|dœ|¤Žƒ d{  –—† S 7 Œ{7 Œ­w)a¢  Call out to OpenAI's embedding endpoint async for embedding search docs.

        Args:
            texts: The list of texts to embed.
            chunk_size: The chunk size of embeddings. If None, will use the chunk size
                specified by the class.
            kwargs: Additional keyword arguments to pass to the embedding API.

        Returns:
            List of embeddings, one for each text.
        r   rÃ   Nc              3  ó&   K  — | ]	  }|d    –— Œ y­wrÅ   r   rÆ   s     r   r    z4OpenAIEmbeddings.aembed_documents.<locals>.<genexpr>k  ræ   r#   rÉ   rç   r   )r[   r›   rn   r$   r%   r>   rÍ   rÎ   rÏ   rÐ   rÙ   r   r?   rC   rã   rè   s
             r   Úaembed_documentsz!OpenAIEmbeddings.aembed_documentsS  s  è ø€ ð !Ò3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆØ×.Ò.Ø,.ˆJÜ˜1œc %›j¨+Ö6�Ø!9 ×!2Ñ!2×!9Ñ!9ñ "Ø  A¨¡OÐ4ð"Ø8Eñ"÷ �ô " (¬DÔ1Ø'×2Ñ2Ó4�HØ×!Ñ!Ñ!K¸(À6Ò:JÓ!KÕKð 7ð Ðô ”c˜4Ÿ?™?Ó+ˆØ3�T×3Ñ3Øð
Ø ¨Zñ
Ø;Añ
÷ 
ð 	
ðøð
ús%   ‚A/C1Á1C-Á2A6C1Ã(C/Ã)C1Ã/C1c                ó0   —  | j                   |gfi |¤Žd   S )a  Call out to OpenAI's embedding endpoint for embedding query text.

        Args:
            text: The text to embed.
            kwargs: Additional keyword arguments to pass to the embedding API.

        Returns:
            Embedding for the text.
        r   )rê   )r“   r¶   rÜ   s      r   Úembed_queryzOpenAIEmbeddings.embed_queryu  s#   € ð $ˆt×#Ñ# T FÑ5¨fÑ5°aÑ8Ð8r„   c              ‹  óP   K  —  | j                   |gfi |¤Žƒ d{  –—† }|d   S 7 Œ	­w)a	  Call out to OpenAI's embedding endpoint async for embedding query text.

        Args:
            text: The text to embed.
            kwargs: Additional keyword arguments to pass to the embedding API.

        Returns:
            Embedding for the text.
        Nr   )rí   )r“   r¶   rÜ   r2   s       r   Úaembed_queryzOpenAIEmbeddings.aembed_query�  s4   è ø€ ð 1˜4×0Ñ0°$°ÑB¸6ÑB×Bˆ
Ø˜!‰}Ðð Cús   ‚&š$›
&)r   rd   r×   r   )r×   r   )r×   rd   )r³   ú	list[str]r[   rP   r×   z<tuple[Iterable[int], list[Union[list[int], str]], list[int]])
r³   rò   rÛ   r?   r[   rA   rÜ   r   r×   úlist[list[float]]r   )r³   rò   r[   rA   rÜ   r   r×   ró   )r¶   r?   rÜ   r   r×   rØ   )6Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r=   Ú__annotations__r>   r@   rB   rC   r   rH   rK   rM   rO   rQ   r   rT   rX   rY   rZ   r[   r\   r^   r_   ra   rb   rc   rÏ   re   r-   rf   rg   ri   rk   rl   rm   rn   r   Úmodel_configr   Úclassmethodrƒ   r˜   Úpropertyr›   rÁ   rß   rã   rê   rí   rï   rñ   r   r„   r   r:   r:   P   sµ  … ñPñd  ¨dÔ3€FˆCÓ3Ù d°DÔ9€L�#Ó9Ø)€Eˆ3Ó)Ø $€J�Ó$ðð
 !&€J�Ó%á(-Ù Ð!5¸tÔDØô)Ð˜ó ð Tá%*Ø©(Ð3DÈdÔ*Sô&€O�]ó ðñ &+Ù Ð!2¸DÔAô&€O�]ó ñ #(Ù  ¸Ô>ô#€L�-ó ð !%Ð˜#Ó$Ø8Ù*/Ø©Ð9IÐSWÔ)Xô+€NÐ'ó ð RÙ).ØÙ ØÐ3Ð4¸dô
ô*Ð˜ó ð QØ=A€OÐ:ÓAØOSÐÐLÓSØ€J�ÓØ8Ø€K�ÓØ<ÙHMØ˜IôI€OÐEó ðà€GˆSÓØ!Ð�dÓ!ðKà)-Ð˜Ó-ðJð $Ð�tÓ#Ø8Ù#(¸Ô#>€L�.Ó>ØVØ€J�Óð!à6:€OÐ3Ó:Ø7;€MÐ4Ó;ð Ð�sÓØ7ØÐ�sÓØ7Ø$(€KÐ!Ó(ðð +/ÐÐ'Ó.ðWà'+Ð Ó+ð-ñ Ø¨ÀBô€Lñ ˜(Ô#Øòó ó $ðñ2 ˜'Ô"ò6ó #ð6ðp òó ðð^&Øð^&Ø,/ð^&à	Eó^&ðN %)ñ1Oàð1Oð ð	1Oð
 "ð1Oð ð1Oð 
ó1Oðt %)ñ7Uàð7Uð ð	7Uð
 "ð7Uð ð7Uð 
ó7Uðt =Að 
Øð 
Ø,9ð 
ØLOð 
à	ó 
ðF =Að 
Øð 
Ø,9ð 
ØLOð 
à	ó 
óD
9ôr„   r:   )r)   rP   r*   zlist[Union[list[int], str]]r+   ró   r,   z	list[int]r-   r`   r×   zlist[Optional[list[float]]])%Ú
__future__r   Úloggingry   Úcollections.abcr   r   r   Útypingr   r   r	   r
   r   r�   rª   Úlangchain_core.embeddingsr   Úlangchain_core.runnables.configr   Úlangchain_core.utilsr   r   r   Úpydanticr   r   r   r   r   Útyping_extensionsr   Ú	getLoggerrô   Úloggerr8   r:   r   r„   r   Ú<module>r     s•   ðÝ "ã Û ß 7Ñ 7ß 6Õ 6ã Û Ý 0Ý ;ß TÑ Tß MÕ MÝ "à	ˆ×	Ñ	˜8Ó	$€ð:Øð:à'ð:ð *ð:ð ð	:ð
 ð:ð !ó:ôz|�y *õ |r„   