C-RAM · Counter AI Hallucination
Intercept the hallucination
before it lands.
C-RAM is named for the systems that shoot down incoming fire short of the target. It does the same to an unsupported claim: every factual statement is checked against the record it cites before you see it. No source, no delivery. Right record but the wrong number, no delivery either.
Reliability
An uncited claim is blocked before delivery, not softened. The gate is deterministic — no model decides what gets through — and it returned the same verdict on 20 of 20 runs at temperature 1.0.
Accuracy
A citation that resolves is not enough. The claim must match the record it points at: wrong digit, wrong currency, wrong date, wrong party — each one caught and named.
Memory
Records are hash-chained. A row altered after ingestion is detected and named, computed in code rather than judged by a model.
We wrote these 48 cases and we publish the harness, so treat the score as a claim we have made checkable rather than proof we cannot be wrong. 48 cases is a small sample. Point it at us, and at whatever you use today.
What gets blocked
Enforcement is deterministic. No model decides what to block, so every refusal names the rule that fired and you can read it in the response.
Record says EUR 4,120. The
model cited the right invoice and stated the wrong amount — the failure that survives review.
{"kind": "number",
"claimValue": 412,
"recordValue": [42, 4120],
"rule": "every number asserted in the
claim must appear in the cited record"}
A first-person question with nothing on file. Absence of a record is reported as absence, never filled in.
{"grounded": true,
"mode": "first-person factual
question: closed world",
"blocked": true}
Same digits, different currency. Cents asserted as euros is caught by the same rule.
{"kind": "currency",
"claimValue": "4120 USD",
"recordValue": "4120 EUR",
"rule": "a number must carry the same
currency or unit as the record"}
Generation with nothing to be unfaithful to is not gated. A code model that refused to write code would be useless.
{"grounded": false,
"mode": "generative request with
no supplied material",
"blocked": false}
Check us. Don't trust us.
We publish the harness. 48 adversarial cases across eight categories, deterministic scoring with no model in the loop, and it runs against any OpenAI-compatible endpoint — so point it at us, and at whatever you use today.
git clone https://github.com/c-ram-ai/c-ram && cd clusterr
node bench/fatal-five.mjs --endpoint https://api.c-ram.ai --key $KEY --model cram-1
| Category | What it catches | Cases |
|---|---|---|
| F1 Empty retrieval | Answering a personal question with no record at all | 6 |
| F2 Phantom citation | A citation that reads perfectly and resolves to nothing | 6 |
| F3 Adjacent id | Citing an id one digit from a real one | 6 |
| F4 Closed world | Hedging where a definite negative is the true answer | 6 |
| F5 Provenance | Seeded knowledge narrated as the user's own memory | 6 |
| G Misquote | Right citation, wrong value — survives review | 6 |
| H Determinism | Same verdict across 20 runs at temperature 1.0 | 6 |
| I Tamper | Naming the row altered after ingestion | 6 |
Read this before comparing scores. H and I measure properties a stateless chat API cannot have — it holds no chain and no run history. A competitor scoring zero there is a structural result, not a defect, and we say so rather than let the number flatter us.
What we don't claim
The list below is the reason to believe the rest of this page.
- No SOC 2, no ISO 27001, no penetration test report, no contractual SLA. None of it. Not "in progress" — absent.
- No uptime figure. We have no production history to quote one from.
- We did not train the model. We serve Qwen3-Coder-30B-A3B-Instruct, Apache-2.0, by Alibaba's Qwen team, on our own hardware.
- Not the cheapest. Hosts of the same open weights undercut us. We are not selling tokens.
- No aggregate throughput number. We publish the measured per-node figure and the scaling unit, because an aggregate is a number you cannot verify and we would not believe it either.
- It is one model, code-specialised, with a 65,536-token context. No vision, no audio, no embeddings, no fine-tuning.
Questions
How do I get started?
Get a free API key in one click at c-ram.ai/#access — no card required. Then make your first request to https://api.c-ram.ai/v1/chat/completions with model: "cram-1".
What programming language SDKs are supported?
Any OpenAI-compatible SDK works. We have examples for Python and Node.js — set the base URL to https://api.c-ram.ai/v1 and pass your API key. The cram-code coding agent (Node 22+, single file) works out of the box.
How much does C-RAM cost?
Every account starts with 1,000,000 free input tokens and 1,000,000 free output tokens every month on cram-1, self-serve, no card. Paid plans start at $200/mo (Starter). You pay per verified query, not per token: Draft at $0.02, Signed at $0.10, Attested at $0.50.
What is the grounding gate?
Before any factual statement reaches you, C-RAM checks it against the record it cites. No source? Blocked. Right source but wrong number? Blocked. The gate is deterministic — no model decides what gets blocked — and every refusal names the rule that fired.
What model does C-RAM serve?
cram-1 is an alias for Qwen3-Coder-30B-A3B-Instruct, developed by Alibaba's Qwen team and released under Apache-2.0. We did not train this model. It has a 128,000-token context window, supports streaming and tool calling, and is served on vLLM 0.28 on dedicated GPU hardware in the EU.
Where is my data stored and processed?
All infrastructure runs in a single region: the EU. We do not replicate, mirror, or route traffic through other regions. API request and response contents are not stored on our servers after delivery. We log only metadata for billing and abuse prevention (timestamp, model, token counts) for 90 days.
Do you use my data to train models?
No. We never use your API traffic, prompts, or responses to train, fine-tune, or improve the model. Our model weights are fixed at the version served by vLLM. No user data is incorporated into future model versions.
What happens when I reach my token limit?
Every account has a hard monthly ceiling ($100 by default, changeable in the dashboard). Past it we return HTTP 402 with the budget in the response. We stop rather than silently degrade — a grounding product that degrades under a spend cap would be worse than one that stops.
What error codes might I see?
401 — API key refused. 402 — monthly cap reached (upgrade your plan). 429 — rate limited (check Retry-After header). 500 — server error. Any 4xx or 5xx is free; our errors never bill.
What is cram-code?
A terminal coding agent on cram-1. Single file, no dependencies, Node 22+. It lists, reads, searches, edits and writes files, runs commands, and asks before anything that changes state. Get it with: curl -sO https://cram-code.ai/clusterr.mjs && npx --yes -p node-22 cram-code .
cram-code: a coding agent in your terminal
One file, no dependencies, Node 22. It lists, reads, searches, edits, writes and runs in your project. It asks before anything that changes state, streams its answer, and supports /undo.
$ cram-code "List the files, then show me how the /v1/plan route works. Don't change anything." → read_file {"path":"package.json"} → search "v1/plan" src/ plan.ts — GET /v1/plan checks the tenant tier, applies free allowance from the TIER table, and returns the plan key. No DB write; it is a read-only lookup. tokens: 2158 in / 76 out
curl -sO https://cram-code.ai/clusterr.mjs && npx --yes -p node-22 cram-code .
Get a key
Get a key. One click.
Every account starts with 1,000,000 free tokens on cram-1, no card, no waiting list. Build whatever you want; the grounding gate is on from the first request.
Your API key — shown once, never again. Save it now.
First request:
Then read the docs, or run cram-code, the coding agent, in any project folder (Node 22):