A Cohere grounded answer returns spans with no citations — what does that mean?
answer
- absence of a citation is silence, not denial
- scaffolding text is legitimately uncited
- whole answer uncited means check the request
- gate on claim-bearing sentences only
- log coverage as a grounding metric
basics
~20 sUncited spans are text the model did not attribute to any document you supplied — connective phrasing, framing, or claims drawn from parametric knowledge. Citations are never guaranteed to cover the whole answer, so treat an uncited claim as unsupported rather than as a bug.
solid answer
~50 sCohere's grounded path annotates the spans it can attribute; the rest of the answer is deliberately left bare. Three causes are worth separating. First and most common, the span is connective or framing text — "Here is a summary", "In short" — which genuinely has no source. Second, the span is a factual claim the model produced from its own knowledge rather than from your documents; that is the dangerous case and the one your product should surface. Third, the whole response is uncited, which usually means a configuration problem: no documents were sent, or `citation_options` was set to `OFF`. Diagnose the third by checking the request, not the answer. For the second, the right engineering response is a policy: identify claim-bearing sentences, check whether each is covered by at least one citation, and either mark the uncovered ones in the UI or fall back to a refusal — plus log the covered fraction as a grounding metric per answer.
go deeper
Know that a grounded answer normally mixes cited and uncited text, and that connective sentences having no source is expected rather than broken.
Distinguish the three causes — scaffolding, unsupported claim, and a misconfigured request — and check the request first when nothing at all is cited.
Show a concrete coverage policy over claim-bearing sentences with an annotate-or-gate decision, and treat the covered fraction as a production metric that catches retrieval regressions.
Decide where in the product an unsupported claim is unacceptable versus merely undesirable, and accept the over-refusal cost that a strict grounding gate imposes on that surface.
## What an uncited span actually is A citation asserts that a stretch of the generated answer is attributable to something you supplied. The absence of a citation asserts nothing at all — it is silence, not a denial. Reading that silence correctly is most of the skill here, because the same empty highlight can mean three quite different things. **1. The span carries no claim.** Sentences like "Based on the policy documents:" or "Let me know if you need the exact clause" have no source because they say nothing sourceable. An answer that is fifty percent uncited by character count can still be fully grounded in substance if the uncited half is scaffolding. Any metric that counts raw uncited characters will therefore look alarming and mean nothing. **2. The span carries a claim the documents do not support.** This is the case worth engineering around. The model has filled a gap from its own knowledge, or paraphrased beyond what the source said, and there is no supporting document to point at. In a customer-facing answer this is exactly the failure mode grounded generation exists to prevent, and the citation array is the signal that lets you catch it — but only if you look. **3. Nothing at all is cited.** Almost always a configuration issue rather than a model behaviour. Check, in order: did the request actually include `documents` (a retrieval step that returned zero results will happily send an empty list); was `citation_options` set to `OFF`; and, on a streamed response, did your consumer collect the citation events or only the text deltas. A retrieval pipeline that silently returns nothing and a citation mode set to OFF both produce the same symptom, which is why you check the request rather than reasoning about the answer. ## Building a policy instead of an assumption The weak answer to this question is "you should get citations on everything". You will not, and demanding it produces a system that either fails constantly or teaches you to ignore the signal. The strong answer is a coverage policy applied to claim-bearing text. A workable shape: - Split the answer into sentences on the raw text. - Classify each sentence as claim-bearing or scaffolding. A crude heuristic — sentences containing numbers, dates, named entities, or modal obligations — gets you surprisingly far without a second model call. - For each claim-bearing sentence, check whether any citation span overlaps it. - Compute the covered fraction and act on it. What "act on it" means is a product decision, and having a considered one is what a senior answer demonstrates: - **Annotate.** Render cited sentences with a source affordance and visually distinguish the uncited claim-bearing ones. Honest, cheap, and it puts the judgement with the reader. - **Gate.** Below a coverage threshold, replace the answer with "I could not find this in the documentation" and offer the retrieved sources. Right for high-stakes surfaces; expect over-refusal complaints and tune the threshold on real traffic. - **Retry.** Re-run retrieval with a reformulated query and answer again. Costs a round trip and does not always help, since low coverage often means the corpus genuinely lacks the answer. ## Coverage as an observability signal Even if the UI does nothing with it, log the covered fraction per answer along with the document ids that were actually cited. Two reports fall out of that at no extra cost. First, a distribution of grounding coverage over time — a sudden drop after a deploy usually means the retrieval step changed, not the model. Second, a list of documents that are retrieved often but cited rarely, which points straight at chunks that match queries lexically but do not answer them. Both are cheaper than a judge-model evaluation and they run on production traffic rather than a fixture set. ## What you must not conclude The symmetric error to ignoring uncited spans is over-trusting cited ones. A citation says the span is attributable to a document you supplied. It does not say the document is current, that it is the best source available, or that the paraphrase preserved the source's qualifiers — a document reading "refunds within 30 days for unopened items" can support a cited sentence that drops the condition. Attribution narrows the space of errors; it does not eliminate it. And asking the model in the system prompt to "cite everything" does not change the citations array. The array is produced by the API's attribution step over the text; instructing the model to be more citeable may nudge it towards closer paraphrase, but it is not a control surface for coverage.
- Should you reject an entire answer because one sentence lacks a citation?No. Connective and framing sentences carry no claim and will never be cited, so a whole-answer rule fires constantly and gets switched off. Gate on claim-bearing sentences — those with numbers, dates, entities, or obligations — and set a coverage threshold you tune against real traffic. Reserve outright refusal for high-stakes surfaces where an unsupported claim is worse than no answer.
- Every answer in production suddenly comes back with zero citations. Where do you look first?At the request, not the model. Check whether the documents array is actually populated — a retrieval step returning zero results sends an empty list without complaining — and whether citation mode has been set to OFF. On a streamed response, also confirm your consumer collects the citation events rather than only the content deltas. All three produce the identical symptom.
- A sentence is cited, so is it safe to show as fact?Safer, not safe. The citation says the span is attributable to a document you supplied; it says nothing about whether that document is current, whether it was the right one to retrieve, or whether the paraphrase kept the source's qualifiers. A source saying "30 days for unopened items" can support a cited sentence that quietly drops the condition. Attribution narrows the error space rather than closing it.
saying these in an interview costs you the question
- Expects every sentence of a grounded answer to be cited
- Treats missing citations as an API bug to report
- Assumes a cited sentence must be factually correct
- Tries to fix coverage by telling the model to cite everything
- Ignores that zero citations usually means an empty documents array