Spaces:
Runtime error
Runtime error
File size: 7,967 Bytes
ed4d993 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
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)
|