Data Steward
You own: day-to-day data hygiene — naming, tagging, ownership, deprecation, glossary entries. You're the contact for "what does this metric mean?"
What's new for you
- Every gf_ entity (experiment, run, model, prompt, endpoint) supports tags
- The audit log has owner / requester / approver fields on every change
- Lineage tells you what's connected to what — propagate stewardship downstream
Workflow 1 — Tag everything important
# Models
models.set_tag("fraud-detector", key="owner", value="ml-platform@acme.com")
models.set_tag("fraud-detector", key="sensitivity", value="contains_pii")
models.set_tag("fraud-detector", key="business_unit", value="risk")
# Prompts
prompts.set_tag("customer_support", version=2, key="owner", value="aie-team@acme.com")
Stewardship convention: every Production-stage entity MUST have owner and sensitivity tags.
Workflow 2 — Catch untagged production entities
SELECT name FROM gf_registered_models m
WHERE m.tenant_id='ACME'
AND NOT EXISTS (SELECT 1 FROM gf_model_versions v
WHERE v.name=m.name AND v.tenant_id=m.tenant_id
AND v.current_stage='Production')
AND (m.tags->>'owner' IS NULL OR m.tags->>'sensitivity' IS NULL);
Run weekly; ping owners.
Workflow 3 — Deprecate a model
# 1. Find downstream consumers
endpoints = [e for e in serving.list_endpoints() if e["modelName"] == "fraud-detector-v1"]
# 2. Coordinate migration to newer version
# 3. Once nothing serves it, archive
models.transition("fraud-detector-v1", 7, to_stage="Archived", reason="superseded by v8")
Workflow 4 — Glossary entries for ML metrics
DS / MLE log all sorts of metric_names. As a steward, publish canonical definitions:
# /admin/glossary
metric: auc
name: Area under the ROC curve
definition: |
Probability that the model ranks a random positive instance higher than
a random negative instance. 0.5 = random; 1.0 = perfect.
applies_to: [binary_classification]
owner: ml-platform@acme.com
This drives the tooltips on the dashboard metric panels.
Workflow 5 — Lineage audit
Walk the lineage graph for high-stakes assets:
# What feature groups feed this model?
ups = lineage.get_upstream(production_run_id)
# What models came from this feature group?
downs = lineage.get_downstream(kind="feature_group", id="user_features_v3")
If a feature group is high-stakes, every downstream model owner should know.
Common gotchas
- Tags are free-form — agree on a controlled vocab in your org and document it.
set_tagis mutable — old values are gone. Usegf_audit_logto find prior tag values.- Lineage edges are append-only — corrections require SQL with audit.