← ALL SOLUTIONS
SOLUTION - CONSUMER & DEVICES

A companion that still knows you next season.

Companion products already run a memory stack: a rolling summary, a vector store of past messages, and a table of extracted profile facts. Each layer loses something different, and the user reads the sum of those losses as the relationship resetting. A bounded field holds the whole history as resident context instead, at a footprint that does not move as the relationship grows. We have held one unbroken conversation to 9,359 turns, about a year of daily use, without the thread breaking.

02 - HOW MEMORY IS HANDLED TODAY

You already run three memory systems. They disagree.

A companion product in production runs three memory systems at once. A small model rewrites the relationship every N turns. pgvector or Pinecone holds the transcript and returns the chunks nearest the current turn. A Postgres table holds whatever an extraction pass was told to look for. Underneath all three, the context window carries the persona block, and prefix caching keeps it warm for as long as the user keeps typing.

Each layer fails in a way you can name. The summary compounds: it is a rewrite of a rewrite, and by the fortieth pass a detail from March survives as a category rather than a fact. Retrieval is a similarity match, so the callback a user phrases sideways, the joke rather than the subject of the joke, returns nothing. Extraction records only what its schema anticipated, which is never the detail that made the character feel real. And prefix caching, the one layer that loses nothing, is evicted the moment the user closes the app.

The cost curve then inverts against you. Your longest relationships generate the most summary passes, the largest embedding bills, and the deepest transcript stores, and they are the same cohort that pays. Memory is the retention driver and the margin driver at once, which is why a change to the memory layer moves both numbers in the same direction here and in almost no other workload. And the character itself — its voice, its boundaries, who it is to the user — lives in a prompt preamble that is re-tuned by hand, versioned nowhere, and drifts every time the base model changes underneath it.

FIG. 1 - RELATIONSHIP RECALL OVER MONTHS
RECALL ON MONTH-1 REFERENCES
SUMMARY + RETRIEVAL
SGF FIELD

SCOPE: schematic. Measured recall across a multi-month session comes out of the pilot, run against your own summarizer and retrieval configuration.

03 - CONSTRAINT BY CONSTRAINT

What you run today, and what changes.

PRIMARY CONSTRAINT: FOOTPRINT PER ACTIVE COMPANION
CONSTRAINT
WHAT YOU RUN TODAY
WITH SGF
Who the character is
Persona stuffed into a prompt preamble, re-tuned by hand, with no versioned source of truth and no guarantee it survives a model upgrade.
The character loaded as a versioned lens — voice, boundaries, and backstory as one artifact you ship and update, held apart from the relationship it colors.
Long-range recall
A summary rewritten every N turns. A detail from March survives as a category by May, and the character can no longer reference it precisely.
The whole history merges into one bounded field, re-read in full each turn. In our deepest run, a topic raised in the opening hour was picked back up eight times across the conversation, the last at the final turn, ~1.6 million tokens later, and never once re-introduced by name.
Finding the right memory
Top-k similarity over a transcript store. The callback that lands is the one phrased like the original; the one phrased sideways returns nothing.
The field is resident context, not a query result. Every follow-up in our deepest run was deliberately oblique, never naming the subject, because a real user does not re-state what they are talking about. The thread held anyway. Recall does not depend on how the user phrases the trigger.
Returning users
Two weeks dormant and the cache is long evicted. The first message back re-prefills an entire relationship before the model answers.
The field is resident state, not a warm cache. A dormant user reactivates at the same footprint as an active one, with the same history at the same resolution: no re-prefill, no cold first message.
Cost per active relationship
Summary passes, embedding calls, and a vector store that all grow with tenure. Margin is thinnest on your highest-LTV cohort.
One field sized before deploy. Footprint is flat from day one to month twelve, so per-user cost stops tracking relationship length. A user with six characters carries six fields, each at the budget you set, so the multiplier is a number you know before launch rather than one that grows with tenure.
EFFECTIVE CONTEXT

A year of daily conversation runs into the millions of tokens. The field carries that history at a footprint you fix before you deploy, on whatever model you serve.

