
    =i"              	          S r SSKrSSKJr  SSKJr  SSKJr  SSSS	S
SSSS.rS\	4S jr
S\	S\\	\	4   4S jrSS.S\	S\	S-  S\\	\	4   4S jjr\R                  " \" \5      S9S\	SS4S j5       rSS.S\	S\	S-  S\S\4S jjrSS/rg)z!Factory functions for embeddings.    N)util)Any)
Embeddingslangchain_openailangchain_awslangchain_coherelangchain_google_vertexailangchain_huggingfacelangchain_mistralailangchain_ollama)azure_openaibedrockcoheregoogle_vertexaihuggingface	mistralaiollamaopenaireturnc                  V    SR                  S [        R                  5        5       5      $ )z3Get formatted list of providers and their packages.
c              3   V   #    U  H  u  pS U SUR                  SS5       3v   M!     g7f)z  - z: _-N)replace).0ppkgs      i/home/dmtnaga/Documents/work/airagagent/rag_env/lib/python3.13/site-packages/langchain/embeddings/base.py	<genexpr>%_get_provider_list.<locals>.<genexpr>   s-     dGcVQtA3bS#!6 78Gcs   '))join_SUPPORTED_PROVIDERSitems     r   _get_provider_listr'      s!    99dG[GaGaGcdddr&   
model_namec                 <   SU ;  a  [         nSU  SU 3n[        U5      eU R                  SS5      u  p4UR                  5       R	                  5       nUR	                  5       nU[         ;  a  SU S[        5        3n[        U5      eU(       d  Sn[        U5      eX44$ )a  Parse a model string into provider and model name components.

The model string should be in the format 'provider:model-name', where provider
is one of the supported providers.

Args:
    model_name: A model string in the format 'provider:model-name'

Returns:
    A tuple of (provider, model_name)

```python
_parse_model_string("openai:text-embedding-3-small")
# Returns: ("openai", "text-embedding-3-small")

_parse_model_string("bedrock:amazon.titan-embed-text-v1")
# Returns: ("bedrock", "amazon.titan-embed-text-v1")
```

Raises:
    ValueError: If the model string is not in the correct format or
        the provider is unsupported

:zInvalid model format 'z'.
Model name must be in format 'provider:model-name'
Example valid model strings:
  - openai:text-embedding-3-small
  - bedrock:amazon.titan-embed-text-v1
  - cohere:embed-english-v3.0
Supported providers:    
Provider 'E' is not supported.
Supported providers and their required packages:
Model name cannot be empty)r#   
ValueErrorsplitlowerstripr'   )r(   	providersmsgprovidermodels        r   _parse_model_stringr7      s    2 *(	$ZL 1$ %.;0 	 o &&sA.OH~~%%'HKKME++
 #A!#$& 	
 o*o?r&   r5   r6   r5   c                   U R                  5       (       d  Sn[        U5      eUc  SU ;   a  [        U 5      u  pOU nU(       d  [        nSU 3n[        U5      eU[        ;  a  SU S[	        5        3n[        U5      eX4$ )Nr.   r*   zMust specify either:
1. A model string in format 'provider:model-name'
   Example: 'openai:text-embedding-3-small'
2. Or explicitly set provider from: r,   r-   )r2   r/   r7   r#   r'   )r6   r5   r4   r(   r3   s        r   _infer_model_and_providerr:   Q   s    
 ;;==*oC5L259*
(	3 k	 	 o++
 #A!#$& 	
 or&   )maxsizer   c                 b    [         R                  " U 5      (       d  SU  SU  S3n[        U5      eg)z Check if a package is installed.zCould not import z5 python package. Please install it with `pip install `N)r   	find_specImportError)r   r4   s     r   
_check_pkgr@   s   s;     >>#!#&[\_[``ab# r&   kwargsc                J   U (       d3  [         R                  5       nSSR                  U5       3n[        U5      e[	        XS9u  p[         U   n[        U5        US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SS	KJn  U" SSU0UD6$ US
:X  a  SSK	J
n	  U	" SSU0UD6$ US:X  a  SSKJn
  U
" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ SU S[+        5        3n[        U5      e)a  Initialize an embedding model from a model name and optional provider.

!!! note
    Requires the integration package for the chosen model provider to be installed.

    See the `model_provider` parameter below for specific package names
    (e.g., `pip install langchain-openai`).

    Refer to the [provider integration's API reference](https://docs.langchain.com/oss/python/integrations/providers)
    for supported model parameters to use as `**kwargs`.

Args:
    model: The name of the model, e.g. `'openai:text-embedding-3-small'`.

        You can also specify model and model provider in a single argument using
        `'{model_provider}:{model}'` format, e.g. `'openai:text-embedding-3-small'`.
    provider: The model provider if not specified as part of the model arg
        (see above).

        Supported `provider` values and the corresponding integration package
        are:

        - `openai`                  -> [`langchain-openai`](https://docs.langchain.com/oss/python/integrations/providers/openai)
        - `azure_openai`            -> [`langchain-openai`](https://docs.langchain.com/oss/python/integrations/providers/openai)
        - `bedrock`                 -> [`langchain-aws`](https://docs.langchain.com/oss/python/integrations/providers/aws)
        - `cohere`                  -> [`langchain-cohere`](https://docs.langchain.com/oss/python/integrations/providers/cohere)
        - `google_vertexai`         -> [`langchain-google-vertexai`](https://docs.langchain.com/oss/python/integrations/providers/google)
        - `huggingface`             -> [`langchain-huggingface`](https://docs.langchain.com/oss/python/integrations/providers/huggingface)
        - `mistraiai`               -> [`langchain-mistralai`](https://docs.langchain.com/oss/python/integrations/providers/mistralai)
        - `ollama`                  -> [`langchain-ollama`](https://docs.langchain.com/oss/python/integrations/providers/ollama)

    **kwargs: Additional model-specific parameters passed to the embedding model.

        These vary by provider. Refer to the specific model provider's
        [integration reference](https://reference.langchain.com/python/integrations/)
        for all available parameters.

Returns:
    An `Embeddings` instance that can generate embeddings for text.

Raises:
    ValueError: If the model provider is not supported or cannot be determined
    ImportError: If the required provider package is not installed

???+ example

    ```python
    # pip install langchain langchain-openai

    # Using a model string
    model = init_embeddings("openai:text-embedding-3-small")
    model.embed_query("Hello, world!")

    # Using explicit provider
    model = init_embeddings(model="text-embedding-3-small", provider="openai")
    model.embed_documents(["Hello, world!", "Goodbye, world!"])

    # With additional parameters
    model = init_embeddings("openai:text-embedding-3-small", api_key="sk-...")
    ```

!!! version-added "Added in `langchain` 0.3.9"

z2Must specify model name. Supported providers are: z, r8   r   r   )OpenAIEmbeddingsr6   r   )AzureOpenAIEmbeddingsr   )VertexAIEmbeddingsr   )BedrockEmbeddingsmodel_idr   )CohereEmbeddingsr   )MistralAIEmbeddingsr   )HuggingFaceEmbeddingsr(   r   )OllamaEmbeddingsr,   r-   r%   )r#   keysr"   r/   r:   r@   r   rC   rD   r	   rE   r   rF   r   rH   r   rI   r
   rJ   r   rK   r'   )r6   r5   rA   r3   r4   r(   r   rC   rD   rE   rF   rH   rI   rJ   rK   s                  r   init_embeddingsrM   {   sp   L (--/	B499YCWBXYo4UNH
x
(CsO85;j;F;;>!:$@:@@@$$@!=
=f==93 ?*???85;j;F;;;;">>v>>= ?$E
EfEE85;j;F;;
XJ =
 	" 
 S/r&   r   rM   )__doc__	functools	importlibr   typingr   langchain_core.embeddingsr   r#   strr'   tupler7   r:   	lru_cachelenr@   rM   __all__r%   r&   r   <module>rX      s   '    0 ' 2*&  	 eC e
4C 4E#s(O 4t     Dj  38_	 D S!567C D  8  tt Djt 	t
 tp r&   