blob: 6941d475681921844bb99ce4db8094d64af4313d [file]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/segmentation_platform/internal/migration/result_migration_utils.h"
#include <string>
#include "components/segmentation_platform/internal/migration/adaptive_toolbar_migration.h"
#include "components/segmentation_platform/internal/migration/binary_classifier_migration.h"
#include "components/segmentation_platform/public/proto/output_config.pb.h"
namespace segmentation_platform::pref_migration_utils {
proto::ClientResult CreateClientResultFromOldResult(
Config* config,
const SelectedSegment& old_result) {
if (GetClassifierTypeForMigration(config->segmentation_key) ==
proto::Predictor::kBinaryClassifier) {
return pref_migration_utils::CreateClientResultForBinaryClassifier(
config, old_result);
} else if (config->segmentation_key == kAdaptiveToolbarSegmentationKey) {
return pref_migration_utils::CreateClientResultForAdaptiveToolbar(
config, old_result);
} else {
NOTREACHED();
}
}
proto::Predictor::PredictorTypeCase GetClassifierTypeForMigration(
const std::string& segmentation_key) {
if (segmentation_key == kAdaptiveToolbarSegmentationKey ||
segmentation_key == kContextualPageActionsKey) {
return proto::Predictor::kMultiClassClassifier;
} else if (segmentation_key == kChromeLowUserEngagementSegmentationKey ||
segmentation_key == kCrossDeviceUserKey ||
segmentation_key == kDeviceSwitcherKey ||
segmentation_key == kFrequentFeatureUserKey ||
segmentation_key == kIntentionalUserKey ||
segmentation_key == kResumeHeavyUserKey ||
segmentation_key == kShoppingUserSegmentationKey) {
return proto::Predictor::kBinaryClassifier;
} else if (segmentation_key == kFeedUserSegmentationKey ||
segmentation_key == kPowerUserKey ||
segmentation_key == kSearchUserKey ||
segmentation_key == kDeviceTierKey ||
segmentation_key == kTabletProductivityUserKey) {
return proto::Predictor::kBinnedClassifier;
}
// This case is reached for non-legacy models, and it is ok to return
// regressor because migration is not required for these cases.
return proto::Predictor::kRegressor;
}
} // namespace segmentation_platform::pref_migration_utils