o
    Zh~                     @   s&  d dl Z d dlmZ d dlmZmZmZmZm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dZdedeeef fddZdddedee deeef fddZe jeeddeddfddZe
 dddedee dedeeeeee f f fdd Zd d!gZdS )"    N)util)AnyListOptionalTupleUnion)beta)
Embeddings)Runnable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                   C   s   d dd t D S )z3Get formatted list of providers and their packages.
c                 s   s,    | ]\}}d | d| dd V  qdS )z  - z: _-N)replace).0ppkg r"   P/var/www/html/lang_env/lib/python3.10/site-packages/langchain/embeddings/base.py	<genexpr>   s    
z%_get_provider_list.<locals>.<genexpr>)join_SUPPORTED_PROVIDERSitemsr"   r"   r"   r#   _get_provider_list   s   
r(   
model_namec                 C   sv   d| vrt }td|  d| | dd\}}|  }| }|t vr1td| dt  |s7td||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)

    .. code-block:: 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providermodelr"   r"   r#   _parse_model_string   s&   
r6   r4   r5   r4   c                C   sr   |   std|d u rd| v rt| \}}n|}| }|s&t}td| |tvr5td| d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-   )r2   r/   r6   r&   r(   )r5   r4   r)   r3   r"   r"   r#   _infer_model_and_providerO   s(   r8   )maxsizer!   c                 C   s$   t | std|  d|  ddS )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!   r"   r"   r#   
_check_pkgm   s   
r=   kwargsc                K   s  | st  }tdd| t| |d\}}t | }t| |dkr3ddlm} |dd|i|S |dkrFdd	lm} |dd|i|S |d
krYddl	m
} |dd|i|S |dkrlddlm}	 |	dd|i|S |dkrddlm}
 |
dd|i|S |dkrddlm} |dd|i|S |dkrddlm} |dd|i|S |dkrddlm} |dd|i|S td| dt  )a  Initialize an embeddings model from a model name and optional provider.

    **Note:** Must have the integration package corresponding to the model provider
    installed.

    Args:
        model: Name of the model to use. Can be either:
            - A model string like "openai:text-embedding-3-small"
            - Just the model name if provider is specified
        provider: Optional explicit provider name. If not specified,
            will attempt to parse from the model string. Supported providers
            and their required packages:

            {_get_provider_list()}

        **kwargs: Additional model-specific parameters passed to the embedding model.
            These vary by provider, see the provider-specific documentation for details.

    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

    .. dropdown:: Example Usage
        :open:

        .. code-block:: python

            # 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-..."
            )

    .. versionadded:: 0.3.9
    z2Must specify model name. Supported providers are: z, r7   r   r   )OpenAIEmbeddingsr5   r   )AzureOpenAIEmbeddingsr   )VertexAIEmbeddingsr   )BedrockEmbeddingsZmodel_idr   )CohereEmbeddingsr   )MistralAIEmbeddingsr   )HuggingFaceEmbeddingsr)   r   )OllamaEmbeddingsr,   r-   Nr"   )r&   keysr/   r%   r8   r=   r   r?   r@   r   rA   r   rB   r   rC   r   rD   r   rE   r   rF   r(   )r5   r4   r>   r3   r)   r!   r?   r@   rA   rB   rC   rD   rE   rF   r"   r"   r#   init_embeddingsw   sJ   8rH   r	   )	functools	importlibr   typingr   r   r   r   r   Zlangchain_core._apir   Zlangchain_core.embeddingsr	   Zlangchain_core.runnablesr
   r&   strr(   r6   r8   	lru_cachelenr=   floatrH   __all__r"   r"   r"   r#   <module>   sR    4

	j