Classify the operation before its route
The FAQ excerpt presents a blank request as a way to warm a model through both generate and chat. That documented pattern is useful evidence for an application classifier, but it does not turn every blank request into a known preload. Record declared intent at submission time and retain the unmodified operation record alongside the derived category.
A practical local convention is to place intentionally warming calls in an operational-lifecycle category and requests submitted for user inference in a workload category. This is an application-owned accounting rule, not an Ollama billing, demand, or attribution label.
Four-case decision table
Use this table to keep endpoint selection, completion state, and local accounting decisions separate.
| Case | Request purpose | Endpoint class | Proposed accounting category | Usage collection point | Conclusion supported | Inference to reject | Evidence owner | Bounded application-owned action |
|---|---|---|---|---|---|---|---|---|
| Empty generate request used for preloading | Operational model warming | generate | Operational lifecycle | Keep the raw reply; use completion telemetry only when present | The FAQ shows a blank generate call for warming a model. | A generate route automatically means user workload. | Ollama FAQ excerpt | Attach an intentional-preload tag and exclude it from the user-workload rollup. |
| Empty chat request used for preloading | Operational model warming | chat | Operational lifecycle | Keep the raw reply; use completion telemetry only when present | The FAQ also shows blank chat as a warming path. | A chat route automatically means conversational user demand. | Ollama FAQ excerpt | Attach an intentional-preload tag and exclude it from the user-workload rollup. |
| Non-streaming user request | User inference | Non-streaming API call | User inference | Read fields from the completed response | The usage reference illustrates fields on a completed, non-streaming generate reply. | Metric presence alone establishes why the request was sent. | Ollama usage excerpt | Retain the source record and apply the locally declared workload category. |
| Streaming user request | User inference | Streaming API call | User inference | Read usage from the terminal chunk | For a streaming reply, usage is delivered in the terminal piece marked done=true. | An earlier chunk is a complete usage observation. | Ollama usage excerpt | Wait for completion; if final telemetry is unavailable, store it as missing. |
Correct a hypothetical telemetry failure
Consider an explicitly hypothetical pipeline that labels a known blank preload as user workload and converts absent values on an earlier streaming chunk to zero. The repair is to preserve the raw operation, keep the tagged preload in the operational-lifecycle category, wait for the terminal done=true chunk, and represent unavailable final telemetry as missing rather than zero.
This correction separates observation from interpretation: the terminal streaming record is the documented location for usage data, while the tag, accounting category, retention choice, and missing-value convention are proposed application policy. A missing value says that the pipeline lacks the final observation; zero would be a different local assertion.
Use metrics as observations, not intent labels
The usage reference lists whole-response and load durations, prompt and output token counts, cached-prompt count, and prompt or output evaluation durations. Its timing figures use nanoseconds.
These fields can support an operational record of the response, but this article does not use classification or metrics to conclude residency duration, hardware placement, privacy, billing, user demand, or performance. Lifecycle configuration, access controls, and tuning are outside this troubleshooting scope.
Alternatives and review boundaries
Where submission tags are reliable, purpose-based classification is the preferred design because it preserves the stated reason for the operation. If a trustworthy tag is unavailable, a cautious alternative is a review queue for blank calls rather than silently assigning them to workload; route-only grouping can remain a transport report, but should not become the accounting decision.
Revisit the mapping after source changes or an incompatible release. This guidance is limited to the supplied documentation excerpts and intentionally leaves application authentication of preload intent, retention fields, failure status taxonomy, and correction ownership to local review.
A missing, malformed, or detached submission tag is a recovery case, not evidence that the blank call was either preload or user workload. The documented empty-request pattern establishes only that both generate and chat can preload a model; it does not recover the caller’s intent after the associated record is lost. The FAQ therefore cannot support reclassifying an untagged blank operation into either accounting bucket.
Use an explicit unclassified—intent unavailable category. Detect it when the raw operation has no valid, retained intent tag; contain it by excluding it from both the user-workload and intentional-preload rollups; preserve the raw request, response state, timestamps, and tag-validation result; then send it to review. A later correction should require retained application evidence linking the operation to declared intent, rather than endpoint choice, blank content, or usage fields. If that evidence never arrives, retain the unclassified result rather than silently backfilling workload or lifecycle accounting.
This gives the failure path a testable invariant: deleting or corrupting the tag must change a previously classified blank call to
unclassified—intent unavailable, while leaving the raw record intact and preventing any user-workload total from changing. That is safer than treating failed attribution as a zero-demand or known-preload conclusion.