
    f3fi.                         d Z ddlZddlZddlmZ ddlmZ ddlmZ  ej                  e
      5  ddlZddd        G d dee      Z G d d	ee      Zy# 1 sw Y   "xY w)
zAModule contains a few fake embedding models for testing purposes.    N)	BaseModel)override)
Embeddingsc                   |    e Zd ZU dZeed<   	 dee   fdZe	dee
   deee      fd       Ze	de
dee   fd       Zy	)
FakeEmbeddingsa*  Fake embedding model for unit testing purposes.

    This embedding model creates embeddings by sampling from a normal distribution.

    !!! danger "Toy model"
        Do not use this outside of testing, as it is not a real embedding model.

    Instantiate:
        ```python
        from langchain_core.embeddings import FakeEmbeddings

        embed = FakeEmbeddings(size=100)
        ```

    Embed single text:
        ```python
        input_text = "The meaning of life is 42"
        vector = embed.embed_query(input_text)
        print(vector[:3])
        ```
        ```python
        [-0.700234640213188, -0.581266257710429, -1.1328482266445354]
        ```

    Embed multiple texts:
        ```python
        input_texts = ["Document 1...", "Document 2..."]
        vectors = embed.embed_documents(input_texts)
        print(len(vectors))
        # The first 3 coordinates for the first vector
        print(vectors[0][:3])
        ```
        ```python
        2
        [-0.5670477847544458, -0.31403828652395727, -0.5840547508955257]
        ```
    sizereturnc                     t        t        j                  j                         j	                  | j
                              S N)r   )listnprandomdefault_rngnormalr   )selfs    \/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_core/embeddings/fake.py_get_embeddingzFakeEmbeddings._get_embedding:   s,    BII))+22		2BCC    textsc                 H    |D cg c]  }| j                          c}S c c}w Nr   r   r   _s      r   embed_documentszFakeEmbeddings.embed_documents=   s    /45!##%555s   textc                 "    | j                         S r   r   r   r   s     r   embed_queryzFakeEmbeddings.embed_queryA   s    ""$$r   N)__name__
__module____qualname____doc__int__annotations__r   floatr   r   strr   r    r   r   r   r      sy    $L I+DU D 6T#Y 64U3D 6 6 % %U % %r   r   c                       e Zd ZU dZeed<   	 dedee   fdZe	de
defd       Zedee
   deee      fd	       Zede
dee   fd
       Zy)DeterministicFakeEmbeddinga~  Deterministic fake embedding model for unit testing purposes.

    This embedding model creates embeddings by sampling from a normal distribution
    with a seed based on the hash of the text.

    !!! danger "Toy model"
        Do not use this outside of testing, as it is not a real embedding model.

    Instantiate:
        ```python
        from langchain_core.embeddings import DeterministicFakeEmbedding

        embed = DeterministicFakeEmbedding(size=100)
        ```

    Embed single text:
        ```python
        input_text = "The meaning of life is 42"
        vector = embed.embed_query(input_text)
        print(vector[:3])
        ```
        ```python
        [-0.700234640213188, -0.581266257710429, -1.1328482266445354]
        ```

    Embed multiple texts:
        ```python
        input_texts = ["Document 1...", "Document 2..."]
        vectors = embed.embed_documents(input_texts)
        print(len(vectors))
        # The first 3 coordinates for the first vector
        print(vectors[0][:3])
        ```
        ```python
        2
        [-0.5670477847544458, -0.31403828652395727, -0.5840547508955257]
        ```
    r   seedr	   c                     t         j                  j                  |      }t        |j	                  | j
                              S r   )r   r   r   r   r   r   )r   r+   rngs      r   r   z)DeterministicFakeEmbedding._get_embeddingq   s0    ii##D)CJJDIIJ.//r   r   c                     t        t        j                  | j                  d            j	                         d      dz  S )z@Get a seed for the random generator, using the hash of the text.zutf-8   i )r$   hashlibsha256encode	hexdigest)r   s    r   	_get_seedz$DeterministicFakeEmbedding._get_seedv   s1     7>>$++g"67AACRH5PPr   r   c                 j    |D cg c]#  }| j                  | j                  |            % c}S c c}w N)r+   r   r4   r   s      r   r   z*DeterministicFakeEmbedding.embed_documents{   s-    EJK##):#;KKKs   (0c                 D    | j                  | j                  |            S r6   r7   r   s     r   r   z&DeterministicFakeEmbedding.embed_query   s    ""t(<"==r   N)r    r!   r"   r#   r$   r%   r   r&   r   staticmethodr'   r4   r   r   r   r(   r   r   r*   r*   F   s    %N I+03 04; 0
 Q Q Q Q LT#Y L4U3D L L > >U > >r   r*   )r#   
contextlibr0   pydanticr   typing_extensionsr   langchain_core.embeddingsr   suppressImportErrornumpyr   r   r*   r(   r   r   <module>rA      s_    G    & 0Z% 3%Z 3%l;>Y ;>u s   AA