MemoryLake
Back to all articles
TutorialAugust 6, 2026·11 min read

Why ChatGPT Forgets Your Metric Definitions — and How to Fix It (2026)

On Monday you spent fifteen minutes explaining that an active customer means one with a paid invoice in the last 90 days, excluding trials and internal accounts. You got a clean answer. On Thursday you asked the same question in a new chat and got a number 18% higher, computed confidently, with no indication that it had used a different definition.

Here's the direct answer: ChatGPT doesn't retain your definitions between sessions, and when a definition is missing it doesn't ask — it picks the most common interpretation of the metric name and proceeds. The output is fluent and internally consistent, which is exactly what makes it dangerous: a wrong number that looks right is harder to catch than a missing one. The fix is to keep your metric definitions in a store the model reads from every time, so the definition arrives with the question instead of being re-typed or re-guessed.

This piece covers why definitions are the specific thing that gets lost, what the industry has learned about this problem, and where a memory layer helps versus where you genuinely need a semantic layer.

Why ChatGPT forgets your metric definitions

A metric name is not a metric

"Gross margin" is four syllables that could mean six things. AtScale opens its write-up on the cost of semantic drift with three teams answering "What was our gross margin last quarter?" and returning 30%, 32%, and 31% — three defensible numbers from three definitions of what counts as cost of revenue.

Your assistant inherits this ambiguity without inheriting your resolution of it. When you say "churn," the model has a strong prior about what churn means in general and no information about the fact that your company measures it on revenue rather than accounts, monthly rather than annually, excluding downgrades. Absent your definition, it uses the prior. That's not a memory failure in the narrow sense — it's a memory failure that presents as a confident answer.

The definition lives in people, not in the data

This is the part that makes metric definitions harder than schema. A table has a shape you can inspect; the model can read column names and types. A definition is a decision — someone chose, at some point, that trials don't count — and that decision is recorded in a Slack thread, a dashboard's SQL, or someone's head.

The industry consensus on this is unusually blunt. As AtScale puts it: "AI systems don't just fail to reconcile conflicting definitions. They make the problem worse by confidently presenting inconsistent answers." The failure isn't the model inventing math. It's the model faithfully executing whichever of your organization's several definitions it happened to reconstruct.

Note how this differs from ChatGPT losing track of your data schema. Schema loss produces errors you notice — a column that doesn't exist, a join that fails. Definition loss produces numbers that reconcile to nothing, and you find out in the meeting.

Nothing carries a definition between sessions

Even when you get it right in one conversation, the mechanism that would carry it forward doesn't exist for this kind of content. Built-in memory holds a couple of pages of short facts about you; a nine-clause definition of qualified pipeline with its exclusions is not what it's sized for. Custom instructions can hold two or three definitions before crowding out everything else. Project files help, and they're scoped to that Project and to that tool.

So the definition gets re-supplied by hand, which means it gets re-supplied approximately. The version you type on Thursday is shorter than Monday's, because you're typing from memory and the exclusions are the boring part. Drift enters through your own summarizing.

Definitions change, and the old version doesn't get retracted

The compounding problem: you revise the definition in Q3, and every prior analysis was computed on the Q2 version. A chat-based workflow has no place to record that a definition superseded another one on a date. So you end up with numbers computed under different rules and nothing that tells you which — the analytics equivalent of undated documentation.

What people try

Pasting the definitions at the top of every chat. Effective, and the reason it's the most common approach. It also degrades: the pasted block gets shorter over weeks, and it's per-chat, so anyone else on the team is pasting their own version.

Putting definitions in custom instructions. Better for the two or three metrics you use daily, and genuinely worth doing. Then it runs out of room, and you've spent your instructions budget on definitions rather than on how you want the assistant to behave.

Using a Project with a definitions document attached. The best of the in-product options. Scoped to that Project, though, and if you also work in a coding agent or a BI tool, that document isn't visible from there.

