← All use cases
The scenario
The numbers are in a spreadsheet. The reasons are in eight earnings
transcripts, a dozen board memos and a year of management commentary — and the
question you actually have is “what did they say about margin in Q2, and does it
still hold?”
A search engine over those documents returns the paragraphs. It does not tell
you what changed.
Step 1 — Load the documents, dated
Tags carry the period so a later question can be pinned to one, and uploads are
asynchronous — poll get_job, or take the
webhook route.
Step 2 — Bound the question by when things happened
occurred_after / occurred_before filter on when the thing happened, not
when you uploaded it. That distinction is the whole feature: everything was
ingested on one afternoon, and none of it happened then.
Step 3 — Ask the comparative question
Step 4 — Keep the receipt
Store the receipt id next to the answer. When somebody challenges the number six
months from now, the receipt says exactly what the model
saw.
Evals
- Load two consecutive quarters where you know a metric moved.
- Ask the comparative question. Check both periods are actually represented in
the answer, not just the more recent one.
- Re-run with the window narrowed to one quarter and confirm the other drops
out — if it does not, your documents are not carrying event time.
- Pull the receipt and confirm the cited memories come from both filings.
Guardrails
This is not investment advice, and it must not be presented as any. The
system retrieves and summarises what was said. It does not know whether the
guidance was met, and it will summarise a misleading statement as confidently
as an accurate one.
- Numbers in prose are the weakest part. An extracted memory is text, and a
figure that matters should be checked against the filing rather than trusted
from a summary. The receipt gives you the path back.
relevance_score can exceed 1.0 and is not a confidence. It is a ranking
signal within one result set.
- Undated uploads collapse into one day. If event time matters — and here it
is the entire point — set it on write or carry it in the document.
Built from
Both are complete, runnable scripts:
time_travel.py,
memory_basics.py.