2024-02-19 18:36:37 +00:00
|
|
|
from typing import Any, List, Mapping, Optional, Sequence
|
|
|
|
|
|
|
|
|
|
|
|
class AmazonPersonalize:
|
2024-03-26 14:38:10 +00:00
|
|
|
"""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).
|
2024-02-19 18:36:37 +00:00
|
|
|
|
|
|
|
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>' )
|
|
|
|
"""
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
self,
|
|
|
|
campaign_arn: Optional[str] = None,
|
|
|
|
recommender_arn: Optional[str] = None,
|
|
|
|
client: Optional[Any] = None,
|
|
|
|
credentials_profile_name: Optional[str] = None,
|
|
|
|
region_name: Optional[str] = None,
|
|
|
|
):
|
|
|
|
self.campaign_arn = campaign_arn
|
|
|
|
self.recommender_arn = recommender_arn
|
|
|
|
|
|
|
|
if campaign_arn and recommender_arn:
|
|
|
|
raise ValueError(
|
|
|
|
"Cannot initialize AmazonPersonalize with both "
|
|
|
|
"campaign_arn and recommender_arn."
|
|
|
|
)
|
|
|
|
|
|
|
|
if not campaign_arn and not recommender_arn:
|
|
|
|
raise ValueError(
|
|
|
|
"Cannot initialize AmazonPersonalize. Provide one of "
|
|
|
|
"campaign_arn or recommender_arn"
|
|
|
|
)
|
|
|
|
|
|
|
|
try:
|
|
|
|
if client is not None:
|
|
|
|
self.client = client
|
|
|
|
else:
|
|
|
|
import boto3
|
|
|
|
import botocore.config
|
|
|
|
|
|
|
|
if credentials_profile_name is not None:
|
|
|
|
session = boto3.Session(profile_name=credentials_profile_name)
|
|
|
|
else:
|
|
|
|
# use default credentials
|
|
|
|
session = boto3.Session()
|
|
|
|
|
|
|
|
client_params = {}
|
|
|
|
if region_name:
|
|
|
|
client_params["region_name"] = region_name
|
|
|
|
|
|
|
|
service = "personalize-runtime"
|
|
|
|
session_config = botocore.config.Config(user_agent_extra="langchain")
|
|
|
|
client_params["config"] = session_config
|
|
|
|
self.client = session.client(service, **client_params)
|
|
|
|
|
|
|
|
except ImportError:
|
|
|
|
raise ModuleNotFoundError(
|
|
|
|
"Could not import boto3 python package. "
|
|
|
|
"Please install it with `pip install boto3`."
|
|
|
|
)
|
|
|
|
|
|
|
|
def get_recommendations(
|
|
|
|
self,
|
|
|
|
user_id: Optional[str] = None,
|
|
|
|
item_id: Optional[str] = None,
|
|
|
|
filter_arn: Optional[str] = None,
|
|
|
|
filter_values: Optional[Mapping[str, str]] = None,
|
|
|
|
num_results: Optional[int] = 10,
|
|
|
|
context: Optional[Mapping[str, str]] = None,
|
|
|
|
promotions: Optional[Sequence[Mapping[str, Any]]] = None,
|
|
|
|
metadata_columns: Optional[Mapping[str, Sequence[str]]] = None,
|
|
|
|
**kwargs: Any,
|
|
|
|
) -> Mapping[str, Any]:
|
2024-02-24 02:24:16 +00:00
|
|
|
"""Get recommendations from Amazon Personalize service.
|
|
|
|
|
|
|
|
See more details at:
|
2024-02-19 18:36:37 +00:00
|
|
|
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>' )\n
|
|
|
|
response = personalize_client.get_recommendations(user_id="1")
|
|
|
|
|
|
|
|
"""
|
|
|
|
if not user_id and not item_id:
|
|
|
|
raise ValueError("One of user_id or item_id is required")
|
|
|
|
|
|
|
|
if filter_arn:
|
|
|
|
kwargs["filterArn"] = filter_arn
|
|
|
|
if filter_values:
|
|
|
|
kwargs["filterValues"] = filter_values
|
|
|
|
if user_id:
|
|
|
|
kwargs["userId"] = user_id
|
|
|
|
if num_results:
|
|
|
|
kwargs["numResults"] = num_results
|
|
|
|
if context:
|
|
|
|
kwargs["context"] = context
|
|
|
|
if promotions:
|
|
|
|
kwargs["promotions"] = promotions
|
|
|
|
if item_id:
|
|
|
|
kwargs["itemId"] = item_id
|
|
|
|
if metadata_columns:
|
|
|
|
kwargs["metadataColumns"] = metadata_columns
|
|
|
|
if self.campaign_arn:
|
|
|
|
kwargs["campaignArn"] = self.campaign_arn
|
|
|
|
if self.recommender_arn:
|
|
|
|
kwargs["recommenderArn"] = self.recommender_arn
|
|
|
|
|
|
|
|
return self.client.get_recommendations(**kwargs)
|
|
|
|
|
|
|
|
def get_personalized_ranking(
|
|
|
|
self,
|
|
|
|
user_id: str,
|
|
|
|
input_list: List[str],
|
|
|
|
filter_arn: Optional[str] = None,
|
|
|
|
filter_values: Optional[Mapping[str, str]] = None,
|
|
|
|
context: Optional[Mapping[str, str]] = None,
|
|
|
|
metadata_columns: Optional[Mapping[str, Sequence[str]]] = None,
|
|
|
|
**kwargs: Any,
|
|
|
|
) -> Mapping[str, Any]:
|
|
|
|
"""Re-ranks a list of recommended items for the given user.
|
2024-02-24 02:24:16 +00:00
|
|
|
|
2024-02-19 18:36:37 +00:00
|
|
|
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>' )\n
|
|
|
|
response = personalize_client.get_personalized_ranking(user_id="1",
|
|
|
|
input_list=["123,"256"])
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
if filter_arn:
|
|
|
|
kwargs["filterArn"] = filter_arn
|
|
|
|
if filter_values:
|
|
|
|
kwargs["filterValues"] = filter_values
|
|
|
|
if user_id:
|
|
|
|
kwargs["userId"] = user_id
|
|
|
|
if input_list:
|
|
|
|
kwargs["inputList"] = input_list
|
|
|
|
if context:
|
|
|
|
kwargs["context"] = context
|
|
|
|
if metadata_columns:
|
|
|
|
kwargs["metadataColumns"] = metadata_columns
|
|
|
|
kwargs["campaignArn"] = self.campaign_arn
|
|
|
|
|
|
|
|
return self.client.get_personalized_ranking(kwargs)
|