All insights

Inference economics

What should audit records show when a request partially succeeds across several downstream model calls?

An audit record for partial success should show one correlated parent request, an explicit overall partial_success state and its derivation rule, and the separate outcome of every downstream call. It should preserve failures, retries, fallbacks, omissions, and the calls that contributed to the final response—not reduce mixed execution to a single success or failure flag.

An audit record for partial success should show one correlated parent request, an explicit overall partial_success state and its derivation rule, and the separate outcome of every downstream call. It should preserve failures, retries, fallbacks, omissions, and the calls that contributed to the final response—not reduce mixed execution to a single success or failure flag.

The short answer: record the mixed outcome, not just the final response status

A request that invokes several models can produce a usable response even when part of the execution fails. The parent record should therefore answer two different questions:

  1. What did the caller receive? For example, a complete response, degraded response, partial result, or no result.
  2. What happened during execution? For example, which calls succeeded, failed, timed out, were cancelled, were skipped, or triggered retries and fallbacks.

Keeping these questions separate prevents a successful client response from concealing unsuccessful downstream work. It also allows engineering, security, governance, and finance teams to investigate the same request without interpreting a generic status differently.

What partial success means in a multi-call request

Partial success means that one parent request completed with a mixed set of downstream outcomes. Those outcomes may include:

  • A successful call whose result contributed to the response.
  • A failed or timed-out call whose result was omitted.
  • A cancelled or skipped call that was no longer required.
  • An initial failure followed by a successful retry.
  • A failed primary call followed by a successful fallback.
  • A successful call whose output was rejected by policy or not selected for the final response.

Success at the child-call level does not necessarily mean that the result contributed to the answer. Conversely, a child-call failure does not necessarily mean that the parent request failed. Audit records should represent both execution status and contribution status.

A useful parent outcome vocabulary might distinguish among success, partial_success, failure, and cancelled. Child records can use more specific states such as succeeded, failed, timed_out, cancelled, and skipped. Retry and fallback relationships should be recorded separately rather than overloaded into the status field.

Why an HTTP success code cannot describe every downstream outcome

An HTTP 200 or another successful transport response indicates that the service returned a response under its API contract. It does not establish that every model call succeeded, that every expected result was included, or that no fallback occurred.

For example, an application might request an answer from one model and a supporting classification from another. If the answer succeeds but the classification times out, the application may still return a useful—but degraded—response. Recording only the HTTP status would hide the timeout and make it difficult to explain why the response lacked the classification.

The audit record should therefore keep transport status, parent execution outcome, and child-call outcomes as distinct fields. If degraded output is returned, that fact should be explicit.

How to record the rule that produced the overall partial-success state

The parent record should identify the rule used to derive its overall state. This makes the result understandable even when business logic changes across workflows or versions.

Examples of derivation rules include:

  • partial_success when at least one required call succeeds and at least one optional call fails.
  • partial_success when a primary call fails but an approved fallback produces usable output.
  • failure when any required dependency fails and no fallback succeeds.
  • success only when all required calls succeed, regardless of skipped optional calls.

Where practical, record a rule identifier or policy version rather than relying only on free-text explanations. The record can also include a concise reason such as optional_enrichment_timed_out or fallback_result_returned.

The derivation should not overwrite the underlying events. A successful fallback, for instance, should remain linked to the failed primary attempt so that the final result does not erase its execution history.

Link every downstream call to its parent request

A parent-child identifier hierarchy allows teams to reconstruct execution lineage without storing every prompt or output. Each audit event should be associated with the initiating request and, where relevant, the specific call and attempt that produced it.

Parent request, trace, correlation, and child-call identifiers

A practical identifier structure can include:

  • Parent request ID: The stable identifier for the caller’s logical request.
  • Correlation or trace ID: A shared identifier used to connect activity across services and telemetry systems.
  • Child-call ID: The identifier for one logical downstream model call.
  • Attempt ID or attempt number: The identifier for an initial attempt, retry, or fallback attempt.
  • Parent child-call ID: A reference used when one child call depends on or is triggered by another.

