HKUDS/Vibe-Trading · error · ValueError

diff_artifacts: cannot diff a {baseline.model_name!r} artifa

Error message

diff_artifacts: cannot diff a {baseline.model_name!r} artifact against a {updated.model_name!r} artifact -- they have no comparable field paths

What it means

diff_artifacts only compares artifacts of the same model_name, because a DCF artifact and a comps artifact share no comparable field paths. Mismatched names raise a ValueError before any leaf diffing.

Source

Thrown at agent/src/quantlib/valuation/artifact.py:980


def diff_artifacts(baseline: ModelArtifact, updated: ModelArtifact) -> ArtifactDiff:
    """Diff two artifacts of the same model: which fields changed, by how much.

    Args:
        baseline: The "before" artifact.
        updated: The "after" artifact. Must share ``baseline.model_name``.

    Returns:
        An :class:`ArtifactDiff` naming every changed/added/removed input and
        output path.

    Raises:
        ValueError: If ``baseline.model_name != updated.model_name`` -- the
            two artifacts would have no comparable field paths.
    """
    if baseline.model_name != updated.model_name:
        raise ValueError(
            f"diff_artifacts: cannot diff a {baseline.model_name!r} artifact "
            f"against a {updated.model_name!r} artifact -- they have no "
            "comparable field paths"
        )
    changed_inputs, added_inputs, removed_inputs = _diff_leaves(baseline.inputs, updated.inputs)
    changed_outputs, added_outputs, removed_outputs = _diff_leaves(baseline.outputs, updated.outputs)
    return ArtifactDiff(
        model_name=baseline.model_name,
        baseline_generated_at=baseline.generated_at,
        updated_generated_at=updated.generated_at,
        baseline_input_hash=baseline.input_hash,
        updated_input_hash=updated.input_hash,
        input_hash_changed=baseline.input_hash != updated.input_hash,
        baseline_model_version=baseline.model_version,
        updated_model_version=updated.model_version,
        model_version_changed=baseline.model_version != updated.model_version,
        changed_inputs=changed_inputs,
        added_input_paths=added_inputs,

View on GitHub (pinned to 80ffdda44c)

Solutions

  1. Only diff artifacts with the same model_name.
  2. Branch on model_name and use model-specific reporting.
  3. Add a guard: if a.model_name != b.model_name, skip or report incomparable.

Example fix

# before
diff = diff_artifacts(dcf_artifact, comps_artifact)
# after
assert a.model_name == b.model_name, "cannot diff across models"
diff = diff_artifacts(a, b)  # same model_name
Defensive patterns

Strategy: validation

Validate before calling

if baseline.model_name != updated.model_name:
    raise ValueError(f"cannot diff {baseline.model_name} vs {updated.model_name}")
diff_artifacts(baseline, updated)

Type guard

def artifacts_comparable(a, b) -> bool:
    return a.model_name == b.model_name

Prevention

When it happens

Trigger: diff_artifacts(dcf_artifact, comps_artifact); diffing artifacts built by different build_* functions; comparing artifacts whose model_name casing/typo differs (though construction validation usually prevents that).

Common situations: UI letting users pick two artifacts of different models; generic 'compare latest two artifacts' logic that grabs across model types.

Related errors


AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28). Data as JSON: /api/errors/ead95b91734e03e9. Report an issue: GitHub.