the-algorithm/cr-mixer/server/src/main/scala/com/twitter/cr_mixer/module/RepresentationManagerModule.scala
twitter-team ef4c5eb65e Twitter Recommendation Algorithm
Please note we have force-pushed a new initial commit in order to remove some publicly-available Twitter user information. Note that this process may be required in the future.
2023-03-31 17:36:31 -05:00

108 lines
4.1 KiB
Scala

package com.twitter.cr_mixer.module
import com.twitter.finagle.stats.StatsReceiver
import com.twitter.inject.TwitterModule
import com.twitter.simclusters_v2.common.SimClustersEmbedding
import com.twitter.simclusters_v2.common.TweetId
import com.twitter.simclusters_v2.common.UserId
import com.twitter.storehaus.ReadableStore
import com.twitter.strato.client.{Client => StratoClient}
import com.twitter.representation_manager.thriftscala.SimClustersEmbeddingView
import com.twitter.simclusters_v2.thriftscala.EmbeddingType
import com.twitter.simclusters_v2.thriftscala.ModelVersion
import com.google.inject.Provides
import com.google.inject.Singleton
import javax.inject.Named
import com.twitter.cr_mixer.model.ModuleNames
import com.twitter.frigate.common.store.strato.StratoFetchableStore
import com.twitter.hermit.store.common.ObservedReadableStore
import com.twitter.simclusters_v2.thriftscala.{SimClustersEmbedding => ThriftSimClustersEmbedding}
object RepresentationManagerModule extends TwitterModule {
private val ColPathPrefix = "recommendations/representation_manager/"
private val SimclustersTweetColPath = ColPathPrefix + "simClustersEmbedding.Tweet"
private val SimclustersUserColPath = ColPathPrefix + "simClustersEmbedding.User"
@Provides
@Singleton
@Named(ModuleNames.RmsTweetLogFavLongestL2EmbeddingStore)
def providesRepresentationManagerTweetStore(
statsReceiver: StatsReceiver,
stratoClient: StratoClient,
): ReadableStore[TweetId, SimClustersEmbedding] = {
ObservedReadableStore(
StratoFetchableStore
.withView[Long, SimClustersEmbeddingView, ThriftSimClustersEmbedding](
stratoClient,
SimclustersTweetColPath,
SimClustersEmbeddingView(
EmbeddingType.LogFavLongestL2EmbeddingTweet,
ModelVersion.Model20m145k2020))
.mapValues(SimClustersEmbedding(_)))(
statsReceiver.scope("rms_tweet_log_fav_longest_l2_store"))
}
@Provides
@Singleton
@Named(ModuleNames.RmsUserFavBasedProducerEmbeddingStore)
def providesRepresentationManagerUserFavBasedProducerEmbeddingStore(
statsReceiver: StatsReceiver,
stratoClient: StratoClient,
): ReadableStore[UserId, SimClustersEmbedding] = {
ObservedReadableStore(
StratoFetchableStore
.withView[Long, SimClustersEmbeddingView, ThriftSimClustersEmbedding](
stratoClient,
SimclustersUserColPath,
SimClustersEmbeddingView(
EmbeddingType.FavBasedProducer,
ModelVersion.Model20m145k2020
)
)
.mapValues(SimClustersEmbedding(_)))(
statsReceiver.scope("rms_user_fav_based_producer_store"))
}
@Provides
@Singleton
@Named(ModuleNames.RmsUserLogFavInterestedInEmbeddingStore)
def providesRepresentationManagerUserLogFavConsumerEmbeddingStore(
statsReceiver: StatsReceiver,
stratoClient: StratoClient,
): ReadableStore[UserId, SimClustersEmbedding] = {
ObservedReadableStore(
StratoFetchableStore
.withView[Long, SimClustersEmbeddingView, ThriftSimClustersEmbedding](
stratoClient,
SimclustersUserColPath,
SimClustersEmbeddingView(
EmbeddingType.LogFavBasedUserInterestedIn,
ModelVersion.Model20m145k2020
)
)
.mapValues(SimClustersEmbedding(_)))(
statsReceiver.scope("rms_user_log_fav_interestedin_store"))
}
@Provides
@Singleton
@Named(ModuleNames.RmsUserFollowInterestedInEmbeddingStore)
def providesRepresentationManagerUserFollowInterestedInEmbeddingStore(
statsReceiver: StatsReceiver,
stratoClient: StratoClient,
): ReadableStore[UserId, SimClustersEmbedding] = {
ObservedReadableStore(
StratoFetchableStore
.withView[Long, SimClustersEmbeddingView, ThriftSimClustersEmbedding](
stratoClient,
SimclustersUserColPath,
SimClustersEmbeddingView(
EmbeddingType.FollowBasedUserInterestedIn,
ModelVersion.Model20m145k2020
)
)
.mapValues(SimClustersEmbedding(_)))(
statsReceiver.scope("rms_user_follow_interestedin_store"))
}
}