the-algorithm/pushservice/src/main/scala/com/twitter/frigate/pushservice/model/DiscoverTwitter.scala
twitter-team b389c3d302 Open-sourcing pushservice
Pushservice is the main recommendation service we use to surface recommendations to our users via notifications. It fetches candidates from various sources, ranks them in order of relevance, and applies filters to determine the best one to send.
2023-05-19 16:27:07 -05:00

90 lines
3.3 KiB
Scala

package com.twitter.frigate.pushservice.model
import com.twitter.finagle.stats.StatsReceiver
import com.twitter.frigate.common.base.DiscoverTwitterCandidate
import com.twitter.frigate.pushservice.model.PushTypes.PushCandidate
import com.twitter.frigate.pushservice.model.PushTypes.RawCandidate
import com.twitter.frigate.pushservice.model.PushTypes.Target
import com.twitter.frigate.pushservice.config.Config
import com.twitter.frigate.pushservice.ml.PushMLModelScorer
import com.twitter.frigate.pushservice.model.candidate.CopyIds
import com.twitter.frigate.pushservice.model.ibis.DiscoverTwitterPushIbis2Hydrator
import com.twitter.frigate.pushservice.model.ntab.DiscoverTwitterNtabRequestHydrator
import com.twitter.frigate.pushservice.params.PushFeatureSwitchParams
import com.twitter.frigate.pushservice.predicate.PredicatesForCandidate
import com.twitter.frigate.pushservice.take.predicates.BasicRFPHPredicates
import com.twitter.frigate.pushservice.take.predicates.OutOfNetworkTweetPredicates
import com.twitter.frigate.thriftscala.CommonRecommendationType
import com.twitter.hermit.predicate.NamedPredicate
class DiscoverTwitterPushCandidate(
candidate: RawCandidate with DiscoverTwitterCandidate,
copyIds: CopyIds,
)(
implicit val statsScoped: StatsReceiver,
pushModelScorer: PushMLModelScorer)
extends PushCandidate
with DiscoverTwitterCandidate
with DiscoverTwitterPushIbis2Hydrator
with DiscoverTwitterNtabRequestHydrator {
override val pushCopyId: Option[Int] = copyIds.pushCopyId
override val ntabCopyId: Option[Int] = copyIds.ntabCopyId
override val copyAggregationId: Option[String] = copyIds.aggregationId
override val target: Target = candidate.target
override lazy val commonRecType: CommonRecommendationType = candidate.commonRecType
override val weightedOpenOrNtabClickModelScorer: PushMLModelScorer = pushModelScorer
override val statsReceiver: StatsReceiver =
statsScoped.scope("DiscoverTwitterPushCandidate")
}
case class AddressBookPushCandidatePredicates(config: Config)
extends BasicRFPHPredicates[DiscoverTwitterPushCandidate] {
implicit val statsReceiver: StatsReceiver = config.statsReceiver.scope(getClass.getSimpleName)
override val predicates: List[
NamedPredicate[DiscoverTwitterPushCandidate]
] =
List(
PredicatesForCandidate.paramPredicate(
PushFeatureSwitchParams.EnableAddressBookPush
)
)
}
case class CompleteOnboardingPushCandidatePredicates(config: Config)
extends BasicRFPHPredicates[DiscoverTwitterPushCandidate] {
implicit val statsReceiver: StatsReceiver = config.statsReceiver.scope(getClass.getSimpleName)
override val predicates: List[
NamedPredicate[DiscoverTwitterPushCandidate]
] =
List(
PredicatesForCandidate.paramPredicate(
PushFeatureSwitchParams.EnableCompleteOnboardingPush
)
)
}
case class PopGeoTweetCandidatePredicates(override val config: Config)
extends OutOfNetworkTweetPredicates[OutOfNetworkTweetPushCandidate] {
implicit val statsReceiver: StatsReceiver = config.statsReceiver.scope(getClass.getSimpleName)
override def postCandidateSpecificPredicates: List[
NamedPredicate[OutOfNetworkTweetPushCandidate]
] = List(
PredicatesForCandidate.htlFatiguePredicate(
PushFeatureSwitchParams.NewUserPlaybookAllowedLastLoginHours
)
)
}