mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-30 06:56:08 +02:00
35 lines
1.4 KiB
Scala
35 lines
1.4 KiB
Scala
|
package com.twitter.home_mixer.functional_component.gate
|
||
|
|
||
|
import com.twitter.home_mixer.functional_component.gate.MinCachedTweetsGate.identifierSuffix
|
||
|
import com.twitter.home_mixer.util.CachedScoredTweetsHelper
|
||
|
import com.twitter.product_mixer.core.functional_component.gate.Gate
|
||
|
import com.twitter.product_mixer.core.model.common.identifier.CandidatePipelineIdentifier
|
||
|
import com.twitter.product_mixer.core.model.common.identifier.GateIdentifier
|
||
|
import com.twitter.product_mixer.core.pipeline.PipelineQuery
|
||
|
import com.twitter.stitch.Stitch
|
||
|
import com.twitter.timelines.configapi.Param
|
||
|
|
||
|
case class MinCachedTweetsGate(
|
||
|
candidatePipelineIdentifier: CandidatePipelineIdentifier,
|
||
|
minCachedTweetsParam: Param[Int])
|
||
|
extends Gate[PipelineQuery] {
|
||
|
|
||
|
override val identifier: GateIdentifier =
|
||
|
GateIdentifier(candidatePipelineIdentifier + identifierSuffix)
|
||
|
|
||
|
override def shouldContinue(query: PipelineQuery): Stitch[Boolean] = {
|
||
|
val minCachedTweets = query.params(minCachedTweetsParam)
|
||
|
val cachedScoredTweets =
|
||
|
query.features.map(CachedScoredTweetsHelper.unseenCachedScoredTweets).getOrElse(Seq.empty)
|
||
|
val numCachedTweets = cachedScoredTweets.count { tweet =>
|
||
|
tweet.candidatePipelineIdentifier.exists(
|
||
|
CandidatePipelineIdentifier(_).equals(candidatePipelineIdentifier))
|
||
|
}
|
||
|
Stitch.value(numCachedTweets < minCachedTweets)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
object MinCachedTweetsGate {
|
||
|
val identifierSuffix = "MinCachedTweets"
|
||
|
}
|