Spaces:
Runtime error
Runtime error
langchain-qa-bot
/
docs
/langchain
/libs
/experimental
/langchain_experimental
/recommenders
/amazon_personalize.py
from typing import Any, List, Mapping, Optional, Sequence | |
class AmazonPersonalize: | |
"""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>' ) | |
""" | |
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]: | |
"""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>' )\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. | |
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) | |