a
    ag~                     @   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edddZeeeef dddZddeee eeef dddZe jeededdddZe
 ddeee eeeeeee f f d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"   g/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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_namer   c                 C   sv   d| vr t }td|  d| | dd\}}|  }| }|t vrbtd| dt  |snt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   r   c                C   sr   |   std|d u r.d| v r.t| \}}n|}| }|sLt}td| |tvrjt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   )maxsize)r!   r   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=   )r5   r4   kwargsr   c                K   s  | s t  }tdd| t| |d\}}t | }t| |dkrfddlm} |f d|i|S |dkrdd	lm} |f d|i|S |d
krddl	m
} |f d|i|S |dkrddlm}	 |	f d|i|S |dkr ddlm}
 |
f d|i|S |dkr(ddlm} |f d|i|S |dkrPddlm} |f d|i|S |dkrxddlm} |f d|i|S td| dt  dS )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-   N)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>   sD   4
	j