How inferred profiling works
In stateful mode, uniqOS builds a psychological model of each end user so your personality can adapt tone and content to the person it is talking to. Part of that model is inferred: on each turn, a fast classifier reads the user's message, emits structured signals, and the message itself is discarded. This page explains exactly what is inferred, how it is bounded, and the controls you own.
What is inferred
Two things, per turn:
- Big Five personality signals. When (and only when) a message carries actual behavioral evidence about the user for one of the five domains — openness, conscientiousness, extraversion, agreeableness, neuroticism — the classifier emits a pair of numbers: where the evidence points and how strong it is. Each turn nudges the stored trait by a small, evidence-weighted step; no single message can move a trait far.
- Topics. Up to three labels per turn from the public topic vocabulary, each optionally tagged with the user's apparent sentiment about it. Repeat mentions raise a topic's relevance; abandoned topics decay and are eventually pruned.
What is NOT inferred (or stored)
- No raw text. The message is processed in-turn and discarded — this is a foundational invariant of the platform, not a setting.
- No free-form labels. The classifier's output schema is closed: numbers, ids from the versioned topic vocabulary, and a fixed emotion enum. It structurally cannot emit a sentence, a name, or any other free text. Labels outside the vocabulary are rejected server-side even if the classifier produced them.
- No sensitive categories. The vocabulary deliberately contains no labels for health diagnoses, sexual orientation or gender identity, religious beliefs, political opinions, racial or ethnic origin, or union affiliation. The classifier is instructed to omit sensitive matters rather than map them to a nearby label — and since no target label exists, the exclusion holds by construction.
Confidence, and when inference actually shapes responses
Every inferred value carries a confidence score, visible in
GET /v1/end-users/{user_id}/model. Confidence accrues gradually with evidence; a handful
of interactions is not enough to shape anything.
Inference influences generation only behind a double gate: the model's overall confidence
must clear its threshold, and the specific trait must be individually confident and
clearly off-center. When it does apply, it becomes one behavioral sentence in the system
prompt (for example, "responds well to a calm, steady tone") — never numbers, never a
diagnosis. The exact sentence used on a turn is echoed back to you in
response.memory.summary_used, so what shaped each response is fully auditable.
Your controls
- Per-personality switch. Profiling runs only for personalities with
runtime_config.user_modeling_enabled: true. Catalog personalities ship with it enabled; personalities you design from scratch default to off — you enable it consciously. - Read, export, erase. The full inferred model is readable
(
/model,/model/readable), exportable (/export), and erasable (DELETE /v1/end-users/{user_id}, includingcascade=model_onlyto erase just the model) — see GDPR and data erasure.
Your duty as controller
You are the data controller for your end users; uniqOS processes on your instructions. When you enable user modeling, you are responsible for informing your end users that they are interacting with an AI system and that personalization based on inferred characteristics is applied, and for choosing an appropriate lawful basis. Do not deploy emotion inference or profiling in contexts where regulation prohibits it (for example, emotion recognition in workplaces or educational institutions under the EU AI Act).