mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-01 08:48:46 +02:00
b389c3d302
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.
90 lines
3.3 KiB
Scala
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
|
|
)
|
|
)
|
|
}
|