Skip to content

Materialize composed config snapshots in KFP - #773

Merged
kmontemayor2-sc merged 25 commits into
mainfrom
codex/kfp-config-snapshots
Sep 30, 2026
Merged

kmontemayor2-sc merged 25 commits into
mainfrom
codex/kfp-config-snapshots

Conversation

@kmontemayor2-sc

Copy link
Copy Markdown
Collaborator

Summary

Resolve KFP task and resource configs in ConfigValidator and pass snapshots downstream, so pipeline components consume
the same resolved values. The validator also derives the GLT backend decision from that task config.

Part 2 of 3, based on #726. E2E config adoption follows separately.

Approach

  • Compose both source configs and inline external shared resource configs into self-contained protobufs.
  • Write YAML snapshots with source provenance, initialize the validator runtime from them, and validate the same
    resolved protobufs.
  • Publish snapshot URIs and the GLT decision as validator outputs consumed by the pipeline.

User-facing changes

ConfigValidator's CLI and component inputs change from task_config_uri and resource_config_uri to
source_task_config_uri and source_resource_config_uri. Other pipeline components retain their existing input names.

The validator CLI additionally requires:

  • --output_file_path_composed_task_config_snapshot_uri
  • --output_file_path_composed_resource_config_snapshot_uri
  • --output_file_path_should_use_glt_backend

The corresponding component outputs contain the two snapshot URIs and GLT decision. The Python kfp_validation_checks
helper uses the renamed source arguments and returns the resolved configs plus the backend decision.
check_pipeline_has_valid_start_and_stop_flags accepts gbml_config_wrapper instead of task_config_uri.
The separate glt_backend component helper is removed.

Snapshots are written under <temp-regional-bucket>/<job_name>/config_validator/. Cache hits reuse prior validator
outputs. Reexecution recomposes sources and can overwrite snapshots for the same job name; use distinct names for runs
that need distinct snapshot paths.

Verification

  • Python and Markdown formatting passed.
  • YAML parsing passed for all 24 configs.
  • All six validator tests and the compiled-pipeline test passed through the official launcher with runtime shape checking.
  • Scoped type checks, latest-main trial merge, and whitespace checks passed.

kmontemayor and others added 22 commits July 30, 2026 16:22
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drop a redundant genericity test and an implementation-pinning
assertion, and assert compiled-pipeline wiring structurally instead of
matching the KFP compiler's text layout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Forcing enable_caching=False re-ran composition on every relaunch, so a
retry could overwrite the job's resolved snapshots with different
dynamically resolved values while downstream cached steps kept the old
ones. Recompose by launching with a new job name or with run-level
caching disabled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every YAML read now composes; plain configs and materialized snapshots
compose to themselves. compose_yaml_config snapshots and restores any
foreign GlobalHydra context instead of refusing to run, so reads work
inside a user application under @hydra.main. Local files not named
*.yaml are staged like remote URIs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
proto_to_yaml re-serializes the parsed protobuf, so source comments
cannot survive composition. Prepend a provenance comment naming the
source config instead, prefixed with the docker image when the source
is a container-local path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@mkolodner-sc mkolodner-sc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Kyle! Few small comments/questions

Comment thread docs/user_guide/config_guides/hydra_composition.md
Base automatically changed from codex/hydra-config-composition to main September 29, 2026 01:00
Comment thread gigl/common/utils/proto_utils.py
…p-config-snapshots

# Conflicts:
#	docs/user_guide/config_guides/hydra_composition.md
@kmontemayor2-sc
kmontemayor2-sc marked this pull request as ready for review September 29, 2026 23:54
@kmontemayor2-sc
kmontemayor2-sc added this pull request to the merge queue Sep 29, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 30, 2026
@kmontemayor2-sc
kmontemayor2-sc added this pull request to the merge queue Sep 30, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 30, 2026
@kmontemayor2-sc
kmontemayor2-sc added this pull request to the merge queue Sep 30, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 30, 2026
@kmontemayor2-sc
kmontemayor2-sc added this pull request to the merge queue Sep 30, 2026
Merged via the queue into main with commit b363359 Sep 30, 2026
7 checks passed
@kmontemayor2-sc
kmontemayor2-sc deleted the codex/kfp-config-snapshots branch September 30, 2026 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants