o
    {qi                     @   s  d dl Z d dlmZ d dlmZmZ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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OptionalUnion)
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   `/home/app/PaddleOCR-VL/.venv_paddleocr/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   s   d| vrt }d|  d| }t|| dd\}}|  }| }|t vr5d| 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)

    .. 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msgprovidermodelr   r   r    _parse_model_string   s(   	r4   r2   r3   r2   c                C   sz   |   s
d}t||d u rd| v rt| \}}n| }|s(t}d| }t||tvr9d| 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*   )r/   r,   r4   r#   r%   )r3   r2   r1   r&   r0   r   r   r    _infer_model_and_providerQ   s(   r6   )maxsizer   c                 C   s(   t | sd|  d|  d}t|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   r1   r   r   r    
_check_pkgs   s   
r;   kwargsc                K   s  | st  }dd| }t|t| |d\}}t | }t| |dkr5ddlm} |dd|i|S |dkrHdd	lm} |dd|i|S |d
kr[ddl	m
}	 |	dd|i|S |dkrnd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 |dkrddlm} |dd|i|S d| dt  }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, r5   r   r   )OpenAIEmbeddingsr3   r   )AzureOpenAIEmbeddingsr   )VertexAIEmbeddingsr   )BedrockEmbeddingsZmodel_idr   )CohereEmbeddingsr   )MistralAIEmbeddingsr   )HuggingFaceEmbeddingsr&   r   )OllamaEmbeddingsr)   r*   Nr   )r#   keysr"   r,   r6   r;   r   r=   r>   r   r?   r	   r@   r
   rA   r   rB   r   rC   r   rD   r%   )r3   r2   r<   r0   r1   r&   r   r=   r>   r?   r@   rA   rB   rC   rD   r   r   r    init_embeddings~   sJ   7rF   r   )	functools	importlibr   typingr   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.runnablesr   r#   strr%   tupler4   r6   	lru_cachelenr;   listfloatrF   __all__r   r   r   r    <module>   sN    9

"
k