The destination, provider, model, endpoint, and model version may also be recorded when available and where policy permits. These values should be treated as execution metadata, not as substitutes for unique call identifiers.

A retry should normally keep the same logical child-call relationship while receiving a distinct attempt identifier. A fallback to another route or model should identify both the failed source attempt and the decision that initiated the fallback. This preserves lineage such as:

parent request → primary child call → failed attempt → fallback decision → fallback call → successful contribution

Sequence, dependencies, timestamps, and clock consistency

Identifiers establish association, but sequence and timing explain how the request unfolded. For each call or attempt, consider recording:

  • Sequence number or dependency relationship.
  • Attempt number and retry or fallback relationship.
  • Start and end timestamps.
  • Duration calculated from an appropriate monotonic clock where available.
  • Final status and error category, when applicable.
  • Whether the call was required, optional, or conditionally executed.
  • Whether its output contributed to the final response.

Systems that produce events across multiple hosts should use synchronized clocks and a consistent timestamp format. Even with synchronized clocks, explicit dependency and sequence fields remain valuable because timestamps alone may not reliably establish causality.

Use a controlled status and error vocabulary. Categories such as timeout, rate_limited, policy_denied, provider_error, invalid_response, and cancelled_by_parent are generally easier to analyze than unrestricted error strings. Detailed diagnostic messages can remain in restricted operational logs when they are not appropriate for durable audit evidence.

Preserve retry, fallback, and final-response provenance

A useful audit trail explains not only which calls ran, but also how their results shaped what the caller received. This is particularly important for agentic workflows, multi-model orchestration, retrieval pipelines, and applications that combine model output with classification or enrichment calls.

For each downstream call, record a contribution state such as:

  • included: The result directly contributed to the final response.
  • excluded: The call succeeded, but its result was not selected.
  • omitted_due_to_failure: No usable result was available.
  • replaced_by_retry: A later attempt superseded the result.
  • replaced_by_fallback: A fallback result was used instead.
  • blocked_by_policy: The result was not returned because of a policy decision.

When the caller receives degraded output, the parent record should identify the degradation without exposing sensitive response content unnecessarily. Useful metadata may include the omitted component, the fallback used, and whether the caller was informed of the degradation.

Routing, cache, batching, policy, and fallback decisions should also be recorded when they affected execution and when the system exposes that information. For example, a cache hit may explain why no external model call occurred, while a batching decision may explain the timing or grouping of a downstream request. Such records should identify the decision and outcome without assuming that every internal scheduling detail belongs in a durable audit store.

Usage measures—including input tokens, output tokens, cached tokens, or cost allocation—can be included when available. Where practical, retain both child-call measurements and a parent-level total, while making the aggregation rule clear. Estimated, allocated, and provider-reported amounts should not be presented as though they were interchangeable.

Illustrative event sequence for partial success

The following compact example is illustrative. Field names and status values should be adapted to the application’s architecture, policies, and available telemetry.

EventParent requestCall or attemptOutcomeRelationshipFinal-response contribution
Parent acceptedreq-781in_progressRoot requestPending
Primary generationreq-781call-1/attempt-1succeededRequired callIncluded
Enrichment callreq-781call-2/attempt-1timed_outOptional callOmitted due to failure
Fallback initiatedreq-781decision-1fallback_selectedCaused by call-2/attempt-1Pending
Fallback enrichmentreq-781call-3/attempt-1succeededFallback for call-2Included in reduced form
Parent completedreq-781partial_successRule: primary succeeded; optional primary failed; fallback returned degraded resultDegraded response returned

A corresponding parent record might contain the following fields:

{
  "request_id": "req-781",
  "correlation_id": "corr-294",
  "overall_status": "partial_success",
  "status_rule": "required_call_succeeded_with_degraded_fallback",
  "caller_result": "degraded_response_returned",
  "child_summary": {
    "succeeded": 2,
    "timed_out": 1,
    "fallbacks_used": 1
  },
  "omissions": ["full_enrichment"],
  "completed_at": "2026-09-08T14:25:31Z"
}

