Troubleshooting#
This page indexes the registered failures of nemotron steps run byob/bfcl by the phase
that raises them. Each row names the code the step reports, what usually causes it, and
the fix the code itself suggests. The codes come from the error taxonomy declared in
src/nemotron/steps/byob/bfcl/step.toml and, for evaluation, from
src/nemotron/steps/byob/runtime/benchmark_families/bfcl/eval/error_taxonomy.py.
Note
The pipeline refuses rather than degrades. Most rows below describe a config or a pack that asked for something no stage would honor, or evidence that no longer identifies one run. In both cases the fix is to correct the input or start from a clean tree, not to retry the same command.
Configuration#
Code |
Likely cause |
Fix |
|---|---|---|
|
The config omits |
Set |
|
The config asks for work no stage performs: an unknown export name, balancing controls with deduplication disabled, eval or translation orchestration keys, leftover shared model fields, or an unrecognized |
Disable or remove the listed setting, or register its owning stage. Refer to Generation Configuration Reference. |
|
The oracle pack sits outside every trust root. |
Move the pack under an |
|
An enabled |
Give every enabled role a non-secret |
|
The reference JSONL is outside the allowlist, its hash does not match, or a sample carries oracle truth. |
Place it under an allowed root, pin its exact |
|
|
Raise it to at least the number of templates in the largest category, so no template loses its instances. |
|
|
Use one enabled canonical stage name, and restore the untouched parent chain or run a full generation without |
|
The requested stage is not implemented by this family. |
BFCL supports |
|
The translate config names a bare table, reuses an output directory, or enables quality filtering. |
Start from |
Pack Validation and the Gold Gate#
Code |
Likely cause |
Fix |
|---|---|---|
|
|
Fix the reported check failures, keep |
|
The endpoint does not satisfy the BFCL Oracle HTTP v1 contract. |
Serve HTTPS routes for metadata, tools, isolated sessions, calls, state, and session deletion. Store only environment variable names in the endpoint config, and pin the expected oracle id, version, and content digest. |
|
The endpoint metadata no longer matches its config, or changed mid-run. |
Deploy or select the intended immutable oracle revision, update the expected digest, and re-run |
|
The held-out policy names missing ids, overlaps |
Reference |
|
A template declares no |
Add an assertion describing what success means for that shape. A decline template can assert that no tool was called. |
|
A template slot omits |
Declare the flag on every slot. It decides whether the value must appear in the opening request or must stay out of it, so a slot without it is guarded by neither rule. |
|
|
Use one of |
|
A |
Give it |
|
A fixture collection carries both its own id and a foreign key. |
Declare |
|
An assistant question uses |
Add |
|
A non-tool milestone has no phrasing. |
Declare |
Generation Stages#
Code |
Likely cause |
Fix |
|---|---|---|
|
The held-out reservations and the category budget cannot both be met: a slot had every matching row reserved, a category ran short, or every template was reserved. |
Add fixture rows or templates, lower the budget, or release the reserved ids. |
|
A publication candidate bound a reserved template or fixture row, so the run aborted before writing the published table. |
Read |
|
A call read a corrected slot while it still held the replaced value. |
Move the correction turn before the call that reads the slot, and re-confirm after it when the tool requires confirmation. |
|
A call carrying |
Put an |
|
A |
Name an earlier |
|
Every task was dropped before export. |
Read |
Publication and Balancing#
Code |
Likely cause |
Fix |
|---|---|---|
|
The published table or an export record does not match the pinned publication schema. |
Do not edit generated files. Remove |
|
A canonical row cannot be represented by the selected compatibility format, for example a function or argument name that is not a Python identifier, or an ambiguous evaluator record layout. |
Read the task id in the exception, fix the pack tool schema or the conversation template, and regenerate. The final stage leaves no manifest behind. |
|
An export changed after encoding, or failed read-back equivalence against the published table. |
Inspect |
|
A run died before the commit marker. |
Rerun |
|
The bundle directory was handed straight to the Launcher. |
|
Balancing that cannot meet a declared target is governed by
semantic_deduplication_config.unmet_target_policy: abort refuses the run, while
publish_non_gold publishes and records the run as ineligible. See
Generation Configuration Reference.
Evaluation Configuration#
Code |
Likely cause |
Fix |
|---|---|---|
|
A section is open, a setting is missing, a boolean or number is quoted, |
Declare |
|
|
Point |
|
Two candidates share an alias or resolve to the same weights, or a candidate declares no serving route. |
Give each candidate a unique filesystem-safe alias and a distinct canonical identity, one candidate per set of weights. Run |
|
The revision names a moving pointer such as |
Pin a full 40 to 64 character commit id, or set |
|
A literal credential was written into the config or embedded in |
Name the environment variable with |
|
Publication was requested with a weakened gate or an unpinned candidate. |
Restore every locked gate and pin each candidate, or set |
|
|
Write a non-empty list with no repeats. Executable modes additionally need a source run whose manifest declares an oracle. |
|
The envelope changed a value the runner owns. |
Start from |
Evaluation Source and Contamination#
Code |
Likely cause |
Fix |
|---|---|---|
|
The named file is not a commit marker: absent, unreadable, misnamed, missing a publication field, or declaring an unreadable schema. |
Rerun |
|
The manifest, its run id, or its schema version changed between config resolution and verification. |
Re-resolve the eval config against the current publication and verify again. |
|
A table’s bytes do not match the declared hash, or the file is a symlink or missing. |
Evaluate the tree the manifest describes, or regenerate. A table that changed after publication is a different benchmark whatever its name says. |
|
The parquet was not written with the schema this build reads, or a row will not decode. |
Regenerate with this pipeline revision. Skipping the row would silently change the task set. |
|
The published table is not a selection of raw rows, a row restates a truth field, a held-out row shipped, or the declared counts disagree. |
Regenerate the benchmark; the audit table can no longer explain a score. |
|
A duplicate task id, or an id that cannot be a path component or a log token. |
Task ids derive from |
|
The pack manifest, the execution resource, or any file in the pack tree no longer matches the recorded fingerprint. |
Restore the pack revision the benchmark was generated from. A helper module the backend imports changes what the oracle does, so the whole tree counts. |
|
The declared oracle is not the one the source run executed, or the backend does not expose the required interface. |
Declare the executed resource in the pack manifest. A resource chosen only by the eval config could execute code the source run never ran. |
|
A localized benchmark does not satisfy the content-addressed translation contract. |
Regenerate with the translation adapter and restore the complete output as one immutable tree. |
|
The manifest cannot say which models read its rows. |
Regenerate with |
|
The source moved after verification, usually a regeneration into the same directory. |
Stop writing into the publication tree during an evaluation, then verify again from a clean tree. |
|
Source verification refused the run for a reason with no narrower code. |
Read the subject and problem fields of the report; they name the specific check that failed. |
|
A candidate is the model that profiled, paraphrased, judged, or translated rows it would be scored on. |
Evaluate a different candidate, regenerate with surface models that are not under evaluation, or accept a non-publishable score over the remaining rows with |
|
A candidate and an exposed model cannot be told apart, and publication was requested. |
Pin |
|
Exclusion leaves nothing to score, or no row is answerable by every candidate. |
Evaluate the candidate against a benchmark it did not help build, or regenerate with a different surface model. This is a benchmark-and-candidate mismatch, not a tuning problem. |
|
Eligible and excluded rows overlap, a candidate lacks the common set in publication order, or two candidates share an alias. |
Re-verify the source and re-run the gate. A hand-edited plan is not an authorization. |
|
The plan was gated against another config or source, or no longer resolves to the current decision. |
Verify the source and gate the candidates together, immediately before execution. |
Evaluation Execution#
Code |
Likely cause |
Fix |
|---|---|---|
|
The variable named by |
Export it in the eval runner environment. Never put the key in the config; replay from a completed cache needs no credential. |
|
The endpoint answered HTTP 401 or 403. |
Every task presents the same credential, so this is a configuration fault and the run stops on the first rejection. Check the key, then re-run into a new output directory. |
|
Every allowed transient attempt failed before the deadline. |
Check endpoint health and rate limits, then start or resume. Authentication failures and malformed output never retry. |
|
The request is empty, belongs to another candidate, or an extension replaces a pinned field. |
Rebuild it from the same candidate, authorized task, ordered messages, and model-facing tools. |
|
An extension sits outside the exact |
Remove the unknown namespace or the conflicting key. |
|
HTTP 200 carried no OpenAI-compatible chat completion choice. |
Fix endpoint compatibility. This is recorded as malformed model output and is never retried or repaired; malformed argument JSON is preserved separately for deterministic scoring. |
|
A published row is not a replayable conversation. |
Do not edit the parquet. Regenerate from a pipeline run whose replay produced the conversation. |
|
The task was not assigned to this candidate, the alias now names different weights, or the projection does not match the verified source. |
Re-project the benchmark under its expected hash and task ids, and drive the exact candidate contract passed to the gate. |
|
A prompt held an assistant or tool message the candidate did not produce and the driver did not release. |
This is unrecoverable for the run: discard its episodes. Add prompt material only through the driver’s append operations. |
|
The driver was asked for a move its own state forbids, such as echoing an absent or ambiguous call id. |
End the episode with the matching status instead of repairing the model’s output. |
|
The clock, tool policy, milestones, projection identity, or oracle lineage is missing or inconsistent. |
Restore the verified publication and pack. Do not reconstruct runner metadata from an unrelated row. |
|
The task spec does not match the candidate, plan, source, policy, or oracle being driven. |
Rebuild it from the exact projection and handles that source verification and contamination gating produced. |
|
A task-local worker or endpoint session could not be opened or closed cleanly. |
Discard the episode, verify the source resource again, and inspect worker or endpoint cleanup before retrying the complete task. |
|
The oracle could not establish clean state for the task. |
Inspect fixtures and reset behavior, then rerun the whole task with a new session. Do not reuse a prior session. |
|
A schema-valid call failed outside the structured business-result contract. |
Record the infrastructure outcome. Never retry a mutating call in the same episode, because its commit state may be unknown. |
|
The oracle could not return canonical JSON for final state. |
Retain the earlier call evidence and rerun only after fixing the verified oracle. |
|
A pack assertion could not be imported or executed. |
Fix the assertion infrastructure and rerun the complete task. This is not a verdict and must not be counted as a candidate pass or failure. |
|
A replay cache is truncated, hash-invalid, holds a claimed request with no completion marker, or contains a failure-only candidate completion. |
Preserve the file as evidence and resume into a new output directory. Current candidate clients persist only semantically completed responses; transport, provider, malformed-envelope, authentication, and cancellation failures remain uncached and retryable. |
|
The same immutable request key has different persisted evidence. |
Never overwrite an observation. Investigate the source, plan, task-spec, or oracle identity, and use a new output directory. |
Evaluation Scoring, Artifacts, and Orchestration#
Code |
Likely cause |
Fix |
|---|---|---|
|
An episode was scored against a script or task spec it did not answer. |
Score each episode under the exact handles that drove it. A re-projected row is a different question, so re-drive it rather than re-pairing the evidence. |
|
Trace scoring was asked for a verdict it cannot produce. |
Score with |
|
The executable policy requests behavior the deterministic scorer cannot provide. |
Restore the frozen scoring contract and disable repair or unsupported task-success semantics. |
|
Task scores are missing, duplicated, reordered, or cross an identity boundary. |
Score every authorized task exactly once in plan order before aggregation. |
|
The report, task table, manifest, aggregate hashes, or required caches do not form one immutable set. |
Preserve the existing evidence and resume into a new output directory. |
|
A runner precondition is unmet: an unverified config, an incomplete task set, or an empty run id. |
Fix the named precondition and restart before candidate inference. |
|
The runner does not publish the measurement the pinned mode declares. |
Call the runner the mode declares, or let the config choose it. Each runner publishes one measurement. |
|
The bundle tree, source, candidate count, mount, or pinned versions do not match the native adapter contract. |
Restore the exact six-file bundle tree and canonical source, use one candidate with the same model id, pass the mounted bundle path, keep the bundle, BFCL output, and native output trees disjoint, and pin the required evaluator and launcher versions. |
|
Generated orchestration files disagree with what is on disk, or a path sits inside the immutable bundle. |
Use a fresh orchestration output path, or restore the byte-identical generated files. The bundle’s exact file set is re-verified every run. |
|
The generated framework package is absent or stale in the Launcher environment. |
Remove any stale distribution, install the exact package path printed as |
|
An unknown runtime exception surfaced through the CLI. |
Inspect the chained exception and the immutable source and contamination diagnostics. The CLI maps unrecognized failures here rather than inventing a candidate score. |
Reading a Failure Attribution#
A failed task is not automatically evidence about the model. Every terminal episode
status carries a fixed attribution, and only candidate statuses count against the
model under test.
Attribution |
Episode statuses |
|---|---|
|
|
|
|
|
|
A metric that had nothing applicable to measure reports a metric.* not-applicable
code rather than a zero, so an absent gate never reads as a failed one. Setup failures
appear with fatal_setup attribution and one of the codes tabulated above. For how the
gates themselves are defined, refer to Evaluation.