the-algorithm/pushservice/src/main/scala/com/twitter/frigate/pushservice/model/TopicProofTweetPushCandidat...

72 lines
3.4 KiB
Scala

package com.twitter.frigate.pushservice.model
import com.twitter.finagle.stats.StatsReceiver
import com.twitter.frigate.common.base.TopicProofTweetCandidate
import com.twitter.frigate.common.base.TweetAuthorDetails
import com.twitter.frigate.pushservice.model.PushTypes.PushCandidate
import com.twitter.frigate.pushservice.model.PushTypes.RawCandidate
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.TopicProofTweetIbis2Hydrator
import com.twitter.frigate.pushservice.model.ntab.TopicProofTweetNtabRequestHydrator
import com.twitter.frigate.pushservice.params.PushFeatureSwitchParams
import com.twitter.frigate.pushservice.predicate.PredicatesForCandidate
import com.twitter.frigate.pushservice.take.predicates.BasicTweetPredicatesForRFPH
import com.twitter.frigate.thriftscala.CommonRecommendationType
import com.twitter.gizmoduck.thriftscala.User
import com.twitter.hermit.predicate.NamedPredicate
import com.twitter.stitch.tweetypie.TweetyPie
import com.twitter.util.Future
/**
* This class defines a hydrated [[TopicProofTweetCandidate]]
*
* @param candidate : [[TopicProofTweetCandidate]] for the candidate representint a Tweet recommendation for followed Topic
* @param author : Tweet author representated as Gizmoduck user object
* @param copyIds : push and ntab notification copy
* @param stats : finagle scoped states receiver
* @param pushModelScorer : ML model score object for fetching prediction scores
*/
class TopicProofTweetPushCandidate(
candidate: RawCandidate with TopicProofTweetCandidate,
author: Option[User],
copyIds: CopyIds
)(
implicit stats: StatsReceiver,
pushModelScorer: PushMLModelScorer)
extends PushCandidate
with TopicProofTweetCandidate
with TweetAuthorDetails
with TopicProofTweetNtabRequestHydrator
with TopicProofTweetIbis2Hydrator {
override val statsReceiver: StatsReceiver = stats
override val target: PushTypes.Target = candidate.target
override val tweetId: Long = candidate.tweetId
override lazy val tweetyPieResult: Option[TweetyPie.TweetyPieResult] = candidate.tweetyPieResult
override val weightedOpenOrNtabClickModelScorer: PushMLModelScorer = pushModelScorer
override val pushCopyId: Option[Int] = copyIds.pushCopyId
override val ntabCopyId: Option[Int] = copyIds.ntabCopyId
override val copyAggregationId: Option[String] = copyIds.aggregationId
override val semanticCoreEntityId = candidate.semanticCoreEntityId
override val localizedUttEntity = candidate.localizedUttEntity
override val tweetAuthor = Future.value(author)
override val topicListingSetting = candidate.topicListingSetting
override val algorithmCR = candidate.algorithmCR
override val commonRecType: CommonRecommendationType = candidate.commonRecType
override val tagsCR = candidate.tagsCR
override val isOutOfNetwork = candidate.isOutOfNetwork
}
case class TopicProofTweetCandidatePredicates(override val config: Config)
extends BasicTweetPredicatesForRFPH[TopicProofTweetPushCandidate] {
implicit val statsReceiver: StatsReceiver = config.statsReceiver.scope(getClass.getSimpleName)
override val preCandidateSpecificPredicates: List[NamedPredicate[TopicProofTweetPushCandidate]] =
List(
PredicatesForCandidate.paramPredicate(
PushFeatureSwitchParams.EnableTopicProofTweetRecs
),
)
}