
    9|h~                     `   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Zdedeeef   fdZdddedee   deeef   fdZ e j(                   ee            deddfd       Z e
       dddedee   dedeeeeee   f   f   fd       ZddgZy)    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                  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      X/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain/embeddings/base.py	<genexpr>z%_get_provider_list.<locals>.<genexpr>   s2      063$qcCKKS)*+s   %')join_SUPPORTED_PROVIDERSitems     r%   _get_provider_listr,      s)    99 :N:T:T:V  r+   
model_namec                 "   d| vrt         }t        d|  d|       | j                  dd      \  }}|j                         j	                         }|j	                         }|t         vrt        d| dt                      |st        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models       r%   _parse_model_stringr;      s    0 *(	$ZL 1$ %.;0
 	
 !&&sA.OHe~~%%'HKKME++
 #A!#$&
 	

 566U?r+   r9   r:   r9   c                    | j                         st        d      |d| v rt        |       \  }}n|}| }|st        }t        d|       |t        vrt        d| dt	                      ||fS )Nr3   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: r1   r2   )r7   r4   r;   r(   r,   )r:   r9   r-   r8   s       r%   _infer_model_and_providerr>   O   s     ;;=566C5L259*
(	3 k	
 	
 ++
 #A!#$&
 	

 Zr+   )maxsizer$   c                 R    t        j                  |       st        d|  d|  d      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$   s    r%   
_check_pkgrD   m   s:     >>#u %336%q:
 	
 r+   kwargsc                2   | s1t         j                         }t        ddj                  |             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 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, r<   r   r   )OpenAIEmbeddingsr:   r   )AzureOpenAIEmbeddingsr   )VertexAIEmbeddingsr   )BedrockEmbeddingsmodel_idr   )CohereEmbeddingsr   )MistralAIEmbeddingsr   )HuggingFaceEmbeddingsr-   r   )OllamaEmbeddingsr1   r2   r*   )r(   keysr4   r'   r>   rD   r   rG   rH   r   rI   r   rJ   r   rL   r   rM   r   rN   r   rO   r,   )r:   r9   rE   r8   r-   r$   rG   rH   rI   rJ   rL   rM   rN   rO   s                 r%   init_embeddingsrQ   w   st   p (--/	@9AU@VW
 	
 5UXNHj
x
(CsO85;j;F;;	^	#:$@:@@@	&	&@!=
=f==	Y	3 ?*???	X	5;j;F;;	[	 ;">>v>>	]	"?$E
EfEE	X	5;j;F;;
 #A!#$&
 	
r+   rQ   r
   )	functools	importlibr   typingr   r   r   r   r   langchain_core._apir	   langchain_core.embeddingsr
   langchain_core.runnablesr   r(   strr,   r;   r>   	lru_cachelenrD   floatrQ   __all__r*   r+   r%   <module>r]      s:     4 4 $ 0 - ' 2*&  	 C 0C 0E#s(O 0h .2  %c] 
38_ < S!567
C 
D 
 8
  #f
f
 smf
 	f

 :xT%[ 0112f
 f
T r+   