@promotedai/react-introspection
Version:
Promoted Introspection integration for React web apps
102 lines (90 loc) • 3.14 kB
text/typescript
import { IntrospectionData } from './PromotedIntrospection/types'
enum Rank {
PERSONALIZE_CONV_MODEL_RANK = 'PERSONALIZE_CONV_MODEL_RANK',
ENGAGEMENT_MODEL_RANK = 'ENGAGEMENT_MODEL_RANK',
RETRIEVAL_RANK = 'RETRIEVAL_RANK',
}
enum Statistic {
CTR_30_DAY = 'CTR_30_DAY',
CVR_30_DAY = 'CVR_30_DAY',
PERSONALIZATION_SCORE = 'PERSONALIZATION_SCORE',
MODEL_SCORE = 'MODEL_SCORE',
P_NAVIGATES = 'P_NAVIGATES',
P_CONV_GIVEN_NAVIGATE = 'P_CONV_GIVEN_NAVIGATE',
}
const featureIds = {
[ ]: '1002',
[ ]: '1086',
[ ]: '1210',
[ ]: '1065',
[ ]: '1069',
[ ]: '1084',
[ ]: '1211',
[ ]: '200002',
[ ]: '201000',
}
const ranksOrder = [Rank.PERSONALIZE_CONV_MODEL_RANK, Rank.ENGAGEMENT_MODEL_RANK, Rank.RETRIEVAL_RANK]
const statisticsOrder = [
Statistic.P_NAVIGATES,
Statistic.P_CONV_GIVEN_NAVIGATE,
Statistic.CTR_30_DAY,
Statistic.CVR_30_DAY,
Statistic.PERSONALIZATION_SCORE,
Statistic.MODEL_SCORE,
]
const decimalFormatter = (value: any) => {
if (typeof value === 'string') {
return parseFloat(value).toFixed(3)
} else if (typeof value === 'number') {
return value.toFixed(3)
} else {
return value
}
}
const selector =
(featureId: string, formatter?: (value: number | string | undefined) => string) =>
(data: IntrospectionData): string | number | undefined => {
const feature = data.feature_floats[featureId]
return typeof formatter === 'function' ? formatter(feature) : feature
}
const fieldConfig = {
[ ]: {
label: 'Conversion Model Rank',
value: selector(featureIds[Rank.PERSONALIZE_CONV_MODEL_RANK]),
},
[ ]: {
label: 'All Engagement Model Rank',
value: selector(featureIds[Rank.ENGAGEMENT_MODEL_RANK]),
},
[ ]: {
label: 'Retrieval Rank',
value: selector(featureIds[Rank.RETRIEVAL_RANK]),
},
[ ]: {
label: 'p(Navigate)',
value: selector(featureIds[Statistic.P_NAVIGATES], decimalFormatter),
},
[ ]: {
label: 'p(Conv | Navigate)',
value: selector(featureIds[Statistic.P_CONV_GIVEN_NAVIGATE], decimalFormatter),
},
[ ]: {
label: '30-Day CTR',
value: selector(featureIds[Statistic.CTR_30_DAY], decimalFormatter),
},
[ ]: {
label: '30-Day CVR',
value: selector(featureIds[Statistic.CVR_30_DAY], decimalFormatter),
formatter: decimalFormatter,
},
[ ]: {
label: 'Personalization Score',
value: selector(featureIds[Statistic.PERSONALIZATION_SCORE], decimalFormatter),
},
[ ]: {
label: 'Model Score',
value: selector(featureIds[Statistic.MODEL_SCORE], decimalFormatter),
},
}
export const ranks = ranksOrder.map((rank) => fieldConfig[rank])
export const statistics = statisticsOrder.map((statistic) => fieldConfig[statistic])