the-algorithm/product-mixer/component-library/src/main/scala/com/twitter/product_mixer/component_library/decorator/urt/builder/flexible_injection_pipeline/FlipPromptModuleGrouping.scala
twitter-team ef4c5eb65e Twitter Recommendation Algorithm
Please note we have force-pushed a new initial commit in order to remove some publicly-available Twitter user information. Note that this process may be required in the future.
2023-03-31 17:36:31 -05:00

24 lines
1.3 KiB
Scala

package com.twitter.product_mixer.component_library.decorator.urt.builder.flexible_injection_pipeline
import com.twitter.product_mixer.component_library.decorator.urt.GroupByKey
import com.twitter.product_mixer.component_library.pipeline.candidate.flexible_injection_pipeline.transformer.FlipPromptInjectionsFeature
import com.twitter.product_mixer.component_library.pipeline.candidate.flexible_injection_pipeline.transformer.FlipPromptOffsetInModuleFeature
import com.twitter.product_mixer.core.feature.featuremap.FeatureMap
import com.twitter.product_mixer.core.model.common.UniversalNoun
import com.twitter.product_mixer.core.pipeline.PipelineQuery
object FlipPromptModuleGrouping extends GroupByKey[PipelineQuery, UniversalNoun[Any], Int] {
override def apply(
query: PipelineQuery,
candidate: UniversalNoun[Any],
candidateFeatures: FeatureMap
): Option[Int] = {
val injection = candidateFeatures.get(FlipPromptInjectionsFeature)
val offsetInModule = candidateFeatures.getOrElse(FlipPromptOffsetInModuleFeature, None)
// We return None for any candidate that doesn't have an offsetInModule, so that they are left as independent items.
// Otherwise, we return a hash of the injection instance which will be used to aggregate candidates with matching values into a module.
offsetInModule.map(_ => injection.hashCode())
}
}