The detailed child events should remain linked rather than being replaced by this summary. The summary helps with reporting; the child records preserve the lineage needed to understand the mixed outcome.

Separate operational traces from durable audit evidence

Tracing, operational logging, and audit evidence have overlapping data, but they serve different purposes.

Operational traces are commonly optimized for debugging distributed execution, analyzing latency, and understanding service dependencies. They may be sampled, short-lived, or enriched with technical detail that is unsuitable for broad access. Durable audit evidence is usually designed around accountability, controlled retention, restricted access, consistent interpretation, and later review.

Shared request and correlation identifiers can connect the two. For example, an audit event may identify the parent request, final outcome, actor, policy context, and downstream-call summary, while a restricted trace contains deeper timing and diagnostic events. A trace alone should not be assumed to provide a complete, immutable, or compliance-ready audit trail.

Audit design should address:

  • A consistent event and status vocabulary.
  • Timestamp format and clock synchronization.
  • Defined retention and deletion rules.
  • Integrity safeguards appropriate to the system’s risk profile.
  • Restricted access and monitoring of audit-record use.
  • Exportability for authorized investigation and reporting.
  • Clear treatment of late-arriving or corrected events.

These controls should be evaluated as system-level design choices rather than inferred from the presence of trace IDs or log files.

Minimize sensitive data while retaining useful evidence

Complete prompts and outputs are not always necessary to establish what happened. Audit records should favor metadata, classifications, redacted references, and hashes where those approaches meet the investigation need and where policy permits.

Depending on the workflow, a record may include the actor or service identity, tenant, environment, policy identifier, request classification, model identifier, payload reference, or payload hash. Raw prompts, responses, credentials, secrets, and personal information should not be retained by default merely to make an audit record appear more detailed.

Teams should decide what data is necessary for each purpose:

  • Accountability: Who or which service initiated the request?
  • Execution lineage: Which calls, attempts, and decisions followed?
  • Outcome explanation: What contributed to or was omitted from the response?
  • Cost analysis: Which usage measures were available, and how were they allocated?
  • Investigation: What restricted operational data can be retrieved through a controlled reference?

This separation can reduce unnecessary exposure while preserving enough context to understand the request’s execution.

Planning audit visibility for an inference control plane

Multi-call visibility becomes especially relevant when an inference control plane makes routing, caching, batching, policy, fallback, quantization, or GPU scheduling decisions. Organizations should determine which events are visible, how they are correlated, and which records can be retained or exported under their own governance model.

Useful planning questions include:

  • Can the system show a parent outcome and the status of every downstream call or attempt?
  • Can it distinguish a failed first attempt from a successful retry or fallback?
  • Does it preserve the reason and lineage for routing, cache, batching, or fallback decisions when exposed?
  • Can authorized teams identify which results contributed to the final response and which were omitted?
  • How are degraded responses represented to operators and callers?
  • Which model, usage, token, and cost fields are available, and are they measured, estimated, or allocated?
  • Can prompts and outputs be redacted, excluded, hashed, or replaced with controlled references?
  • How are retention, deletion, access restrictions, integrity, and exports handled?
  • Can operational traces and durable audit records be linked without treating them as the same artifact?
  • Can the organization explain how a final response was assembled without retaining unnecessary sensitive content?

Token Forge Cloud Private LLM Inference is designed for private deployment and serving-layer optimization across enterprise AI workloads. Token Forge Cloud supports private deployment paths where models, prompts, and telemetry remain in the customer’s controlled environment. For teams beginning with API-first model access, Token Forge Cloud Managed Model APIs provide a path for validating demand before considering private serving capacity.

Audit-field availability, retention behavior, export requirements, and integration design should be confirmed against the needs of the specific deployment. The central design question is whether the serving architecture provides enough parent-child visibility to explain mixed outcomes while supporting the organization’s data-minimization and access policies.

Next step

Contact Token Forge Cloud to discuss API access, private deployment, and LLM inference cost control.

Contact us