
    m
i #                     P   d dl Z d dl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d	Z	de
fdZde
dee
e
f         fdZddde
de
dz  dee
e
f         fdZ e j         ee	                    de
ddfd            Zddde
de
dz  dedeeeee         f         z  fdZddgZdS )    N)util)Any)
Embeddings)Runnablelangchain_openailangchain_awslangchain_coherelangchain_google_genailangchain_google_vertexailangchain_huggingfacelangchain_mistralailangchain_ollama)	azure_openaibedrockcoheregoogle_genaigoogle_vertexaihuggingface	mistralaiollamaopenaireturnc                  n    d                     d t                                          D                       S )z3Get formatted list of providers and their packages.
c              3   T   K   | ]#\  }}d | d|                     dd           V  $dS )z  - z: _-N)replace).0ppkgs      C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_classic/embeddings/base.py	<genexpr>z%_get_provider_list.<locals>.<genexpr>   sV        063+q++CKKS))++         )join_SUPPORTED_PROVIDERSitems r$   r"   _get_provider_listr)      s@    99  :N:T:T:V:V     r$   
model_namec                 r   d| vrt           }d|  d| }t          |          |                     dd          \  }}|                                                                }|                                }|t           vr#d| 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)

    ```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_stringr9      s    2 *(	0Z 0 0 %.0 0 	 oo &&sA..OHe~~%%''HKKMME+++& & &!##& & 	
 oo *ooU?r$   r7   r8   r7   c                   |                                  sd}t          |          |d| v rt          |           \  }}n| }|st          }d| }t          |          |t          vr#d| dt	                       }t          |          ||fS )Nr0   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/   )r4   r1   r9   r&   r)   )r8   r7   r6   r*   r5   s        r"   _infer_model_and_providerr<   S   s    
 ;;== *ooC5LL2599**
 	(	 	  	 oo+++& & &!##& & 	
 ooZr$   )maxsizer!   c                 ^    t          j        |           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!   r6   s     r"   
_check_pkgrB   u   sX     ># : : :36: : : 	 # r$   kwargsc                   | s@t                                           }dd                    |           }t          |          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 |dk    rddlm}  |dd|i|S d| dt/                       }t          |          )aa  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 the provider is specified separately or can be
                inferred.

            See supported providers under the `provider` arg description.
        provider: Optional explicit provider name. If not specified, will attempt to
            parse from the model string in the `model` arg.

            Supported providers:

            - `openai`                  -> [`langchain-openai`](https://docs.langchain.com/oss/python/integrations/providers/openai)
            - `azure_openai`            -> [`langchain-openai`](https://docs.langchain.com/oss/python/integrations/providers/openai)
            - `bedrock`                 -> [`langchain-aws`](https://docs.langchain.com/oss/python/integrations/providers/aws)
            - `cohere`                  -> [`langchain-cohere`](https://docs.langchain.com/oss/python/integrations/providers/cohere)
            - `google_genai`            -> [`langchain-google-genai`](https://docs.langchain.com/oss/python/integrations/providers/google)
            - `google_vertexai`         -> [`langchain-google-vertexai`](https://docs.langchain.com/oss/python/integrations/providers/google)
            - `huggingface`             -> [`langchain-huggingface`](https://docs.langchain.com/oss/python/integrations/providers/huggingface)
            - `mistralai`               -> [`langchain-mistralai`](https://docs.langchain.com/oss/python/integrations/providers/mistralai)
            - `ollama`                  -> [`langchain-ollama`](https://docs.langchain.com/oss/python/integrations/providers/ollama)

        **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

    ???+ note "Example Usage"

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

    !!! version-added "Added in `langchain` 0.3.9"

    z2Must specify model name. Supported providers are: z, r:   r   r   )OpenAIEmbeddingsr8   r   )AzureOpenAIEmbeddingsr   )GoogleGenerativeAIEmbeddingsr   )VertexAIEmbeddingsr   )BedrockEmbeddingsmodel_idr   )CohereEmbeddingsr   )MistralAIEmbeddingsr   )HuggingFaceEmbeddingsr*   r   )OllamaEmbeddingsr.   r/   Nr(   )r&   keysr%   r1   r<   rB   r   rE   rF   r
   rG   r   rH   r   rI   r	   rK   r   rL   r   rM   r   rN   r)   )r8   r7   rC   r5   r6   r*   r!   rE   rF   rG   rH   rI   rK   rL   rM   rN   s                   r"   init_embeddingsrP      s   B  (--//	W9AUAUWW 	 oo4UXNNNHj
x
(CsOOO8555555;;j;F;;;>!!::::::$$@@:@@@@>!!GGGGGG++GG*GGGG$$$@@@@@@!!==
=f===9333333  ??*????8555555;;j;F;;;;;;;;;;"">>>v>>>=  ??????$$EE
EfEEE8555555;;j;F;;;	"X 	" 	"	" 	" 
 S//r$   r   rP   )	functools	importlibr   typingr   langchain_core.embeddingsr   langchain_core.runnablesr   r&   strr)   tupler9   r<   	lru_cachelenrB   listfloatrP   __all__r(   r$   r"   <module>r]      s                   0 0 0 0 0 0 - - - - - - ' ,2*&  
 
 C    4C 4E#s(O 4 4 4 4t         Dj  38_	       D SS!566777C D    87  u u uu Dju 	u
 (3U+,,u u u ur r$   