Letting the assistant read the SQL. Clever and partially effective — the definition really is in the query. What it misses is intent and exceptions: SQL shows a WHERE status != 'internal' clause but not that the clause exists because of an audit finding, and it shows one dashboard's version without telling you it's the disputed one.

Building a semantic layer. This is the actual professional answer, and it should be said plainly: a semantic layer — dbt's Semantic Layer, AtScale, Cube, and the others in that category — exists precisely to define a metric once and have every tool compute it the same way. AtScale describes the goal as: "When someone asks, 'What's our revenue?' there's one answer because the definition is applied consistently everywhere." If your organization runs on shared metrics, this is the investment to make, and a memory layer does not substitute for it.

AtScale also reports that LLMs querying databases directly reach roughly 20% accuracy on business questions, rising to essentially full accuracy when a semantic layer supplies governed definitions, multidimensional business logic, and contextual relationships. That figure comes from a vendor with an interest in the conclusion and shouldn't be treated as an independent benchmark — but the direction is not controversial, and it's the strongest available argument for governed definitions.

The gap the semantic layer doesn't close is the one you're actually standing in: the assistant you paste a CSV into at 6pm, the ad-hoc question that never goes through the modeled layer, the definition that exists as a decision but hasn't been implemented as a metric yet, and every analysis done by someone who doesn't have BI access. That's where the definitions get lost, and it's most of the analysis that actually happens.

The Fix: Give ChatGPT a Persistent Definition of Your Metrics

Keep the definitions outside the chat, in a store the assistant reads on every request. Not a note you paste from — a layer that supplies the definition as part of answering.

What makes this work isn't storage; it's that the definition arrives with its context. A stored definition can carry the exclusions, the reason for each exclusion, who approved it, when it last changed, and what the previous version was. That's the difference between "active = paid in 90 days" and a definition someone can actually be held to.

MemoryLake is a memory layer built for that — your definitions, decision records, and source documents in one store that ChatGPT reads through the API and MCP-capable tools like Claude and Codex read directly. So the same definition reaches the ad-hoc chat, the coding agent writing the query, and the analyst who joined last week.

Two boundaries, stated clearly because this is a domain where overselling causes real damage:

  • A memory layer makes definitions available, consistent, and traceable. It does not enforce them. Enforcement is what a semantic layer does — computing every query through one definition. A memory layer supplies the definition to whoever is asking; it can't stop a model from being handed a raw table and doing its own arithmetic. If a number is going in a board deck or a filing, it should come through your governed layer, not out of a chat.
  • Definitions need their metadata, or you've moved the problem. A two-column table of metric names and formulas is exactly the artifact that caused the drift. What has to travel is the grain, the time window, the exclusions and why, the owner, and the effective date.

Step 1: Create an API key

Generate a key and make your first request in about 30 seconds. Keep it in your environment or a secret manager rather than inline in a config or notebook that gets shared.

Create a MemoryLake API key
Create a MemoryLake API key

Step 2: Upload your first memories

Drop in the documents, images, and files where your definitions actually live — the metrics doc, the dashboard spec, the Slack thread where the exclusion was decided, the audit note that caused it. Upload the sources, not a tidied summary. The tidied summary is where "excluding internal accounts" quietly disappears.

Upload your first memories to MemoryLake
Upload your first memories to MemoryLake

Step 3: Connect your AI & agents

Give Claude, Codex, OpenClaw, and other AI agents access to memory via MCP or the API. ChatGPT has no MCP client, so retrieve the relevant definitions through the API and inject them into the prompt, a custom GPT, or the workflow that calls the model. For tools that speak MCP, add the server to that tool's configuration and they read the same store — which is the point: one definition, several consumers.

Connect your AI and agents via MCP
Connect your AI and agents via MCP

What this changes in practice

Thursday's number matches Monday's. That's the whole headline, and it's worth stating without embellishment: the same question computed against the same definition produces the same answer, because the definition didn't have to be retyped.

The second change is that disagreement becomes productive. Right now when two numbers disagree you spend an hour reconstructing what each one measured. When the definition is stored with its exclusions and effective date, you compare definitions instead of reverse-engineering arithmetic — and often discover the two numbers were both right and answered different questions.