SCOPE: measured on a single unbroken conversation of 1,900,000 tokens across 9,359 turns, 14.5× the base model's trained context, with the resident memory flat from 50,000 tokens through to the final turn, and total footprint ~1,370× at 1.9M tokens under a standard cache. The ratio grows with length and is only meaningful at a stated depth. Reproduced on 3 independent conversations. Your recall curve and the configuration that produced it come out of the pilot.

04 - WHAT CHANGES WITH BOUNDED MEMORY
01

The character stops reconstructing the user from a paragraph and a search hit. The whole relationship is resident, so continuity is a property of the context rather than of the retrieval step firing correctly.

02

The character ships as a lens. Voice, boundaries, and backstory load as one versioned artifact instead of a hand-tuned preamble — so the same companion is the same companion across a patch, across users, and across a base-model change.

03

The character stops degrading on a schedule. Before we bounded the read, our own runs died at roughly 285,000 tokens: output collapsed to about a dozen tokens a turn and stopped. Nothing like that ceiling appears at any depth we have run since.

04

Cost per active companion stops tracking relationship length. The month-twelve user and the day-one user carry the same footprint, so margin stops inverting against your best cohort.

SCOPE: continuity behavior depends on your persona design and field budget. A paid pilot returns the footprint curve and recall deltas measured against your current summarizer and retrieval stack. Our published depth results were produced on a deliberately small research model, chosen to stress the memory rather than flatter the output. A larger model abuses it less. Treat them as a floor.

05 - WHAT SURVIVES TWELVE MONTHS

What the field keeps, and at what resolution.

The relationship, whole

Months of conversation carried as one resident structure that keeps merging as it grows, not a paragraph rewritten nightly. What was said in the first week is read at the same resolution as what was said last night, and in our deepest run the model was measurably still attending to early-conversation content at the final turn.

Who the character is

The character's voice, boundaries, and backstory loaded as a versioned lens, held apart from the relationship it reacts to — so one character served to thousands of users is the same character in every one of them, and survives a base-model upgrade without a re-tune. What a pilot returns is how consistently that lens holds across a multi-month relationship, including under users actively trying to talk the character out of being the character.

The live exchange

The current session at full fidelity, kept literal over an instruction block the field cannot overwrite, so the live turn stays sharp without dropping the history behind it.

Nothing you did not budget for

The footprint is a number you set before you deploy. Twelve months into a relationship it is the same number as day one, on the same model you already serve.

06 - WHAT A PILOT MEASURES

The numbers we return for this workload.

How consistently the character's lens holds — voice and boundaries — across a multi-month relationship and across a base-model change, if a model upgrade falls inside the pilot window.

Recall on references from months back, scored against your current summarizer and retrieval stack on the same conversations, at matched depth.

Footprint per active companion held flat across a multi-month session, next to your current per-user memory cost.

Time-to-first-token on a returning dormant user, against your current re-prefill path.

SCOPE: this page states direction, not magnitude. Measured numbers for your workload come out of the pilot, with the configuration that produced them.

07 - WHAT WE PUBLISH

One field, held to a budget you set.

Bounded memory on its own is not hard. A rolling window gets the same footprint number tomorrow by forgetting everything older than the window, and for a companion product, forgetting is the failure. What is hard is holding the footprint flat while the whole relationship stays available, and showing the model is still reading it a year in. That is the result we publish, reproduced across independent conversations, and it is what a pilot reproduces on your workload.

The field is held to a budget you fix before you deploy. It runs on the model you already serve, with no retraining and no recalibration. Patent pending; the implementation stays private.

READ THE TECHNOLOGY →START A PILOT →
08 - PILOT PROGRAM

Run SGF against your own workload.

A scoped four-week pilot: you bring one workload and a memory budget, we return a measured comparison against your current cache: footprint, recall, and the configuration that produced both.

We'll reply to book your discovery call and share the scope sheet and qualifying questions, no deck.

© 2026 SEMGRAVTHE MECHANISM STAYS PRIVATE. THE RESULTS DO NOT.