
    Ng1                     x    d dl Z d dlmZmZmZmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZmZ  G d dee          ZdS )    N)Dict	GeneratorListOptional)
Embeddings)get_from_dict_or_envpre_init)	BaseModel
ConfigDictc            	       \   e Zd ZU dZdZeed<   	 dZeed<   	 dZeed<   	 dZ	eed<   	 dZ
eed<   	 i Zeed<   	 d	Zeed
<   	  ed          Zededefd            ZdefdZdedefdZdee         d
edefdZ	 ddee         d
ee         deee                  fdZdedee         fdZdS )SambaStudioEmbeddingsa3  SambaNova embedding models.

    To use, you should have the environment variables
    ``SAMBASTUDIO_EMBEDDINGS_BASE_URL``, ``SAMBASTUDIO_EMBEDDINGS_BASE_URI``
    ``SAMBASTUDIO_EMBEDDINGS_PROJECT_ID``, ``SAMBASTUDIO_EMBEDDINGS_ENDPOINT_ID``,
    ``SAMBASTUDIO_EMBEDDINGS_API_KEY``
    set with your personal sambastudio variable or pass it as a named parameter
    to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import SambaStudioEmbeddings

            embeddings = SambaStudioEmbeddings(sambastudio_embeddings_base_url=base_url,
                                          sambastudio_embeddings_base_uri=base_uri,
                                          sambastudio_embeddings_project_id=project_id,
                                          sambastudio_embeddings_endpoint_id=endpoint_id,
                                          sambastudio_embeddings_api_key=api_key,
                                          batch_size=32)
            (or)

            embeddings = SambaStudioEmbeddings(batch_size=32)

            (or)

            # CoE example
            embeddings = SambaStudioEmbeddings(
                batch_size=1,
                model_kwargs={
                    'select_expert':'e5-mistral-7b-instruct'
                }
            )
     sambastudio_embeddings_base_urlsambastudio_embeddings_base_uri!sambastudio_embeddings_project_id"sambastudio_embeddings_endpoint_idsambastudio_embeddings_api_keymodel_kwargs    
batch_size )protected_namespacesvaluesreturnc                     t          |dd          |d<   t          |ddd          |d<   t          |dd          |d<   t          |d	d
          |d	<   t          |dd          |d<   |S )z?Validate that api key and python package exists in environment.r   SAMBASTUDIO_EMBEDDINGS_BASE_URLr   SAMBASTUDIO_EMBEDDINGS_BASE_URIapi/predict/generic)defaultr   !SAMBASTUDIO_EMBEDDINGS_PROJECT_IDr   "SAMBASTUDIO_EMBEDDINGS_ENDPOINT_IDr   SAMBASTUDIO_EMBEDDINGS_API_KEY)r   )clsr   s     d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/sambanova.pyvalidate_environmentz*SambaStudioEmbeddings.validate_environmentE   s     5I57X5
 5
01 5I--)	5
 5
 5
01 7K//7
 7
23
 8L008
 8
34
 4H46V4
 4
/0     c                     d| j         v r| j        }n#d | j                                        D             }t          j        |          }|S )z
        Get the tuning parameters to use when calling the model

        Returns:
            The tuning parameters as a JSON string.
        api/v2/predict/genericc                 ^    i | ]*\  }}|t          |          j        t          |          d +S ))typevalue)r*   __name__str).0kvs      r$   
<dictcomp>z<SambaStudioEmbeddings._get_tuning_params.<locals>.<dictcomp>j   sE     " " "Aq DGG,s1vv>>" " "r&   )r   r   itemsjsondumps)selftuning_params_dicttuning_paramss      r$   _get_tuning_paramsz(SambaStudioEmbeddings._get_tuning_params`   sd     $t'KKK!%!2" "!.4466" " " 
#566r&   pathc                 *    | j          d| j         d| S )z
        Return the full API URL for a given path.

        :param str path: the sub-path
        :returns: the full API URL for the sub-path
        :rtype: str
        /)r   r   )r5   r9   s     r$   _get_full_urlz#SambaStudioEmbeddings._get_full_urlq   s'     6ff9]ff`dfffr&   textsc              #   j   K   t          dt          |          |          D ]}||||z            V  dS )af  Generator for creating batches in the embed documents method
        Args:
            texts (List[str]): list of strings to embed
            batch_size (int, optional): batch size to be used for the embedding model.
            Will depend on the RDU endpoint used.
        Yields:
            List[str]: list (batch) of strings of size batch size
        r   N)rangelen)r5   r=   r   is       r$   _iterate_over_batchesz+SambaStudioEmbeddings._iterate_over_batches{   sP       q#e**j11 	, 	,AA
N*+++++	, 	,r&   Nc                    || j         }t          j                    }|                     | j         d| j                   }t          j        |                                           }g }d| j	        v r| 
                    ||          D ]}||d}|                    |d| j        i|          }	|	j        dk    rt          d|	j         d	|	j                   	 |	                                d
         }
|                    |
           # t"          $ r# t#          d|	                                          w xY wnd| j	        v r| 
                    ||          D ]}d t%          |          D             }||d}|                    |d| j        i|          }	|	j        dk    rt          d|	j         d	|	j                   	 d |	                                d         D             }
