
    +#h                     j    d Z ddlmZmZ ddlmZmZ  G d de      Z G d de      Z G d d	e      Z	y
)zAWS providers for LMs.    )ABCabstractmethod)AnyOptionalc                       e Zd ZdZ	 	 ddededee   deddf
dZdefd	Ze	d
ededefd       Z
deeef   deeeeef   f   fdZy)AWSProvidera  This abstract class adds support for AWS model providers such as Bedrock and SageMaker.
    The subclasses such as Bedrock and Sagemaker implement the abstract method _call_model and work in conjunction with the AWSModel classes.
    Usage Example:
        bedrock = dspy.Bedrock(region_name="us-west-2")
        bedrock_mixtral = dspy.AWSMistral(bedrock, "mistral.mixtral-8x7b-instruct-v0:1", **kwargs)
        bedrock_haiku = dspy.AWSAnthropic(bedrock, "anthropic.claude-3-haiku-20240307-v1:0", **kwargs)
        bedrock_llama2 = dspy.AWSMeta(bedrock, "meta.llama2-13b-chat-v1", **kwargs)

        sagemaker = dspy.Sagemaker(region_name="us-west-2")
        sagemaker_model = dspy.AWSMistral(sagemaker, "<YOUR_ENDPOINT_NAME>", **kwargs)
    Nregion_nameservice_nameprofile_namebatch_n_enabledreturnc                     	 ddl }| |j                  ||      | _        || _        y|j	                  |      j                  ||      | _        || _        y# t        $ r}t        d      |d}~ww xY w)a[  _summary_.

        Args:
            region_name (str, optional): The AWS region where this LM is hosted.
            service_name (str): Used in context of invoking the boto3 API.
            profile_name (str, optional): boto3 credentials profile.
            batch_n_enabled (bool): If False, call the LM N times rather than batching.
        r   Nz$pip install boto3 to use AWS models.)r	   )r   )boto3ImportErrorclient	predictorSessionr   )selfr	   r
   r   r   r   excs          V/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dsp/modules/aws_providers.py__init__zAWSProvider.__init__   s    	O "\\,K\PDN  / #]]]ELL' M DN
  /  	ODE3N	Os   A 	A2!A--A2c                 .    | j                   j                  S )zReturn the provider name.)	__class____name__)r   s    r   get_provider_namezAWSProvider.get_provider_name2   s    ~~&&&    model_idbodyc                      y)z'Call the model and return the response.N r   r   r   s      r   
call_modelzAWSProvider.call_model6   s    r   query_kwargsc                     d|v r|d   dkD  rd|d<   |d   dk  rd|d<   d|v r|d   dkD  rd|d<   |d   dk  rd|d<   d}| j                   s|j                  dd      }||d<   ||fS )	z=Ensure that input kwargs can be used by Bedrock or Sagemaker.temperaturegGz?g{Gz?top_pn   num_generations)r   pop)r   r#   r(   s      r   sanitize_kwargszAWSProvider.sanitize_kwargs:   s    L(M*T1.2]+M*T1.2]+l"G$t+(,W%G$t+(,W%##  a(A./L*+,r   )NT)r   
__module____qualname____doc__strr   boolr   r   r   r"   dictr   tupleintr,   r    r   r   r   r      s    
  '+ $// / sm	/
 / 
/<'3 ' 63 6c 6c 6 6DcN uS$sTWx.EX?Y r   r   c            	       T     e Zd ZdZ	 	 ddedee   deddf fdZded	edefd
Z xZ	S )Bedrockz+This class adds support for Bedrock models.Nr	   r   r   r   c                 *    t         |   |d||       y)z_summary_.

        Args:
            region_name (str): The AWS region where this LM is hosted.
            profile_name (str, optional): boto3 credentials profile.
        zbedrock-runtimeNsuperr   )r   r	   r   r   r   s       r   r   zBedrock.__init__S   s     	&7Wr   r   r   c                 @    | j                   j                  ||dd      S )Napplication/json)modelIdr   acceptcontentType)r   invoke_modelr!   s      r   r"   zBedrock.call_modela   s*    ~~**%*	 + 
 	
r   )NF)
r   r-   r.   r/   r0   r   r1   r   r"   __classcell__r   s   @r   r6   r6   P   s\    5
 '+ %	XX smX 	X
 
X
3 
c 
c 
r   r6   c                   N     e Zd ZdZ	 d
dedee   ddf fdZdededefd	Z xZS )	Sagemakerz-This class adds support for Sagemaker models.Nr	   r   r   c                 (    t         |   |d|       y)z_summary_.

        Args:
            region_name (str, optional): The AWS region where this LM is hosted.
            profile_name (str, optional): boto3 credentials profile.
        zruntime.sagemakerNr8   )r   r	   r   r   s      r   r   zSagemaker.__init__m   s     	&9<Hr   r   r   c                 @    | j                   j                  ||dd      S )Nr;   )EndpointNameBodyAcceptContentType)r   invoke_endpointr!   s      r   r"   zSagemaker.call_modelz   s*    ~~--!%*	 . 
 	
r   )N)	r   r-   r.   r/   r0   r   r   r"   r@   rA   s   @r   rC   rC   j   sN    7
 '+II smI 
	I
3 
c 
c 
r   rC   N)
r/   abcr   r   typingr   r   r   r6   rC   r    r   r   <module>rM      s5     #  F# FR
k 
4
 
r   