
    9i"              	          d Z ddlZddlmZ ddlmZ ddlmZ dddd	d
ddddZde	fdZ
de	dee	e	f   fdZddde	de	dz  dee	e	f   fdZ ej                   ee            de	ddfd       Zddde	de	dz  dedefdZddgZy)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    dj                  d t        j                         D              S )z3Get formatted list of providers and their packages.
c              3   R   K   | ]  \  }}d | d|j                  dd        ! yw)z  - z: _-N)replace).0ppkgs      c/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/langchain/embeddings/base.py	<genexpr>z%_get_provider_list.<locals>.<genexpr>   s-     dVQtA3bS#!6 78ds   %')join_SUPPORTED_PROVIDERSitems     r   _get_provider_listr&      s!    99dG[GaGaGcdddr%   
model_namec                 .   d| vrt         }d|  d| }t        |      | j                  dd      \  }}|j                         j	                         }|j	                         }|t         vrd| dt                }t        |      |sd}t        |      ||fS )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_stringr6      s    2 *(	$ZL 1$ %.;0 	 o &&sA.OHe~~%%'HKKME++
 #A!#$& 	
 o*oU?r%   r4   r5   r4   c                    | j                         sd}t        |      |d| v rt        |       \  }}n| }|st        }d| }t        |      |t        vrd| dt	                }t        |      ||fS )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,   )r1   r.   r6   r"   r&   )r5   r4   r3   r'   r2   s        r   _infer_model_and_providerr9   Q   s    
 ;;=*oC5L259*
(	3 k	 	 o++
 #A!#$& 	
 oZr%   )maxsizer   c                 V    t        j                  |       sd|  d|  d}t        |      y)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   r3   s     r   
_check_pkgr?   s   s8     >>#!#&[\_[``ab# r%   kwargsc                :   | s3t         j                         }ddj                  |       }t        |      t	        | |      \  }}t         |   }t        |       |dk(  rddlm}  |dd|i|S |dk(  rdd	lm}  |dd|i|S |d
k(  rddl	m
}	  |	dd|i|S |dk(  rddlm}
  |
dd|i|S |dk(  rddlm}  |dd|i|S |dk(  rddlm}  |dd|i|S |dk(  rddlm}  |dd|i|S |dk(  rddlm}  |dd|i|S d| dt+                }t        |      )ap  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, r7   r   r   )OpenAIEmbeddingsr5   r   )AzureOpenAIEmbeddingsr   )VertexAIEmbeddingsr   )BedrockEmbeddingsmodel_idr   )CohereEmbeddingsr   )MistralAIEmbeddingsr   )HuggingFaceEmbeddingsr'   r   )OllamaEmbeddingsr+   r,   r$   )r"   keysr!   r.   r9   r?   r   rB   rC   r	   rD   r   rE   r   rG   r   rH   r
   rI   r   rJ   r&   )r5   r4   r@   r2   r3   r'   r   rB   rC   rD   rE   rG   rH   rI   rJ   s                  r   init_embeddingsrL   {   st   L (--/	B499YCWBXYo4UXNHj
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   rL   )__doc__	functools	importlibr   typingr   langchain_core.embeddingsr   r"   strr&   tupler6   r9   	lru_cachelenr?   rL   __all__r$   r%   r   <module>rW      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%   