a
    dg                     @   s.   d dl mZmZmZmZmZ G dd dZdS )    )AnyListMappingOptionalSequencec                   @   s  e Zd ZdZdee ee ee ee ee dddZdee ee ee eeeef  ee	 eeeef  ee
eeef   eeee
e f  eeeef d
dd	Zdeee ee eeeef  eeeef  eeee
e f  eeeef d
ddZdS )AmazonPersonalizeaO  Amazon Personalize Runtime wrapper for executing real-time operations.

    See [this link for more details](https://docs.aws.amazon.com/personalize/latest/dg/API_Operations_Amazon_Personalize_Runtime.html).

    Args:
        campaign_arn: str, Optional: The Amazon Resource Name (ARN) of the campaign
                                    to use for getting recommendations.
        recommender_arn: str, Optional: The Amazon Resource Name (ARN) of the
                                    recommender to use to get recommendations
        client: Optional:  boto3 client
        credentials_profile_name: str, Optional :AWS profile name
        region_name: str, Optional:  AWS region, e.g., us-west-2

    Example:
        .. code-block:: python

        personalize_client = AmazonPersonalize (
            campaignArn='<my-campaign-arn>' )
    N)campaign_arnrecommender_arnclientcredentials_profile_nameregion_namec                 C   s   || _ || _|r|rtd|s,|s,tdz|d ur>|| _nldd l}dd l}|d urd|j|d}n| }i }	|r|||	d< d}
|jjdd}||	d	< |j|
fi |	| _W n t	y   t
d
Y n0 d S )NzOCannot initialize AmazonPersonalize with both campaign_arn and recommender_arn.zSCannot initialize AmazonPersonalize. Provide one of campaign_arn or recommender_arnr   )Zprofile_namer   zpersonalize-runtimeZ	langchain)Zuser_agent_extraconfigzRCould not import boto3 python package. Please install it with `pip install boto3`.)r   r	   
ValueErrorr
   boto3Zbotocore.configSessionr   ZConfigImportErrorModuleNotFoundError)selfr   r	   r
   r   r   r   ZbotocoresessionZclient_paramsZserviceZsession_config r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_experimental/recommenders/amazon_personalize.py__init__   s:    zAmazonPersonalize.__init__
   )
user_iditem_id
filter_arnfilter_valuesnum_resultscontext
promotionsmetadata_columnskwargsreturnc	           
      K   s   |s|st d|r||	d< |r(||	d< |r4||	d< |r@||	d< |rL||	d< |rX||	d< |rd||	d< |rp||	d	< | jr| j|	d
< | jr| j|	d< | jjf i |	S )a   Get recommendations from Amazon Personalize service.

        See more details at:
        https://docs.aws.amazon.com/personalize/latest/dg/API_RS_GetRecommendations.html

        Args:
            user_id: str, Optional: The user identifier
                                    for which to retrieve recommendations
            item_id: str, Optional: The item identifier
                                    for which to retrieve recommendations
            filter_arn: str, Optional:  The ARN of the filter
                                    to apply to the returned recommendations
            filter_values: Mapping, Optional: The values
                                    to use when filtering recommendations.
            num_results: int, Optional: Default=10: The number of results to return
            context: Mapping, Optional: The contextual metadata
                                    to use when getting recommendations
            promotions: Sequence, Optional: The promotions
                                    to apply to the recommendation request.
            metadata_columns: Mapping, Optional: The metadata Columns to be returned
                                    as part of the response.

        Returns:
            response: Mapping[str, Any]: Returns an itemList and recommendationId.

        Example:
            .. code-block:: python

        personalize_client = AmazonPersonalize(campaignArn='<my-campaign-arn>' )

        response = personalize_client.get_recommendations(user_id="1")

        z%One of user_id or item_id is required	filterArnfilterValuesuserIdZ
numResultsr   r   ZitemIdmetadataColumnscampaignArnZrecommenderArn)r   r   r	   r
   get_recommendations)
r   r   r   r   r   r   r   r   r    r!   r   r   r   r(   L   s.    ,

z%AmazonPersonalize.get_recommendations)r   
input_listr   r   r   r    r!   r"   c                 K   s^   |r||d< |r||d< |r$||d< |r0||d< |r<||d< |rH||d< | j |d< | j|S )a=  Re-ranks a list of recommended items for the given user.

        https://docs.aws.amazon.com/personalize/latest/dg/API_RS_GetPersonalizedRanking.html

        Args:
            user_id: str, Required: The user identifier
                                    for which to retrieve recommendations
            input_list: List[str], Required: A list of items (by itemId) to rank
            filter_arn: str, Optional:  The ARN of the filter to apply
            filter_values: Mapping, Optional: The values to use
                                                when filtering recommendations.
            context: Mapping, Optional: The contextual metadata
                                            to use when getting recommendations
            metadata_columns: Mapping, Optional: The metadata Columns to be returned
                                    as part of the response.

        Returns:
            response: Mapping[str, Any]: Returns personalizedRanking
                                                and recommendationId.

        Example:
            .. code-block:: python

        personalize_client = AmazonPersonalize(campaignArn='<my-campaign-arn>' )

        response = personalize_client.get_personalized_ranking(user_id="1",
                                                        input_list=["123,"256"])

        r#   r$   r%   Z	inputListr   r&   r'   )r   r
   get_personalized_ranking)r   r   r)   r   r   r   r    r!   r   r   r   r*      s    '
z*AmazonPersonalize.get_personalized_ranking)NNNNN)NNNNr   NNN)NNNN)__name__
__module____qualname____doc__r   strr   r   r   intr   r(   r   r*   r   r   r   r   r      s^        5        
J    
r   N)typingr   r   r   r   r   r   r   r   r   r   <module>   s   