
    Ah                     @   S SK r S SKJr  S SKJrJrJr  S SKJr  S SK	J
r
  SSSS	S
SSSS.rS\4S jrS\S\\\4   4S jrSS.S\S\\   S\\\4   4S jjr\ R"                  " \" \5      S9S\SS4S j5       rSS.S\S\\   S\S\\\
\\\   4   4   4S jjrSS/rg)    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                  V    SR                  S [        R                  5        5       5      $ )z3Get formatted list of providers and their packages.
c              3   T   #    U H  u  pS U SUR                  SS5       3v   M!     g7f)z  - z: _-N)replace).0ppkgs      Q/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/embeddings/base.py	<genexpr>%_get_provider_list.<locals>.<genexpr>   s/      :V$qcCKKS)*+:Vs   &()join_SUPPORTED_PROVIDERSitems     r"   _get_provider_listr*      s)    99 :N:T:T:V  r)   
model_namec                 <   SU ;  a  [         nSU  SU 3n[        U5      eU R                  SS5      u  p4UR                  5       R	                  5       nUR	                  5       nU[         ;  a  SU S[        5        3n[        U5      eU(       d  Sn[        U5      eX44$ )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models        r"   _parse_model_stringr:      s    0 *(	$ZL 1$ %.;0 	 o &&sA.OH~~%%'HKKME++
 #A!#$& 	
 o*o?r)   r8   r9   r8   c                   U R                  5       (       d  Sn[        U5      eUc  SU ;   a  [        U 5      u  pOU nU(       d  [        nSU 3n[        U5      eU[        ;  a  SU S[	        5        3n[        U5      eX4$ )Nr1   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/   r0   )r5   r2   r:   r&   r*   )r9   r8   r7   r+   r6   s        r"   _infer_model_and_providerr=   Q   s    
 ;;==*oC5L259*
(	3 k	 	 o++
 #A!#$& 	
 or)   )maxsizer!   c                 b    [         R                  " U 5      (       d  SU  SU  S3n[        U5      eg)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!   r7   s     r"   
_check_pkgrC   s   sB     >>#u %336%q: 	 # r)   kwargsc                J   U (       d3  [         R                  5       nSSR                  U5       3n[        U5      e[	        XS9u  p[         U   n[        U5        US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SS	KJn  U" SSU0UD6$ US
:X  a  SSK	J
n	  U	" SSU0UD6$ US:X  a  SSKJn
  U
" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ US:X  a  SSKJn  U" SSU0UD6$ SU S[+        5        3n[        U5      e)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   )OpenAIEmbeddingsr9   r   )AzureOpenAIEmbeddingsr   )VertexAIEmbeddingsr   )BedrockEmbeddingsmodel_idr   )CohereEmbeddingsr   )MistralAIEmbeddingsr   )HuggingFaceEmbeddingsr+   r   )OllamaEmbeddingsr/   r0   r(   )r&   keysr%   r2   r=   rC   r	   rF   rG   r   rH   r
   rI   r   rK   r   rL   r   rM   r   rN   r*   )r9   r8   rD   r6   r7   r+   r!   rF   rG   rH   rI   rK   rL   rM   rN   s                  r"   init_embeddingsrP   ~   su   n (--/	@9AU@VW 	 o4UNH
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   rP   )	functools	importlibr   typingr   r   r   langchain_core.embeddingsr   langchain_core.runnablesr   r&   strr*   tupler:   r=   	lru_cachelenrC   listfloatrP   __all__r(   r)   r"   <module>r]      s(     ' ' 0 - ' 2*&  	 C 3C 3E#s(O 3r #   sm  38_	 D S!567C D  8 #gg smg 	g
 :xT%[ 0112gV r)   