Temporal Profiles
Model user interests over time with configurable half-life decay curves and topic affinities.
CactusBrain Personalize / Developer Preview
Rank items to one user's behaviour on their own device. No models to train, no central telemetry to collect, and zero user data ever leaving the handset.
Model user interests over time with configurable half-life decay curves and topic affinities.
Score hundreds of candidates in sub-millisecond local execution without network calls.
Prevent echo chambers with built-in epsilon-greedy and contextual exploration algorithms.
Profile weights and observation history are stored atomically in encrypted device storage.
When a user interacts with content, their feed updates instantly. No batch pipelines, no vector database hosting costs.
import CactusBrainPersonalizeSDK
let personalizer = try await CactusBrainPersonalize.load(
collection: "feed-ranking",
profile: .decaying(halfLife: .hours(48))
)
// Observe local user interactions (opens, clicks, dwell time)
try await personalizer.observe(
itemId: "article-892",
affinity: .positive(weight: 1.0)
)
// Rank candidate items completely on-device
let rankedItems = try await personalizer.rank(
candidates: candidateIds,
mode: .hybrid(exploration: 0.15)
)Because personalization state stays on the client, you don't need complex consent flows for server-side user tracking. The data never leaves the operating system sandbox.