
    Ig1                     p    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y)    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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     e/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/embeddings/sambanova.pyvalidate_environmentz*SambaStudioEmbeddings.validate_environmentE   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_params`   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   )r0   r6   s     r$   _get_full_urlz#SambaStudioEmbeddings._get_full_urlq   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)r0   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
        r8   api/predict/nlpinputsparamskeyheadersr.      1Sambanova /complete call failed with status code .
 Details: data%'data' not found in endpoint responser(   itemidr*   r+   rD   r+   r*   &'items' not found in endpoint responser   	instancesrD   select_expertpredictions,'predictions' not found in endpoint responsehandling of endpoint uri:  not implemented)r   requestsSessionr9   r   r   r.   loadsr5   r   r?   postr   status_codeRuntimeErrortextextendKeyError	enumerateget
ValueError)r0   r:   r   http_sessionurlrD   
embeddingsbatchrK   response	embeddingr>   rM   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r_   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
        r8   rA   rB   rE   rF   rH   rI   rJ   rK   r   rL   r(   item0rN   rP   r+   r*   rQ   r   rR   rT   rU   rV   rW   rX   )rY   rZ   r9   r   r   r.   r[   r5   r   r\   r   r]   r^   r_   ra   rc   rd   )r0   r_   re   rf   rD   rK   ri   rj   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)r,   
__module____qualname____doc__r   r-   __annotations__r   r   r   r   r   dictr   intr   model_configr	   r   r%   r5   r9   r   r   r?   r   floatrk   rn   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   )r.   typingr   r   r   r   rY   langchain_core.embeddingsr   langchain_core.utilsr   r	   pydanticr
   r   r   r   r&   r$   <module>r{      s*     2 2  0 ? *tIz tr&   