Bare model
0 tokens of contextI don't have access to Acme's contract. Enterprise agreements typically renew annually, and overage terms vary by deal — you'd need to check the MSA directly or ask your account team.
Send your data once. One POST returns ranked, cited chunks already formatted for your prompt — packed to the token budget you name, and marked unanswerable when your corpus does not cover the question. No vector database to run.
Worked examples
Left: a model with no context. Right: the same model after one call to /recall. It cites the demonstration corpus every key can search — take one and run these four questions against the same chunks yourself. The corpus has no answer to the last one. Watch what each side does with that.
I don't have access to Acme's contract. Enterprise agreements typically renew annually, and overage terms vary by deal — you'd need to check the MSA directly or ask your account team.
Acme renews 1 March 2026. Overage billing is capped at 15% above committed spend, and the cap survives the auto-renewal clause in §7.2.
Five stages, all of them ours to run. Your data is split, embedded, and indexed as vectors where distance means similarity. A query is embedded the same way, and the nearest chunks come back ranked, filtered, and cited.
PDFs, Postgres rows, Slack threads, Notion pages, S3 objects. Push to the API or point us at a source and we pull on a schedule.
push · scheduled pull
Split on document structure, not blind 512-token windows. Headings, tables, and code blocks stay intact.
recursive · 12% overlap
Current embedding models, or bring your own. Every vector records the model that made it, so an upgrade never silently reshuffles your recall.
1,536 dim
HNSW with scalar quantization, one namespace per tenant. A write is queryable on the next request, with no indexing delay to wait out.
HNSW · per-tenant namespace
One POST returns ranked, cited chunks with your filters and strategy applied.
6 strategies · one endpoint
Plain JSON over HTTPS, so the client is whatever your language already ships with — nothing to install, nothing to keep up to date. What comes back includes a prompt-ready string, so you never reshape JSON yourself.
Take a key and run it, or read the reference.
# 1. store — send the data oncecurl -X POST $ITAN_HOST/api/memories \ -H "Authorization: Bearer $ITAN_KEY" \ -d '{"source":"acme_msa_2024.pdf","text":"Overage is capped at 115%..."}' # 2. recall — before every promptcurl -X POST $ITAN_HOST/api/recall \ -H "Authorization: Bearer $ITAN_KEY" \ -d '{ "query": "when does acme renew?", "max_tokens": 4000, "strategy": "hybrid" }' # -> ranked chunks, a prompt-ready string, and# "sufficient": false when the answer isn't in there{
"chunks": [
{
"text": "Overage billing shall not exceed
115% of Committed Spend...",
"source": "acme_msa_2024.pdf",
"chunk": 41,
"score": 0.91,
"written_at": "2024-03-01"
}
],
"prompt": "Answer using only the context below...",
"sufficient": true,
"strategy": "hybrid",
"tokens_estimated": 397,
"returned": 6,
"sandbox": true
}Six strategies behind the one /recall endpoint. Change the strategy field, measure, keep what wins. Your ingest, index, and prompts stay as they are. Against each one is the work it does per query, which is what its cost tracks.
Vector nearest-neighbour over cosine distance. Fastest path, and the default when your corpus is prose.
strategy: "semantic", min_score: 0.72A memory layer holds the material your organisation would least like to see leave. So the boundary is the product. Start with the three you can verify against the API right now.
roadmap
The controls the platform is architected around, published early so you can tell now — not after a procurement cycle — whether it would clear your review.
A key is issued instantly and lasts seven days. Store a chunk, recall it with any of the six strategies, delete it and get the count back. No sign-up, no card, no call.