The third is onboarding. A new analyst's first month is largely spent learning that trials don't count. When that's in a store their tools read, they start with the institutional version instead of rebuilding it from dashboards.

And revisions become legible. A definition with an effective date lets you say "this analysis used the pre-August definition" instead of hoping nobody asks. That single property — knowing which rules a number was computed under — is most of what makes analysis defensible.

Best practices for metric definitions your AI can use

Write the exclusions and the reason, not just the formula

"Active = paid invoice in trailing 90 days" is half a definition. The half that prevents drift is: excluding trials (they inflated the number before the 2025 pricing change), excluding internal accounts (audit finding, March), counted at account level not seat level. The reasons matter because they're what stops someone re-litigating the exclusion every quarter.

Date every definition and keep the old one

When a definition changes, add the new version with an effective date and keep the previous one marked as superseded. Deleting the old definition destroys your ability to interpret last quarter's numbers. This is the single highest-value habit in the whole practice and the most commonly skipped.

Name the owner

Every definition should say who decides it. Not for bureaucracy — because the question "is this still right?" needs an addressee. Definitions without owners drift silently; definitions with owners get corrected.

Keep the governed layer as the source of record

Use the memory layer so definitions are available everywhere, and keep your semantic layer or warehouse models as the thing that actually computes reported numbers. When the two disagree, the governed layer wins and the memory entry gets fixed. Reversing that hierarchy is how you end up with a well-documented wrong number.

Conclusion

ChatGPT forgets your metric definitions because a definition is a decision, not a property of your data, and nothing in a chat-based workflow carries decisions between sessions. What you get instead is the model's prior about what the metric name usually means, executed confidently — which is why the failure surfaces as a number that doesn't reconcile rather than an error you can see.

Keeping definitions in a store your tools read fixes the availability problem: the definition, its exclusions, its owner, and its effective date arrive with the question. Keep your semantic layer for enforcement and for anything that gets reported. Between the two, the version of "active customer" you explained on Monday is still the one in use on Thursday, and you can prove which version any given number used.

Frequently asked questions

Isn't this what a semantic layer is for?

Yes, for enforcement, and if you have one you should route reported numbers through it. The gap is coverage: a semantic layer governs queries that go through it, and a large share of real analysis doesn't — the ad-hoc question, the CSV pasted into a chat, the definition that's been decided but not yet modeled, the person without BI access. A memory layer makes the definition available in those places. It doesn't compute anything, and it doesn't replace the governed layer.

Why doesn't ChatGPT just ask me what I mean by "churn"?

Sometimes it does. More often it resolves the ambiguity silently, because producing an answer is the default behavior and the most common interpretation of a metric name is a reasonable-looking guess. The absence of a question is the problem — you can't audit a definition you were never told was chosen.

Can I just put the definitions in custom instructions?

For two or three metrics, yes, and it's a good use of that space. Past that you run out of room, and you're spending the instructions budget on definitions rather than on behavior. Definitions also need dates, owners, and superseded versions — structure a free-text instruction block doesn't hold well.

How is this different from ChatGPT forgetting my schema?

Schema is the shape of the data — tables, columns, types — and losing it produces visible errors. Definitions are decisions about what the numbers mean, and losing them produces plausible wrong answers. The schema problem is mostly about session boundaries and sandbox lifetime; this one persists even when the data is right in front of the model.

Won't a retrieval setup over our docs solve this?

Partly, and it's better than nothing. Retrieval finds documents that mention the metric — including the outdated ones, the disputed dashboard, and the deck that used a different definition, with nothing marking which is current. What's needed is a record with an effective date and an owner, which is a different thing from search over a corpus; retrieval isn't memory is exactly this distinction.

Does this help with definitions that aren't metrics?

Yes, and it's often where the value shows up first. The same pattern covers what counts as a qualified lead, what stage a deal is in, what "done" means for a ticket — anything where a shared word hides a decision. The product-requirements version of this problem has the same shape and the same fix.