File: test_multi_slot_rank.py

package info (click to toggle)
python-azure 20250603%2Bgit-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 851,724 kB
  • sloc: python: 7,362,925; ansic: 804; javascript: 287; makefile: 195; sh: 145; xml: 109
file content (78 lines) | stat: -rw-r--r-- 3,303 bytes parent folder | download
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
# ------------------------------------
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# ------------------------------------
from devtools_testutils import AzureRecordedTestCase, recorded_by_proxy
import personalizer_helpers


class TestMultiSlotRank(AzureRecordedTestCase):
    @personalizer_helpers.PersonalizerPreparer()
    @recorded_by_proxy
    def test_rank_with_no_context_features(self, **kwargs):
        personalizer_endpoint = kwargs.pop("personalizer_endpoint_multi_slot")
        personalizer_api_key = kwargs.pop("personalizer_api_key_multi_slot")
        client = personalizer_helpers.create_personalizer_client(personalizer_endpoint, personalizer_api_key)
        personalizer_helpers.enable_multi_slot(personalizer_endpoint, personalizer_api_key, self.is_live)
        event_id = "123456789"
        request = {"actions": get_actions(), "slots": get_slots(), "eventId": event_id}
        response = client.rank_multi_slot(request)
        assert event_id == response.get("eventId")
        slots = response.get("slots")
        assert len(slots) == len(get_slots())
        assert slots[0]["rewardActionId"] == "NewsArticle"
        assert slots[1]["rewardActionId"] == "SportsArticle"

    @personalizer_helpers.PersonalizerPreparer()
    @recorded_by_proxy
    def test_rank_with_context_features(self, **kwargs):
        personalizer_endpoint = kwargs.pop("personalizer_endpoint_multi_slot")
        personalizer_api_key = kwargs.pop("personalizer_api_key_multi_slot")
        client = personalizer_helpers.create_personalizer_client(personalizer_endpoint, personalizer_api_key)
        personalizer_helpers.enable_multi_slot(personalizer_endpoint, personalizer_api_key, self.is_live)
        event_id = "123456789"
        request = {
            "eventId": event_id,
            "actions": get_actions(),
            "slots": get_slots(),
            "contextFeatures": get_context_features(),
        }
        response = client.rank_multi_slot(request)
        slots = response.get("slots")
        assert len(slots) == len(get_slots())
        assert slots[0]["rewardActionId"] == "NewsArticle"
        assert slots[1]["rewardActionId"] == "SportsArticle"


def get_actions():
    return [
        {"id": "NewsArticle", "features": [{"type": "News"}]},
        {"id": "SportsArticle", "features": [{"type": "Sports"}]},
        {"id": "EntertainmentArticle", "features": [{"type": "Entertainment"}]},
    ]


def get_context_features():
    return [
        {"user": {"profileType": "anonymousUser", "latLong": "47.6,-122.1"}},
        {"environment": {"dayOfMonth": "28", "monthOfYear": "8", "weather": "Sunny"}},
        {"device": {"mobile": True, "windows": True}},
        {"recentActivity": {"itemsInCart": 3}},
    ]


def get_slots():
    return [
        {
            "id": "Main Article",
            "baselineAction": "NewsArticle",
            "positionFeatures": [{"Size": "Large", "Position": "Top Middle"}],
            "excludedActions": ["SportsArticle", "EntertainmentArticle"],
        },
        {
            "id": "Side Bar",
            "baselineAction": "SportsArticle",
            "positionFeatures": [{"Size": "Small", "Position": "Bottom Right"}],
            "excludedActions": ["EntertainmentArticle"],
        },
    ]