|                    |
           # t"          $ r# t#          d|	                                          w xY wnd| j	        v r| 
                    ||          D ]}||d}|                    |d| j        i|          }	|	j        dk    rt          d|	j         d	|	j                   	 |                    d          r|	                                d         }
n|	                                d         }
|                    |
           # t"          $ r# t#          d|	                                          w xY wnt)          d| j	         d          |S )a<  Returns a list of embeddings for the given sentences.
        Args:
            texts (`List[str]`): List of texts to encode
            batch_size (`int`): Batch size for the encoding

        Returns:
            `List[np.ndarray]` or `List[tensor]`: List of embeddings
            for the given sentences
        Nr;   api/predict/nlpinputsparamskeyheadersr3      1Sambanova /complete call failed with status code .
 Details: data%'data' not found in endpoint responser(   c                 $    g | ]\  }}d | |dS )itemidr+   r   )r.   rA   rQ   s      r$   
<listcomp>z9SambaStudioEmbeddings.embed_documents.<locals>.<listcomp>   s7       :A!T:!::55  r&   r2   rG   c                     g | ]
}|d          S )r+   r   )r.   rQ   s     r$   rT   z9SambaStudioEmbeddings.embed_documents.<locals>.<listcomp>   s     T T T4g T T Tr&   r2   &'items' not found in endpoint responser   	instancesrG   select_expertpredictions,'predictions' not found in endpoint responsehandling of endpoint uri:  not implemented)r   requestsSessionr<   r   r   r3   loadsr8   r   rB   postr   status_codeRuntimeErrortextextendKeyError	enumerateget
ValueError)r5   r=   r   http_sessionurlrG   
embeddingsbatchrN   response	embeddingr2   s               r$   embed_documentsz%SambaStudioEmbeddings.embed_documents   sW    J'))  5aa8_aa
 
 D335566
 DDD33E:FF  "'6::',,"D$GH -  
 '3..&N#/N N>FmN N   ( 7I%%i0000   "?   * &)MMM33E:FF   ENuEUEU   "'&99',,"D$GH -  
 '3..&N#/N N>FmN N   T T8==??7;S T T TI%%i0000   "@   %0 #d&JJJ33E:FF  %*f==',,"D$GH -  
 '3..&N#/N N>FmN N  
zz/22 C$,MMOOM$B		$,MMOOM$B	%%i0000   "F   %2 cT-Qccc   s%   /D		-D69G>>-H+ AL  -L-re   c                 n   t          j                    }|                     | j         d| j                   }t          j        |                                           }d| j        v r|g|d}|	                    |d| j
        i|          }|j        dk    rt          d|j         d|j                   	 |                                d	         d
         }n# t          $ r# t          d|                                          w xY wd| j        v rd|dg|d}|	                    |d| j
        i|          }|j        dk    rt          d|j         d|j                   	 |                                d         d
         d         }n(# t          $ r# t          d|                                          w xY wd| j        v r|g|d}|	                    |d| j
        i|          }|j        dk    rt          d|j         d|j                   	 |                    d          r!|                                d         d
         }n |                                d         d
         }nH# t          $ r# t          d|                                          w xY wt!          d| j         d          |S )a  Returns a list of embeddings for the given sentences.
        Args:
            sentences (`List[str]`): List of sentences to encode

        Returns:
            `List[np.ndarray]` or `List[tensor]`: List of embeddings
            for the given sentences
        r;   rD   rE   rH   rI   rK   rL   rM   rN   r   rO   r(   item0rR   rU   r2   r+   rW   r   rX   rZ   r[   r\   r]   r^   )r_   r`   r<   r   r   r3   ra   r8   r   rb   r   rc   rd   re   rg   ri   rj   )r5   re   rk   rl   rG   rN   ro   rp   s           r$   embed_queryz!SambaStudioEmbeddings.embed_query   s     '))  5aa8_aa
 
 D335566 DDD#f77D#(( CD )  H
 #s**"J+J J:B-J J  $MMOOF3A6		   ;MMOO   &)MMM%,t<<=PPD#(( CD )  H
 #s**"J+J J:B-J J  $MMOOG4Q7@		   <MMOO   #d&JJJ"&6::D#(( CD )  H
 #s**"J+J J:B-J J  	::o.. B ( >q AII ( >q AI   BMMOO   cT-Qccc   s%   7 C -D%&F -F:AI- --J)N)r,   
__module____qualname____doc__r   r-   __annotations__r   r   r   r   r   dictr   intr   model_configr	   r   r%   r8   r<   r   r   rB   r   floatrq   rt   r   r&   r$   r   r   
   s        ! !F ,.#S---+-#S----/%s///-.0&000.*,"C,,,L$2J-:2666L$ 4    X4C    "g# g# g g g g
,49 
,# 
,) 
, 
, 
, 
, =Ab b#Yb,4SMb	d5k	b b b bHS SU S S S S S Sr&   r   )r3   typingr   r   r   r   r_   langchain_core.embeddingsr   langchain_core.utilsr   r	   pydanticr
   r   r   r   r&   r$   <module>r      s     2 2 2 2 2 2 2 2 2 2 2 2  0 0 0 0 0 0 ? ? ? ? ? ? ? ? * * * * * * * *t t t t tIz t t t t tr&   