---
title: Inferred metadata
description: LLM-generated fields per paper, labelled with the models and prompt version that produced them. Status is pending, ready or failed.
sidebar:
  order: 6
---

Inferred fields are generated by Claude after the tree is built. They are always labelled as inferred, with the models and prompt version that produced them. Everything else in a response is extracted, not inferred.

## v1 fields

| Field           | Type     | Model             | Contents                                                                                                              |
| --------------- | -------- | ----------------- | --------------------------------------------------------------------------------------------------------------------- |
| `tldr`          | string   | Claude Haiku 4.5  | One sentence, at most 40 words: what the paper does and its main finding                                              |
| `contributions` | string[] | Claude Haiku 4.5  | Main claimed contributions, at most 6, in the paper's order                                                           |
| `paperType`     | enum     | Claude Haiku 4.5  | `method`, `benchmark`, `survey`, `theory`, `position`, `dataset`, `other`                                             |
| `entities`      | object   | Claude Haiku 4.5  | `tasks`, `methods`, `datasets`, `metrics`, `models`: each a string[], at most 15                                      |
| `artifacts`     | array    | Claude Haiku 4.5  | `{ kind, url, note? }`, `kind` one of `code`, `data`, `model`, `project`, `other`; only URLs that appear in the paper |
| `results`       | array    | Claude Sonnet 5.5 | `{ benchmark, metric, value, baseline?, note? }`, at most 25; values copied as written                                |

- Fields the paper does not support come back as an empty string or empty array.
- The input is the paper's Markdown, cut at a paragraph boundary after 400,000 characters for very long papers.

## Status

`inferred` in `.json` takes one of three shapes:

| `status`  | Other fields                                       | Meaning                                  |
| --------- | -------------------------------------------------- | ---------------------------------------- |
| `pending` | `queuedAt`                                         | Queued; usually ready in 5–40 s          |
| `ready`   | `models`, `promptVersion`, `generatedAt`, `fields` | Done                                     |
| `failed`  | `error`, `failedAt`                                | Enrichment failed; content is unaffected |

```json
{
  "status": "ready",
  "models": [
    {
      "model": "claude-haiku-4-5",
      "fields": ["tldr", "contributions", "paperType", "entities", "artifacts"]
    },
    { "model": "claude-sonnet-5-5", "fields": ["results"] }
  ],
  "promptVersion": "2026-10-14.1",
  "generatedAt": "2026-10-14T09:00:21.000Z",
  "fields": {
    "tldr": "The Transformer replaces recurrence with self-attention and sets a new state of the art in machine translation.",
    "contributions": ["Proposes the Transformer, built solely on attention", "..."],
    "paperType": "method",
    "entities": {
      "tasks": ["machine translation"],
      "methods": ["Transformer", "multi-head attention"],
      "datasets": ["WMT 2014 English-German"],
      "metrics": ["BLEU"],
      "models": ["Transformer (big)"]
    },
    "results": [{ "benchmark": "WMT 2014 English-German", "metric": "BLEU", "value": "28.4" }],
    "artifacts": [{ "kind": "code", "url": "https://github.com/tensorflow/tensor2tensor" }]
  }
}
```

The outline carries a subset: `inferred.status`, plus `tldr`, `contributions` and `paperType` once ready.

While `status` is `pending`, `.json`, `outline.json` and `metadata.json` responses carry `Retry-After: 10` and `Cache-Control: public, max-age=30`. A `failed` status also gets `public, max-age=30` (no `Retry-After`), so a later re-enrichment shows up. To wait for `ready` instead of polling, see [first request](/first-request).

## Labelling

| Field           | Meaning                                                                        |
| --------------- | ------------------------------------------------------------------------------ |
| `models`        | `[{ model, fields }]`: which model produced which `fields` keys                |
| `promptVersion` | Prompt version, e.g. `2026-10-14.1`. Fields may be regenerated when it changes |
| `generatedAt`   | When the fields were generated                                                 |

| Model id            | Fields                                                        |
| ------------------- | ------------------------------------------------------------- |
| `claude-haiku-4-5`  | `tldr`, `contributions`, `paperType`, `entities`, `artifacts` |
| `claude-sonnet-5-5` | `results`                                                     |

Treat inferred fields as helpful summaries, not ground truth. Check claims against the cited sections.

## Token counts

Token counts are approximate: `ceil(characters / 4)`, labelled as such.

```json
{ "tokens": { "approx": 10240, "method": "chars/4" } }
```

| Where                       | Scope                                    |
| --------------------------- | ---------------------------------------- |
| `PaperJson.tokens`          | Whole paper, from its Markdown rendering |
| `Outline.tokens`            | Whole paper, from its Markdown rendering |
| `Outline.sections[].tokens` | One section, from its Markdown rendering |

Use them to budget context, not to bill. Real Claude token counts can differ by 15–20% or more.
