ó
    ýÞ j|  ã                  ó(  • S r SSKJr  SSKrSSKrSSKJrJrJrJ	r	J
r
  SSKJrJrJr  SSKrSSKrSSKJr  SSKJr  SSKJrJrJr  SS	KJrJrJrJrJr  SS
KJ r   SSK!J"r"  \RF                  " \$5      r%Sr&             SS jr' " S S\\5      r(g)z#Base classes for OpenAI embeddings.é    )ÚannotationsN)Ú	AwaitableÚCallableÚIterableÚMappingÚSequence)ÚAnyÚLiteralÚcast)Ú
Embeddings)Úrun_in_executor)Úfrom_envÚget_pydantic_field_namesÚsecret_from_env)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrÚmodel_validator)ÚSelf)Ú _resolve_sync_and_async_api_keysià“ c                ó*  • [        U 5       Vs/ sH  n/ PM     nn[        U 5       Vs/ sH  n/ PM     nn[        [        U5      5       HV  nU(       a  [        X(   5      S:X  a  M  XcU      R                  X(   5        XsU      R                  [        X   5      5        MX     / n	[        U 5       HË  nXh   n
[        U
5      S:X  a  U	R                  S 5        M)  [        U
5      S:X  a  U	R                  U
S   5        MN  [        Xx   5      n[	        U
SS06 Vs/ sH#  n[        S [	        XÇU   SS9 5       5      U-  PM%     nn[        S U 5       5      S-  nU	R                  U Vs/ sH  oÿU-  PM	     sn5        MÍ     U	$ s  snf s  snf s  snf s  snf )	Né   r   ÚstrictFc              3  ó,   #   • U H  u  pX-  v •  M     g 7f©N© )Ú.0ÚvalÚweights      ÚZ/var/www/html/gaurav/venv/lib/python3.13/site-packages/langchain_openai/embeddings/base.pyÚ	<genexpr>Ú6_process_batched_chunked_embeddings.<locals>.<genexpr>F   s   é € ð á#W‘K�Cð –Ú#Wùs   ‚)r   c              3  ó(   #   • U H	  oS -  v •  M     g7f)é   Nr   )r   r   s     r!   r"   r#   P   s   é € Ð2©' 3˜Qžª'ùó   ‚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_embeddingsr;      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Ñ#8Ô9Ø A™JÑ'×.Ñ.¬s°6±9«~Ö>ñ	 !ð ,.€JÜ�9Öˆà%,¡Zˆäˆw‹<˜1Óð ×Ñ˜dÔ#Ùäˆw‹<˜1Óà×Ñ˜g a™jÔ)Ùô
 Ð.Ñ1Ó2ˆô ! 'Ð8°%Ò8ó
ñ 9�	ô ñ ä#& yÀaÑ2HÐQVÒ#Wóó ð ô	ñ
 9ð 	ð 
ô Ñ2©'Ó2Ó2°cÑ9ˆ	Ø×Ñ±gÓ>±g¨s œ?±gÑ>Ö?ñ? ðB Ðùòa (Fùò
 ,Jùò:
ùò ?s   ŽF¨FÄ)FÅ'F
c                  ó   • \ rS rSr% Sr\" SSS9rS\S'   \" SSS9rS\S'   S	r	S
\S'   Sr
S\S'    \	rS\S'   \" \" SSS9SS9rS\S'    \" S\" SSS9S9rS\S'    \" \" SSS9S9rS\S'   \" \" SSS9S9rS\S'   SrS\S '    \" S!\" S"SS9S9rS#\S$'    \" S%\" S&S'/SS9S9rS\S('    SrS)\S*'   SrS+\S,'   S-rS\S.'    S/rS\S0'    \" SS1S29rS3\S4'    SrS\S5'   SrS6\S7'    SrS\S8'    S9rS6\S:'    \" \S9rS;\S<'    S9r S6\S='    Sr!S>\S?'   Sr"S@\SA'   SBr#S\SC'    SDr$S\SE'    Sr%SF\SG'    Sr&SF\SH'    Sr'S6\SI'    \(" SJSSKSL9r)\*" SMSN9\+S]SO j5       5       r,\*" SPSN9S^SQ j5       r-\.S_SR j5       r/S`SS jr0      SaST jr1SSU.         SbSV jjr2SSU.         SbSW jjr3 Sc       SdSX jjr4 Sc       SdSY jjr5SeSZ jr6SeS[ jr7S\r8g)fÚOpenAIEmbeddingséV   uè	  OpenAI embedding model integration.

Setup:
    Install `langchain_openai` and set environment variable `OPENAI_API_KEY`.

    ```bash
    pip install -U langchain_openai
    export OPENAI_API_KEY="your-api-key"
    ```

Key init args â€” embedding params:
    model:
        Name of OpenAI model to use.
    dimensions:
        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:
        OpenAI API key.
    organization:
        OpenAI organization ID. If not passed in will be read
        from env var `OPENAI_ORG_ID`.
    max_retries:
        Maximum number of retries to make when generating.
    request_timeout:
        Timeout for requests to OpenAI completion API

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

Instantiate:
    ```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:
    ```python
    input_text = "The meaning of life is 42"
    vector = embeddings.embed_query("hello")
    print(vector[:3])
    ```
    ```python
    [-0.024603435769677162, -0.007543657906353474, 0.0039630369283258915]
    ```

Embed multiple texts:
    ```python
    vectors = embeddings.embed_documents(["hello", "goodbye"])
    # Showing only the first 3 coordinates
    print(len(vectors))
    print(vectors[0][:3])
    ```
    ```python
    2
    [-0.024603435769677162, -0.007543657906353474, 0.0039630369283258915]
    ```

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

    # multiple:
    # await embed.aembed_documents(input_texts)
    ```
    ```python
    [-0.009100092574954033, 0.005071679595857859, -0.0029193938244134188]
    ```

!!! note "OpenAI-compatible APIs (e.g. OpenRouter, Ollama, vLLM)"

    When using a non-OpenAI provider, set
    `check_embedding_ctx_length=False` to send raw text instead of tokens
    (which many providers don't support), and optionally set
    `encoding_format` to `'float'` to avoid base64 encoding issues:

    ```python
    from langchain_openai import OpenAIEmbeddings

    embeddings = OpenAIEmbeddings(
        model="...",
        base_url="...",
        check_embedding_ctx_length=False,
    )
    ```

NT)ÚdefaultÚexcluder	   ÚclientÚasync_clientztext-embedding-ada-002ÚstrÚmodelú
int | NoneÚ
dimensionsz
str | NoneÚ
deploymentÚOPENAI_API_VERSION)r?   Úapi_version)Údefault_factoryÚaliasÚopenai_api_versionÚbase_urlÚOPENAI_API_BASE)rK   rJ   Úopenai_api_baseÚOPENAI_API_TYPE)rJ   Úopenai_api_typeÚOPENAI_PROXYÚopenai_proxyiÿ  ÚintÚembedding_ctx_lengthÚapi_keyÚOPENAI_API_KEYzCSecretStr | None | Callable[[], str] | Callable[[], Awaitable[str]]Úopenai_api_keyÚorganizationÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONÚopenai_organizationz Literal['all'] | set[str] | NoneÚallowed_specialz0Literal['all'] | set[str] | Sequence[str] | NoneÚdisallowed_specialiè  Ú
chunk_sizer%   Úmax_retriesÚtimeout)r?   rK   z(float | tuple[float, float] | Any | NoneÚrequest_timeoutÚheadersÚboolÚtiktoken_enabledÚtiktoken_model_nameFÚshow_progress_barúdict[str, Any]Úmodel_kwargsr0   zMapping[str, str] | NoneÚdefault_headerszMapping[str, object] | NoneÚdefault_queryé   Úretry_min_secondsé   Úretry_max_secondsz
Any | NoneÚhttp_clientÚhttp_async_clientÚcheck_embedding_ctx_lengthÚforbidr   )ÚextraÚpopulate_by_nameÚprotected_namespacesÚbefore)Úmodec           
     óz  • [        U 5      nUR                  S0 5      n[        U5       HS  nXC;   a  SU S3n[        U5      eXB;  d  M   [        R
                  " SU SU SU S35        UR                  U5      X4'   MU     UR                  UR                  5       5      nU(       a  SU S	3n[        U5      eX1S'   U$ )
z>Build extra kwargs from additional params that were passed in.ri   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_namesrt   Ú
field_nameÚmsgÚinvalid_model_kwargss          r!   Úbuild_extraÚOpenAIEmbeddings.build_extra\  sä   € ô $<¸CÓ#@Ð Ø—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØÓ"Ø˜z˜lÐ*:Ð;�Ü  “oÐ%ØÕ9Ü—’Ø! * ð .Ø�Lð !)Ø)3¨Ð4JðNôð
 %+§J¡J¨zÓ$:�Ó!ñ 'ð  8×DÑDÀUÇZÁZÃ\ÓRÐÞàÐ2Ð3ð 4Sð Tð ô ˜S“/Ð!à!&ˆ~ÑØˆó    Úafterc                óÈ  • U R                   S;   a  Sn[        U5      eSnSnU R                  b  [        U R                  5      u  p#U R                  U R
                  U R                  U R                  U R                  U R                  S.nU R                  (       a_  U R                  (       d  U R                  (       a=  U R                  nU R                  nU R                  nSU< SU< SU< 3n[        U5      eU R                  (       dˆ  Uc  SU l        O}U R                  (       a6  U R                  (       d%   SS	KJn  UR#                  U R                  S9U l        U R                  US.n
[$        R&                  " S0 UDU
D6R(                  U l        U R*                  (       d}  U R                  (       a6  U R                  (       d%   SS	KJn  UR-                  U R                  S9U l        U R                  US.n[$        R.                  " S0 UDUD6R(                  U l        U $ ! [          a  n	S
n[!        U5      U	eSn	A	ff = f! [          a  n	S
n[!        U5      U	eSn	A	ff = f)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)rY   rM   ra   r`   rj   rk   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   )ÚhttpxzŒCould not import the httpx package used by the OpenAI SDK. It is normally installed alongside `openai`; reinstall with `pip install openai`.)Úproxy)rp   rV   r   )rQ   r|   rX   r   r\   rO   rb   r`   rj   rk   rS   rp   rq   rA   Úlangchain_openai._compatr�   ÚImportErrorÚClientÚopenaiÚOpenAIr5   rB   ÚAsyncClientÚAsyncOpenAI)Úselfr†   Úsync_api_key_valueÚasync_api_key_valueÚclient_paramsrS   rp   rq   r�   ÚeÚsync_specificÚasync_specifics               r!   Úvalidate_environmentÚ%OpenAIEmbeddings.validate_environmenty  sf  € ð ×ÑÐ#CÓCàWð ô ˜S“/Ð!ð >BÐØIMÐà×ÑÑ*ô 7WØ×#Ñ#ó7Ñ3Ðð
 !×4Ñ4Ø×,Ñ,Ø×+Ñ+Ø×+Ñ+Ø#×3Ñ3Ø!×/Ñ/ñ
ˆð ×× $×"2×"2°d×6L×6LØ×,Ñ,ˆLØ×*Ñ*ˆKØ $× 6Ñ 6Ðð!à‘/  K¡>Ð1FÐ4EÑ3GðIð ô
 ˜S“/Ð!Ø�{�{Ø!Ñ)ð #�•à×$×$¨T×-=×-=ð6ÝBð (-§|¡|¸$×:KÑ:K |Ð'L�DÔ$à#'×#3Ñ#3Ø1ñ!�ô %ŸmšmÑM¨mÐM¸}ÑM×XÑX�”Ø× × Ø× × ¨×)?×)?ð2Ý>ð */×):Ñ):À×ARÑARÐ):Ð)S�Ô&à#×5Ñ5Ø.ñˆNô !'× 2Ò 2ñ !Øð!à ñ!÷ ‰jð Ôð ˆøôC 'ó 6ðMð ô
 *¨#Ó.°AÐ5ûð6ûô" #ó 2ðIð ô
 & cÓ*°Ð1ûð2ús0   Ä:H$ ÇI È$
IÈ.H<È<IÉ
I!ÉIÉI!c                ór   • SU R                   0U R                  EnU R                  b  U R                  US'   U$ )NrD   rF   )rD   ri   rF   )r™   Úparamss     r!   Ú_invocation_paramsÚ#OpenAIEmbeddings._invocation_paramsÌ  s8   € à §¡ÐA¨t×/@Ñ/@ÐAˆØ�?‰?Ñ&Ø#'§?¡?ˆF�<Ñ ØˆrŠ   c                ó8   • U R                   c  Sn[        U5      eg)z8Check that sync client is available, raise error if not.NzÃSync client is not available. This happens when an async callable was provided for the API key. Use async methods (ainvoke, astream) instead, or provide a string or sync callable for the API key.)rA   r|   )r™   r†   s     r!   Ú_ensure_sync_client_availableÚ.OpenAIEmbeddings._ensure_sync_client_availableÓ  s(   € à�;‰;ÑðQð ô
 ˜S“/Ð!ð rŠ   c           
     ó  • / n/ n/ nU R                   =(       d    U R                  nU R                  (       dÁ   SSKJn  UR                  US9n	[        U5       Hš  u  p«U	R                  USS9n[        S[        U5      U R                  5       Ha  nUXÝU R                  -    nU	R                  U5      nUR                  U5        UR                  U
5        UR                  [        U5      5        Mc     Mœ     GOK [        R                   " U5      nU R&                  U R(                  S.R+                  5        VVs0 sH  u  nnUc  M  UU_M     nnn[        U5       Hä  u  p«U R                  R-                  S	5      (       a  UR/                  S
S5      nU(       a  UR                  " U40 UD6nOUR1                  U5      n[        S[        U5      U R                  5       H]  nUR                  UXÝU R                  -    5        UR                  U
5        UR                  [        UXÝU R                  -    5      5        M_     Mæ     U R2                  (       a$   SSKJn  U" [        S[        U5      U5      5      nO[        S[        U5      U5      nUX4U4$ ! [
         a    Sn[        U5      ef = f! ["         a    [        R$                  " S5      n GNÂf = fs  snnf ! [
         a    [        S[        U5      U5      n Nof = f)a‹  Tokenize and batch input texts.

Splits texts based on `embedding_ctx_length` and groups them into batches
of size `chunk_size`.

Args:
    texts: The list of texts to tokenize.
    chunk_size: The maximum number of texts to include in a single batch.

Returns:
    A tuple containing:
        1. An iterable of starting indices in the token list for each batch.
        2. A list of tokenized texts (token arrays for tiktoken, strings for
            HuggingFace).
        3. An iterable mapping each token array to the index of the original
            text. Same length as the token list.
        4. A list of token counts for each tokenized text.
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)r]   r^   Ú001Ú
Ú )Útqdm)rf   rD   re   Útransformersrª   r“   r|   Úfrom_pretrainedÚ	enumerateÚencoder'   r(   rU   Údecoder)   ÚtiktokenÚencoding_for_modelÚKeyErrorÚget_encodingr]   r^   ÚitemsÚendswithÚreplaceÚencode_ordinaryrg   Ú	tqdm.autor±   )r™   Útextsr_   r-   r/   Útoken_countsÚ
model_namerª   r†   Ú	tokenizerr4   ÚtextÚ	tokenizedÚjÚtoken_chunkÚ
chunk_textÚencodingÚkÚvÚencoder_kwargsÚtokenr±   Ú_iters                          r!   Ú	_tokenizeÚOpenAIEmbeddings._tokenizeÝ  sç  € ð* )+ˆØˆØ"$ˆØ×-Ñ-×;°·±ˆ
ð ×$×$ð&Ý6ð &×5Ñ5Ø.8ð 6ð ˆIô % UÖ+‘�à'0×'7Ñ'7¸ÐQVÐ'7Ð'W�	ô ˜q¤# i£.°$×2KÑ2KÖL�AØ-6Ø × 9Ñ 9Ñ9ð.�Kð
 '0×&6Ñ&6°{Ó&C�JØ—M‘M *Ô-Ø—N‘N 1Ô%Ø ×'Ñ'¬¨KÓ(8Ö9ó Mó ,ð @Ü#×6Ò6°zÓB�ð (,×';Ñ';Ø*.×*AÑ*Añ÷ ‘%“'ðô.ñ‘D�A�qð ó ��1’ñð ñ .ô % UÖ+‘�Ø—:‘:×&Ñ& u×-Ñ-ð  Ÿ<™<¨¨cÓ2�Dæ!Ø$ŸOšO¨DÑC°NÑC‘Eà$×4Ñ4°TÓ:�Eô ˜q¤# e£*¨d×.GÑ.GÖH�AØ—M‘M %¨°×0IÑ0IÑ,IÐ"JÔKØ—N‘N 1Ô%Ø ×'Ñ'¬¨E°!¸$×:SÑ:SÑ6SÐ,TÓ(UÖVó Iñ ,ð$ ×!×!ð:Ý*á"&¤u¨Q´°F³¸ZÓ'HÓ"I‘ô ˜!œS ›[¨*Ó5ˆEØ�f |Ð3Ð3øôE ó &ðVð ô
 ! “oÐ%ð&ûô: ó @Ü#×0Ò0°Ó?“ð@üó.øô> ó :Ü˜a¤ V£¨jÓ9’ð:ús;   ¸J Ã9J. Ä9	KÅKÉ"K ÊJ+Ê. KËKË K>Ë=K>)r_   c          	     óÈ  ^ ^^• U=(       d    T R                   n0 T R                  EUEmT R                  X5      u  pgp‰/ n
SnU[        U5      :  aÆ  SnUn[	        U[        Xµ-   [        U5      5      5       H(  nXž   nXÏ-   [        :”  a  XÛ:X  a  US-   n  OXÏ-  nUS-   nM*     X{U nT R                  R                  " SSU0TD6n[        U[        5      (       d  UR                  5       nU
R                  S US    5       5        UnU[        U5      :  a  MÆ  [        [        U5      XzUT R                  5      nSmS	UUU 4S jjnU Vs/ sH  nUb  UOU" 5       PM     sn$ s  snf )
aâ  Generate length-safe embeddings for a list of texts.

This method handles tokenization and embedding generation, respecting the
`embedding_ctx_length` and `chunk_size`. Supports both `tiktoken` and
HuggingFace `transformers` based on the `tiktoken_enabled` flag.

Args:
    texts: The list of texts to embed.
    engine: The engine or model to use for embeddings.
    chunk_size: The size of chunks for processing embeddings.

Returns:
    A list of embeddings for each input text.
r   r   Úinputc              3  ó(   #   • U H	  oS    v •  M     g7f©r8   Nr   ©r   Úrs     r!   r"   Ú<OpenAIEmbeddings._get_len_safe_embeddings.<locals>.<genexpr>s  ó   é € Ð%OÑ>N¸¨¦nÒ>Nùr&   ÚdataNc                 óª   >• TcN  TR                   R                  " SSS0TD6n [        U [        5      (       d  U R	                  5       n U S   S   S   mT$ ©NrÒ   Ú rÙ   r   r8   r   )rA   ÚcreateÚ
isinstanceÚdictÚ
model_dump©Úaverage_embeddedÚ_cached_empty_embeddingÚclient_kwargsr™   s    €€€r!   Úempty_embeddingÚBOpenAIEmbeddings._get_len_safe_embeddings.<locals>.empty_embedding|  s^   ø€ à&Ñ.Ø#'§;¡;×#5Ò#5Ñ#P¸BÐ#PÀ-Ñ#PÐ Ü!Ð"2´D×9Ñ9Ø'7×'BÑ'BÓ'DÐ$Ø*:¸6Ñ*BÀ1Ñ*EÀkÑ*RÐ'Ø*Ð*rŠ   r   ©Úreturnúlist[float])r_   r¤   rÏ   r(   r'   ÚminÚMAX_TOKENS_PER_REQUESTrA   rÝ   rÞ   rß   rà   Úextendr;   r0   ©r™   rÀ   Úenginer_   ÚkwargsÚ_chunk_sizerÎ   r-   r/   rÁ   r.   r4   Úbatch_token_countÚ	batch_endrÆ   Úchunk_tokensÚbatch_tokensÚresponser5   rå   r�   rã   rä   s   `                    @@r!   Ú_get_len_safe_embeddingsÚ)OpenAIEmbeddings._get_len_safe_embeddingsA  sx  ú€ ð, !×3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆØ/3¯~©~¸eÓ/QÑ,ˆ�wØ02Ðð ˆØ”#�f“+‹oà !ÐØˆIä˜1œc !¡/´3°v³;Ó?Ö@�Ø+™�à$Ñ3Ô6LÓLØ “~à$%¨¡E˜	ÙØ!Ñ1Ð!Ø ™E’	ñ Að " IÐ.ˆLØ—{‘{×)Ò)ÑN°ÐNÀÑNˆHÜ˜h¬×-Ñ-Ø#×.Ñ.Ó0�Ø×%Ñ%Ñ%O¸hÀvÒ>NÓ%OÔOàˆAð/ ”#�f“+�oô2 9Ü�‹J˜°G¸T¿_¹_ó
ˆ
ð 7;Ð÷	+ñ 	+ñ DNÓNÁ:¸a�Q‘]‘©Ó(9Ò9Á:ÑNÐNùÒNs   ÅEc          	   ‹  ó  ^ ^^#   • U=(       d    T R                   n0 T R                  EUEm[        ST R                  X5      I Sh  v•N u  pgp‰/ n
SnU[	        U5      :  aÎ  SnUn[        U[        Xµ-   [	        U5      5      5       H(  nXž   nXÏ-   [        :”  a  XÛ:X  a  US-   n  OXÏ-  nUS-   nM*     X{U nT R                  R                  " SSU0TD6I Sh  v•N n[        U[        5      (       d  UR                  5       nU
R                  S US    5       5        UnU[	        U5      :  a  MÎ  [        [	        U5      XzUT R                  5      nSmS	UUU 4S jjnU Vs/ sH  nUb  UOU" 5       I Sh  v•N PM     sn$  GN: N« Ns  snf 7f)
añ  Asynchronously generate length-safe embeddings for a list of texts.

This method handles tokenization and embedding generation, respecting the
`embedding_ctx_length` and `chunk_size`. Supports both `tiktoken` and
HuggingFace `transformers` based on the `tiktoken_enabled` flag.

Args:
    texts: The list of texts to embed.
    engine: The engine or model to use for embeddings.
    chunk_size: The size of chunks for processing embeddings.

Returns:
    A list of embeddings for each input text.
Nr   r   rÒ   c              3  ó(   #   • U H	  oS    v •  M     g7frÔ   r   rÕ   s     r!   r"   Ú=OpenAIEmbeddings._aget_len_safe_embeddings.<locals>.<genexpr>¿  rØ   r&   rÙ   c               “  óÆ   >#   • TcV  TR                   R                  " SSS0TD6I S h  v•N n [        U [        5      (       d  U R	                  5       n U S   S   S   mT$  N67frÛ   )rB   rÝ   rÞ   rß   rà   rá   s    €€€r!   rå   ÚCOpenAIEmbeddings._aget_len_safe_embeddings.<locals>.empty_embeddingÈ  sw   øé € à&Ñ.Ø)-×):Ñ):×)AÒ)Añ *Øð*Ø -ñ*÷ $Ð ô "Ð"2´D×9Ñ9Ø'7×'BÑ'BÓ'DÐ$Ø*:¸6Ñ*BÀ1Ñ*EÀkÑ*RÐ'Ø*Ð*ñ$ùs   ƒ%A!¨A©7A!r   rç   )r_   r¤   r   rÏ   r(   r'   rê   rë   rB   rÝ   rÞ   rß   rà   rì   r;   r0   rí   s   `                    @@r!   Ú_aget_len_safe_embeddingsÚ*OpenAIEmbeddings._aget_len_safe_embeddings‰  s®  úé € ð, !×3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆÜ5DØ�$—.‘. %ó6
÷ 0
Ñ,ˆ�wð 13Ðð ˆØ”#�f“+‹oà !ÐØˆIä˜1œc !¡/´3°v³;Ó?Ö@�Ø+™�à$Ñ3Ô6LÓLØ “~à$%¨¡E˜	ÙØ!Ñ1Ð!Ø ™E’	ñ Að " IÐ.ˆLØ!×.Ñ.×5Ò5ñ Ø"ðØ&3ñ÷ ˆHô ˜h¬×-Ñ-Ø#×.Ñ.Ó0�Ø×%Ñ%Ñ%O¸hÀvÒ>NÓ%OÔOàˆAð3 ”#�f“+�oô6 9Ü�‹J˜°G¸T¿_¹_ó
ˆ
ð 7;Ð÷		+ñ 		+ñ JTÓTÉÀA�Q‘]‘©oÓ.?×(?Ò?ÉÑTÐTòe0
ñ2ñ2 )@ùÒTùsP   …A FÁE?ÁBFÃFÃAFÄ.1FÅFÅ3F
Å4FÅ<FÆFÆFÆFc           	     óò  • U R                  5         U=(       d    U R                  n0 U R                  EUEnU R                  (       dƒ  / n[	        S[        U5      U5       He  nU R                  R                  " SSXXt-    0UD6n[        U[        5      (       d  UR                  5       nUR                  S US    5       5        Mg     U$ [        [        U R                  5      n	U R                  " U4X’S.UD6$ )aS  Call OpenAI's embedding endpoint to embed 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  ó(   #   • U H	  oS    v •  M     g7frÔ   r   rÕ   s     r!   r"   Ú3OpenAIEmbeddings.embed_documents.<locals>.<genexpr>ï  ó   é € Ð!KÑ:J°Q K¦.Ò:Jùr&   rÙ   ©rî   r_   r   )r§   r_   r¤   rr   r'   r(   rA   rÝ   rÞ   rß   rà   rì   r   rC   rG   rö   ©
r™   rÀ   r_   rï   Úchunk_size_rä   r5   r4   rõ   rî   s
             r!   Úembed_documentsÚ OpenAIEmbeddings.embed_documentsÕ  sù   € ð 	×*Ñ*Ô,Ø ×3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆØ×.×.Ø,.ˆJÜ˜1œc %›j¨+Ö6�ØŸ;™;×-Ò-ñ Ø A¡OÐ4ðØ8Eñ�ô " (¬D×1Ñ1Ø'×2Ñ2Ó4�HØ×!Ñ!Ñ!K¸(À6Ò:JÓ!KÖKñ 7ð Ðô ”c˜4Ÿ?™?Ó+ˆØ×,Ò,Øð
Ø ñ
Ø;Añ
ð 	
rŠ   c           	   ‹  ó  #   • U=(       d    U R                   n0 U R                  EUEnU R                  (       d‹  / n[        S[	        U5      U5       Hm  nU R
                  R                  " SSXXt-    0UD6I Sh  v•N n[        U[        5      (       d  UR                  5       nUR                  S US    5       5        Mo     U$ [        [        U R                  5      n	U R                  " U4X’S.UD6I Sh  v•N $  N� N7f)ab  Asynchronously call OpenAI's embedding endpoint to embed 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  ó(   #   • U H	  oS    v •  M     g7frÔ   r   rÕ   s     r!   r"   Ú4OpenAIEmbeddings.aembed_documents.<locals>.<genexpr>  r  r&   rÙ   r  r   )r_   r¤   rr   r'   r(   rB   rÝ   rÞ   rß   rà   rì   r   rC   rG   rý   r  s
             r!   Úaembed_documentsÚ!OpenAIEmbeddings.aembed_documentsù  s  é € ð !×3 D§O¡OˆØ=˜4×2Ñ2Ð=°fÐ=ˆØ×.×.Ø,.ˆJÜ˜1œc %›j¨+Ö6�Ø!%×!2Ñ!2×!9Ò!9ñ "Ø A¡OÐ4ð"Ø8Eñ"÷ �ô " (¬D×1Ñ1Ø'×2Ñ2Ó4�HØ×!Ñ!Ñ!K¸(À6Ò:JÓ!KÖKñ 7ð Ðô ”c˜4Ÿ?™?Ó+ˆØ×3Ò3Øð
Ø ñ
Ø;Añ
÷ 
ð 	
ññ
ùs%   ‚A7C?Á9C;Á:A<C?Ã6C=Ã7C?Ã=C?c                óP   • U R                  5         U R                  " U/40 UD6S   $ )zÓ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Ä   rï   s      r!   Úembed_queryÚOpenAIEmbeddings.embed_query  s-   € ð 	×*Ñ*Ô,Ø×#Ò# T FÑ5¨fÑ5°aÑ8Ð8rŠ   c              ‹  óP   #   • U R                   " U/40 UD6I Sh  v•N nUS   $  N	7f)zÙ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ï   r5   s       r!   Úaembed_queryÚOpenAIEmbeddings.aembed_query)  s1   é € ð  ×0Ò0°$°ÑB¸6ÑB×Bˆ
Ø˜!‰}Ðñ Cùs   ‚&š$›
&)rB   rA   rq   rp   )rƒ   rh   rè   r	   )rè   r   )rè   rh   )rè   ÚNone)rÀ   ú	list[str]r_   rT   rè   zAtuple[Iterable[int], list[list[int] | str], list[int], list[int]])
rÀ   r  rî   rC   r_   rE   rï   r	   rè   úlist[list[float]]r   )rÀ   r  r_   rE   rï   r	   rè   r  )rÄ   rC   rï   r	   rè   ré   )9Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   rA   Ú__annotations__rB   rD   rF   rG   r   rL   rO   rQ   rS   rU   r   rX   r\   r]   r^   r_   r`   rb   rc   re   rf   rg   rß   ri   r0   rj   rk   rm   ro   rp   rq   rr   r   Úmodel_configr   Úclassmethodrˆ   r    Úpropertyr¤   r§   rÏ   rö   rý   r  r  r  r  Ú__static_attributes__r   rŠ   r!   r=   r=   V   sÏ  ‡ ñ^ñ@  ¨dÑ3€FˆCÓ3á d°DÑ9€L�#Ó9à)€Eˆ3Ó)à!€J�
Ó!ðð #€J�
Ó"ñ &+Ù Ð!5¸tÑDØñ&Ð˜
ó ðñ #(Ø©(Ð3DÈdÑ*Sñ#€O�Zó ðñ #(Ù Ð!2¸DÑAñ#€O�Zó ñ
  %Ù  ¸Ñ>ñ €L�*ó ð !%Ð˜#Ó$Ø8ñ 	Ø©Ð9IÐSWÑ)Xñ	ð ØKóð
ñ
 ',ØÙ ØÐ3Ð4¸dñ
ñ'Ð˜ó ðð
 9=€OÐ5Ó<àKOÐÐHÓOà€J�ÓØ8à€K�ÓØ<á@EØ˜IñA€OÐ=ó ðð
 €GˆSÓà!Ð�dÓ!ðð '+Ð˜Ó*ðð $Ð�tÓ#Ø8á#(¸Ñ#>€L�.Ó>ØVà€J�ÓØIà04€OÐ-Ó4à15€MÐ.Ó5ð
 Ð�sÓØ7àÐ�sÓØ7à"€K�Ó"ðð %)Ð�zÓ(ðð (,Ð Ó+ðñ Ø¨ÀBñ€Lñ ˜(Ñ#Øóó ó $ðñ6 ˜'Ñ"óPó #ðPðd óó ðô"ð`4Øð`4Ø,/ð`4à	Jô`4ðR "&ñDOàðDOð ð	DOð
 ðDOð ðDOð 
õDOðZ "&ñJUàðJUð ð	JUð
 ðJUð ðJUð 
õJUðZ :>ð"
Øð"
Ø,6ð"
ØILð"
à	õ"
ðJ :>ð!
Øð!
Ø,6ð!
ØILð!
à	õ!
ôF9÷rŠ   r=   )r,   rT   r-   zlist[list[int] | str]r.   r  r/   z	list[int]r0   rd   rè   zlist[list[float] | None]))r  Ú
__future__r   Úloggingr}   Úcollections.abcr   r   r   r   r   Útypingr	   r
   r   r•   r·   Úlangchain_core.embeddingsr   Úlangchain_core.runnables.configr   Úlangchain_core.utilsr   r   r   Úpydanticr   r   r   r   r   Útyping_extensionsr   Ú*langchain_openai.chat_models._client_utilsr   Ú	getLoggerr  Úloggerrë   r;   r=   r   rŠ   r!   Ú<module>r,     s¢   ðÙ )å "ã Û ß LÕ Lß %Ñ %ã Û Ý 0Ý ;ß TÑ Tß MÕ MÝ "å Wà	×	Ò	˜8Ó	$€àÐ Ø 1ð9Øð9à!ð9ð *ð9ð ð	9ð
 ð9ð ô9ôx^�y *õ ^rŠ   