
    7|h1                         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y)    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y)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     g/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/sambanova.pyvalidate_environmentz*SambaStudioEmbeddings.validate_environmentK   s     5I57X5
01 5I--)	5
01 7K//7
23
 8L008
34
 4H46V4
/0     c           	      
   d| j                   v r| j                  }nL| j                  j                         D ci c]'  \  }}|t        |      j                  t        |      d) }}}t        j                  |      }|S c c}}w )z
        Get the tuning parameters to use when calling the model

        Returns:
            The tuning parameters as a JSON string.
        api/v2/predict/generic)typevalue)r   r   itemsr-   __name__strjsondumps)selftuning_params_dictkvtuning_paramss        r(   _get_tuning_paramsz(SambaStudioEmbeddings._get_tuning_paramsf   s     $t'K'KK!%!2!2 "..446"Aq DG,,s1v>>" " 

#56"s   ,A?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   )r4   r:   s     r(   _get_full_urlz#SambaStudioEmbeddings._get_full_urlw   s,     667q9]9]8^^_`d_effr*   textsc              #   V   K   t        dt        |      |      D ]  }||||z      yw)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)r4   r>   r   is       r(   _iterate_over_batchesz+SambaStudioEmbeddings._iterate_over_batches   s5      q#e*j1 	,AA
N++	,s   ')Nc                    || j                   }t        j                         }| j                  | j                   d| j
                         }t        j                  | j                               }g }d| j                  v r| j                  ||      D ]  }||d}|j                  |d| j                  i|      }	|	j                  dk7  r%t        d|	j                   d|	j                         	 |	j                         d	   }
|j!                  |
        |S d| j                  v r| j                  ||      D ]  }t%        |      D cg c]  \  }}d| |d }}}||d}|j                  |d| j                  i|      }	|	j                  dk7  r%t        d|	j                   d|	j                         	 |	j                         d   D cg c]  }|d   	 }
}|j!                  |
        |S d| j                  v r| j                  ||      D ]  }||d}|j                  |d| j                  i|      }	|	j                  dk7  r%t        d|	j                   d|	j                         	 |j'                  d      r|	j                         d   }
n|	j                         d   }
|j!                  |
        |S t)        d| j                   d      # t"        $ r t#        d
|	j                               w xY wc c}}w c c}w # t"        $ r t#        d|	j                               w xY w# t"        $ r t#        d|	j                               w xY w)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
        r<   api/predict/nlpinputsparamskeyheadersr2      1Sambanova /complete call failed with status code .
 Details: data%'data' not found in endpoint responser,   itemidr.   r/   rH   r/   r.   &'items' not found in endpoint responser"   	instancesrH   select_expertpredictions,'predictions' not found in endpoint responsehandling of endpoint uri:  not implemented)r   requestsSessionr=   r   r   r2   loadsr9   r   rC   postr   status_codeRuntimeErrortextextendKeyError	enumerateget
ValueError)r4   r>   r   http_sessionurlrH   
embeddingsbatchrO   response	embeddingrB   rQ   r/   s                 r(   embed_documentsz%SambaStudioEmbeddings.embed_documents   s    J'')  556a8_8_7`a
 D3356
 D DD33E:F "'6:',,"D$G$GH - 
 ''3.&K#//0hmm_N  ( 7I%%i0X o &)M)MM33E:F ENuEU:A!TT!:5  "'&9',,"D$G$GH - 
 ''3.&K#//0hmm_N ;C==?7;S T4g TI T%%i0#l = #d&J&JJ33E:F %*f=',,"D$G$GH - 
 ''3.&K#//0hmm_N 
zz/2$,MMOM$B	$,MMOM$B	%%i0#: 	 ,T-Q-Q,RRbc s   "?   !U "@  2   "F  s=   /$KK97LK?L,A	L+$K6?L$L(+$Mrc   c                 B   t        j                         }| j                  | j                   d| j                         }t        j                  | j                               }d| j                  v rs|g|d}|j                  |d| j                  i|      }|j                  dk7  r%t        d|j                   d|j                         	 |j                         d	   d
   }|S d| j                  v ryd|dg|d}|j                  |d| j                  i|      }|j                  dk7  r%t        d|j                   d|j                         	 |j                         d   d
   d   }|S d| j                  v r|g|d}|j                  |d| j                  i|      }|j                  dk7  r%t        d|j                   d|j                         	 |j                  d      r|j                         d   d
   }n|j                         d   d
   }|S t!        d| j                   d      # t        $ r t        d|j                               w xY w# t        $ r t        d|j                               w xY w# t        $ r t        d|j                               w xY w)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<   rE   rF   rI   rJ   rL   rM   rN   rO   r   rP   r,   item0rR   rT   r/   r.   rU   r"   rV   rX   rY   rZ   r[   r\   )r]   r^   r=   r   r   r2   r_   r9   r   r`   r   ra   rb   rc   re   rg   rh   )r4   rc   ri   rj   rH   rO   rm   rn   s           r(   embed_queryz!SambaStudioEmbeddings.embed_query   s     '')  556a8_8_7`a
 D3356 D DD#f7D#(( C CD ) H
 ##s*"G++,M(--J $MMOF3A6	n a &)M)MM%,t<=PD#(( C CD ) H
 ##s*"G++,M(--J $MMOG4Q7@	F 9 #d&J&JJ"&6:D#(( C CD ) H
 ##s*"G++,M(--J 	::o. ( >q AI ( >q AI 	 ,T-Q-Q,RRbc e  ;MMO (  <MMO .  BMMO s$   H, I >I: ,$I$I7:$J)N)r0   
__module____qualname____doc__r   r1   __annotations__r   r   r   r   r   dictr   intr   model_configr
   r   r)   r9   r=   r   r   rC   r   floatro   rr   r   r*   r(   r   r      s'   !F ,.#S-+-#S--/%s/-.0&0.*,"C,L$2J-26L$ 4  4C "g# g# g
,49 
,# 
,) 
, =Ab#Yb,4SMb	d5k	bHS SU Sr*   r   )r2   typingr   r   r   r   r]   langchain_core._api.deprecationr   langchain_core.embeddingsr   langchain_core.utilsr	   r
   pydanticr   r   r   r   r*   r(   <module>r      sK     2 2  6 0 ? * 
B
tIz t
tr*   