
    ~
i1                         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
 d dlmZmZ d dlmZmZ  eddd	
           G d dee
                      ZdS )    N)Dict	GeneratorListOptional)
deprecated)
Embeddings)get_from_dict_or_envpre_init)	BaseModel
ConfigDictz0.3.16z1.0z)langchain_sambanova.SambaStudioEmbeddings)sinceremovalalternative_importc            	       \   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     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_community/embeddings/sambanova.pyvalidate_environmentz*SambaStudioEmbeddings.validate_environmentK   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>p   sE     " " "Aq DGG,s1vv>>" " "r*   )r   r   itemsjsondumps)selftuning_params_dicttuning_paramss      r(   _get_tuning_paramsz(SambaStudioEmbeddings._get_tuning_paramsf   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   )r9   r=   s     r(   _get_full_urlz#SambaStudioEmbeddings._get_full_urlw   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)r9   rA   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headersr7      1Sambanova /complete call failed with status code .
 Details: data%'data' not found in endpoint responser,   c                 $    g | ]\  }}d | |dS )itemidr/   r   )r2   rE   rU   s      r(   
<listcomp>z9SambaStudioEmbeddings.embed_documents.<locals>.<listcomp>   s7       :A!T:!::55  r*   r6   rK   c                     g | ]
}|d          S )r/   r   )r2   rU   s     r(   rX   z9SambaStudioEmbeddings.embed_documents.<locals>.<listcomp>   s     T T T4g T T Tr*   r6   &'items' not found in endpoint responser"   	instancesrK   select_expertpredictions,'predictions' not found in endpoint responsehandling of endpoint uri:  not implemented)r   requestsSessionr@   r   r   r7   loadsr<   r   rF   postr   status_codeRuntimeErrortextextendKeyError	enumerateget
ValueError)r9   rA   r   http_sessionurlrK   
embeddingsbatchrR   response	embeddingr6   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-ri   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?   rH   rI   rL   rM   rO   rP   rQ   rR   r   rS   r,   item0rV   rY   r6   r/   r[   r"   r\   r^   r_   r`   ra   rb   )rc   rd   r@   r   r   r7   re   r<   r   rf   r   rg   rh   ri   rk   rm   rn   )r9   ri   ro   rp   rK   rR   rs   rt   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)r0   
__module____qualname____doc__r   r1   __annotations__r   r   r   r   r   dictr   intr   model_configr
   r   r)   r<   r@   r   r   rF   r   floatru   rx   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   )r7   typingr   r   r   r   rc   langchain_core._api.deprecationr   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  6 6 6 6 6 6 0 0 0 0 0 0 ? ? ? ? ? ? ? ? * * * * * * * * 
B  
t t t t tIz t t 
t t tr*   