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
- Only diff artifacts with the same model_name.
- Branch on model_name and use model-specific reporting.
- 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
- Group artifacts by model_name before offering diff operations in UIs.
- Store artifacts keyed by model_name so cross-model pairs never meet.
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
- ModelArtifact.model_name must be one of {_MODEL_NAMES}, got
- invalid alpha_id
- alpha_id not found
- invalid period: {exc}
- too many running benches; wait for one to finish
AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28).
Data as JSON: /api/errors/ead95b91734e03e9.
Report an issue: GitHub.