85 lines
4.1 KiB
Scala
85 lines
4.1 KiB
Scala
package com.twitter.home_mixer.candidate_pipeline
|
|
|
|
import com.twitter.home_mixer.functional_component.candidate_source.StaleTweetsCacheCandidateSource
|
|
import com.twitter.home_mixer.functional_component.decorator.urt.builder.HomeFeedbackActionInfoBuilder
|
|
import com.twitter.home_mixer.functional_component.feature_hydrator.NamesFeatureHydrator
|
|
import com.twitter.home_mixer.functional_component.query_transformer.EditedTweetsCandidatePipelineQueryTransformer
|
|
import com.twitter.home_mixer.service.HomeMixerAlertConfig
|
|
import com.twitter.product_mixer.component_library.decorator.urt.UrtItemCandidateDecorator
|
|
import com.twitter.product_mixer.component_library.decorator.urt.builder.contextual_ref.ContextualTweetRefBuilder
|
|
import com.twitter.product_mixer.component_library.decorator.urt.builder.item.tweet.TweetCandidateUrtItemBuilder
|
|
import com.twitter.product_mixer.component_library.decorator.urt.builder.metadata.EmptyClientEventInfoBuilder
|
|
import com.twitter.product_mixer.component_library.model.candidate.TweetCandidate
|
|
import com.twitter.product_mixer.core.functional_component.candidate_source.BaseCandidateSource
|
|
import com.twitter.product_mixer.core.functional_component.decorator.CandidateDecorator
|
|
import com.twitter.product_mixer.core.functional_component.feature_hydrator.BaseCandidateFeatureHydrator
|
|
import com.twitter.product_mixer.core.functional_component.transformer.CandidatePipelineQueryTransformer
|
|
import com.twitter.product_mixer.core.functional_component.transformer.CandidatePipelineResultsTransformer
|
|
import com.twitter.product_mixer.core.model.common.identifier.CandidatePipelineIdentifier
|
|
import com.twitter.product_mixer.core.model.marshalling.response.rtf.safety_level.TimelineFocalTweetSafetyLevel
|
|
import com.twitter.product_mixer.core.model.marshalling.response.urt.contextual_ref.TweetHydrationContext
|
|
import com.twitter.product_mixer.core.model.marshalling.response.urt.item.tweet.TweetItem
|
|
import com.twitter.product_mixer.core.pipeline.PipelineQuery
|
|
import com.twitter.product_mixer.core.pipeline.candidate.DependentCandidatePipelineConfig
|
|
import javax.inject.Inject
|
|
import javax.inject.Singleton
|
|
|
|
/**
|
|
* Candidate Pipeline Config that fetches edited tweets from the Stale Tweets Cache
|
|
*/
|
|
@Singleton
|
|
case class EditedTweetsCandidatePipelineConfig @Inject() (
|
|
staleTweetsCacheCandidateSource: StaleTweetsCacheCandidateSource,
|
|
namesFeatureHydrator: NamesFeatureHydrator,
|
|
homeFeedbackActionInfoBuilder: HomeFeedbackActionInfoBuilder)
|
|
extends DependentCandidatePipelineConfig[
|
|
PipelineQuery,
|
|
Seq[Long],
|
|
Long,
|
|
TweetCandidate
|
|
] {
|
|
|
|
override val identifier: CandidatePipelineIdentifier = CandidatePipelineIdentifier("EditedTweets")
|
|
|
|
override val candidateSource: BaseCandidateSource[Seq[Long], Long] =
|
|
staleTweetsCacheCandidateSource
|
|
|
|
override val queryTransformer: CandidatePipelineQueryTransformer[
|
|
PipelineQuery,
|
|
Seq[Long]
|
|
] = EditedTweetsCandidatePipelineQueryTransformer
|
|
|
|
override val resultTransformer: CandidatePipelineResultsTransformer[
|
|
Long,
|
|
TweetCandidate
|
|
] = { candidate => TweetCandidate(id = candidate) }
|
|
|
|
override val postFilterFeatureHydration: Seq[
|
|
BaseCandidateFeatureHydrator[PipelineQuery, TweetCandidate, _]
|
|
] = Seq(namesFeatureHydrator)
|
|
|
|
override val decorator: Option[CandidateDecorator[PipelineQuery, TweetCandidate]] = {
|
|
val tweetItemBuilder = TweetCandidateUrtItemBuilder[PipelineQuery, TweetCandidate](
|
|
clientEventInfoBuilder = EmptyClientEventInfoBuilder,
|
|
entryIdToReplaceBuilder = Some((_, candidate, _) =>
|
|
Some(s"${TweetItem.TweetEntryNamespace}-${candidate.id.toString}")),
|
|
contextualTweetRefBuilder = Some(
|
|
ContextualTweetRefBuilder(
|
|
TweetHydrationContext(
|
|
// Apply safety level that includes canonical VF treatments that apply regardless of context.
|
|
safetyLevelOverride = Some(TimelineFocalTweetSafetyLevel),
|
|
outerTweetContext = None
|
|
)
|
|
)
|
|
),
|
|
feedbackActionInfoBuilder = Some(homeFeedbackActionInfoBuilder)
|
|
)
|
|
|
|
Some(UrtItemCandidateDecorator(tweetItemBuilder))
|
|
}
|
|
|
|
override val alerts = Seq(
|
|
HomeMixerAlertConfig.BusinessHours.defaultSuccessRateAlert(99.5, 50, 60, 60)
|
|
)
|
|
}
|