From d61c4b028c66bb058fe0e3e6bc8fa3576c56a5eb Mon Sep 17 00:00:00 2001 From: Ritika Gupta Date: Tue, 12 Sep 2023 16:26:35 +0000 Subject: [PATCH] [Bling Magic Stack] Adding ParcelTracking module for M118. (cherry picked from commit add41bc3616df6002db7ef48b8f8b50b5dbcd19a) Change-Id: I74e519e3697ec8a7b368aa0d32b0dff050bbe1f1 Bug: 1479727, b/293190474 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4844812 Reviewed-by: Siddhartha S Reviewed-by: Chris Lu Commit-Queue: Ritika Gupta Cr-Original-Commit-Position: refs/heads/main@{#1193818} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4854592 Cr-Commit-Position: refs/branch-heads/5993@{#208} Cr-Branched-From: 511350718e646be62331ae9d7213d10ec320d514-refs/heads/main@{#1192594} --- .../default_model/ios_module_ranker.cc | 51 +++++++++++++++---- .../ios_module_ranker_unittest.cc | 6 +-- .../segmentation_platform/public/constants.h | 1 + ...ation_platform_service_factory_unittest.mm | 3 +- .../content_suggestions_mediator.mm | 6 +++ 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/components/segmentation_platform/embedder/default_model/ios_module_ranker.cc b/components/segmentation_platform/embedder/default_model/ios_module_ranker.cc index 270f8d3b807d3e..00181839f6adc2 100644 --- a/components/segmentation_platform/embedder/default_model/ios_module_ranker.cc +++ b/components/segmentation_platform/embedder/default_model/ios_module_ranker.cc @@ -22,7 +22,7 @@ using proto::SegmentId; // Default parameters for IosModuleRanker model. constexpr SegmentId kSegmentId = SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_IOS_MODULE_RANKER; -constexpr int64_t kModelVersion = 2; +constexpr int64_t kModelVersion = 3; // Store 28 buckets of input data (28 days). constexpr int64_t kSignalStorageLength = 28; // Wait until we have 0 days of data. @@ -30,12 +30,13 @@ constexpr int64_t kMinSignalCollectionLength = 0; // Refresh the result every time. constexpr int64_t kResultTTLMinutes = 1; -constexpr std::array kIosModuleLabels = { - kMostVisitedTiles, kShortcuts, kSafetyCheck, kTabResumption}; +constexpr std::array kIosModuleLabels = { + kMostVisitedTiles, kShortcuts, kSafetyCheck, kTabResumption, + kParcelTracking}; -constexpr std::array kIosModuleInputContextKeys = { +constexpr std::array kIosModuleInputContextKeys = { kMostVisitedTilesFreshness, kShortcutsFreshness, kSafetyCheckFreshness, - kTabResumptionFreshness}; + kTabResumptionFreshness, kParcelTrackingFreshness}; // InputFeatures. @@ -47,10 +48,12 @@ constexpr std::array kEnumValueForShortcuts{/*Shortcuts=*/1}; constexpr std::array kEnumValueForSafetyCheck{/*SafetyCheck=*/7}; constexpr std::array kEnumValueForTabResumption{ /*TabResumption=*/8}; +constexpr std::array kEnumValueForParcelTracking{ + /*ParcelTracking=*/9}; // TODO(ritikagup) : Loop through all the modules for these features for better // readability. Set UMA metrics to use as input. -constexpr std::array kUMAFeatures = { +constexpr std::array kUMAFeatures = { // Most Visited Tiles // 0 MetadataWriter::UMAFeature::FromEnumHistogram("IOS.MagicStack.Module.Click", @@ -191,6 +194,32 @@ constexpr std::array kUMAFeatures = { 28, kEnumValueForTabResumption.data(), kEnumValueForTabResumption.size()), + + // Parcel Tracking + // 26 + MetadataWriter::UMAFeature::FromEnumHistogram( + "IOS.MagicStack.Module.Click", + 7, + kEnumValueForParcelTracking.data(), + kEnumValueForParcelTracking.size()), + // 27 + MetadataWriter::UMAFeature::FromEnumHistogram( + "IOS.MagicStack.Module.TopImpression", + 7, + kEnumValueForParcelTracking.data(), + kEnumValueForParcelTracking.size()), + // 28 + MetadataWriter::UMAFeature::FromEnumHistogram( + "IOS.MagicStack.Module.Click", + 28, + kEnumValueForParcelTracking.data(), + kEnumValueForParcelTracking.size()), + // 29 + MetadataWriter::UMAFeature::FromEnumHistogram( + "IOS.MagicStack.Module.TopImpression", + 28, + kEnumValueForParcelTracking.data(), + kEnumValueForParcelTracking.size()), }; } // namespace @@ -241,6 +270,7 @@ IosModuleRanker::GetModelConfig() { writer.AddFromInputContext("shortcuts_input", kShortcutsFreshness); writer.AddFromInputContext("safety_check_input", kSafetyCheckFreshness); writer.AddFromInputContext("tab_resumption_input", kTabResumptionFreshness); + writer.AddFromInputContext("parcel_tracking_input", kParcelTrackingFreshness); return std::make_unique(std::move(metadata), kModelVersion); } @@ -260,10 +290,11 @@ void IosModuleRanker::ExecuteModelWithInput( ModelProvider::Response response(kIosModuleLabels.size(), 0); // Default ranking - response[0] = 4; // Most Visited Tiles - response[1] = 3; // Shortcuts - response[2] = 2; // Safety Check - response[3] = 1; // Tab resumption + response[0] = 5; // Most Visited Tiles + response[1] = 4; // Shortcuts + response[2] = 3; // Safety Check + response[3] = 2; // Tab resumption + response[4] = 1; // Parcel Tracking base::SequencedTaskRunner::GetCurrentDefault()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), response)); diff --git a/components/segmentation_platform/embedder/default_model/ios_module_ranker_unittest.cc b/components/segmentation_platform/embedder/default_model/ios_module_ranker_unittest.cc index 5e7ca088f80250..439a51f9ec69d0 100644 --- a/components/segmentation_platform/embedder/default_model/ios_module_ranker_unittest.cc +++ b/components/segmentation_platform/embedder/default_model/ios_module_ranker_unittest.cc @@ -30,10 +30,10 @@ TEST_F(IosModuleRankerTest, ExecuteModelWithInput) { EXPECT_FALSE(ExecuteWithInput(/*inputs=*/{})); - std::vector input(30, 0); + std::vector input(35, 0); - ExpectClassifierResults( - input, {kMostVisitedTiles, kShortcuts, kSafetyCheck, kTabResumption}); + ExpectClassifierResults(input, {kMostVisitedTiles, kShortcuts, kSafetyCheck, + kTabResumption, kParcelTracking}); } } // namespace segmentation_platform diff --git a/components/segmentation_platform/public/constants.h b/components/segmentation_platform/public/constants.h index 849549095cde94..3a36eb15b1875c 100644 --- a/components/segmentation_platform/public/constants.h +++ b/components/segmentation_platform/public/constants.h @@ -183,6 +183,7 @@ const char kMostVisitedTiles[] = "MostVisitedTiles"; const char kShortcuts[] = "Shortcuts"; const char kSafetyCheck[] = "SafetyCheck"; const char kTabResumption[] = "TabResumption"; +const char kParcelTracking[] = "ParcelTracking"; // Input Context keys for freshness for IOS modules. const char kMostVisitedTilesFreshness[] = "most_visited_tiles_freshness"; diff --git a/ios/chrome/browser/segmentation_platform/segmentation_platform_service_factory_unittest.mm b/ios/chrome/browser/segmentation_platform/segmentation_platform_service_factory_unittest.mm index 1cfc996b88754b..21389b74c8b868 100644 --- a/ios/chrome/browser/segmentation_platform/segmentation_platform_service_factory_unittest.mm +++ b/ios/chrome/browser/segmentation_platform/segmentation_platform_service_factory_unittest.mm @@ -57,11 +57,12 @@ void OnGetClassificationResult(base::RepeatingClosure closure, const ClassificationResult& result) { ASSERT_EQ(result.status, PredictionStatus::kSucceeded); EXPECT_FALSE(result.ordered_labels.empty()); - EXPECT_EQ(4u, result.ordered_labels.size()); + EXPECT_EQ(5u, result.ordered_labels.size()); EXPECT_EQ("MostVisitedTiles", result.ordered_labels[0]); EXPECT_EQ("Shortcuts", result.ordered_labels[1]); EXPECT_EQ("SafetyCheck", result.ordered_labels[2]); EXPECT_EQ("TabResumption", result.ordered_labels[3]); + EXPECT_EQ("ParcelTracking", result.ordered_labels[4]); std::move(closure).Run(); } diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm index f2fc9caa2c5cfb..4e86985f1ebb6f 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm @@ -1104,6 +1104,12 @@ - (void)fetchMagicStackModuleRankingFromSegmentationPlatform { segmentation_platform::kTabResumptionFreshness, segmentation_platform::processing::ProcessedValue::FromFloat( tab_resumption_freshness_impression_count)); + int parcel_tracking_freshness_impression_count = _localState->GetInteger( + prefs::kIosMagicStackSegmentationParcelTrackingImpressionsSinceFreshness); + input_context->metadata_args.emplace( + segmentation_platform::kParcelTrackingFreshness, + segmentation_platform::processing::ProcessedValue::FromFloat( + parcel_tracking_freshness_impression_count)); __weak ContentSuggestionsMediator* weakSelf = self; segmentation_platform::PredictionOptions options; options.on_demand_execution = true;