Hopsworks ML Lifecycle: Feature Store operations, Model Registry, deployments, jobs, training datasets, governance approvals, cost tracking, and dual-bridge Claude correlation. Verified against live Hopsworks enterprise instance (SDK 4.7.3).
All 37 events use the foundation.protocols.ai.hopsworks namespace prefix — nested under ai to make clear that Hopsworks is one specific ML platform within the broader foundation.protocols.ai.* governance framework. Other ML platforms follow the same pattern.
session.start event. All subsequent events use m.relates_to with rel_type: "m.thread"."0.7500").claude.analysis event links Hopsworks data reads to Claude AI analysis, creating a complete audit trail across both bridges.onesecdecomdaicas, ID 31932).2 events tracking Hopsworks project connections — from hopsworks.login() to session teardown.
Emitted when a user connects to a Hopsworks project via hopsworks.login(). This event is the thread root for all subsequent events in the session.
| Field | Type | Description |
|---|---|---|
| session_id | string | Unique session identifier |
| project_id | integer | Hopsworks project ID |
| project_name | string | Hopsworks project name |
| owner | string | Project owner email |
| host | string | Hopsworks cluster hostname |
| sdk_version | string | Hopsworks SDK version |
| feature_store | object | Feature store metadata (id, name, online_enabled) |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.session.start",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"project_id": 31932,
"project_name": "onesecdecomdaicas",
"owner": "raazesh@vake.works",
"host": "eu-west.cloud.hopsworks.ai",
"sdk_version": "4.7.3",
"feature_store": {
"id": 20616,
"name": "onesecdecomdaicas_featurestore",
"online_enabled": true
},
"timestamp": 1775672133000,
"actor": "@raazesh:matrix.openearth.network"
}
}
Emitted when a Hopsworks session terminates. Includes operation counts and duration.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| project_id | integer | Hopsworks project ID |
| duration_ms | integer | Total session duration in milliseconds |
| operations | object | Summary of operations performed |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.session.end",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"project_id": 31932,
"duration_ms": 120000,
"operations": {
"feature_group_inserts": 1,
"feature_group_reads": 3,
"model_registrations": 1,
"feature_vector_lookups": 4,
"jobs_triggered": 1
},
"timestamp": 1775672253000,
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
8 events for feature group and feature view lifecycle — create, insert, read, statistics, delete, and view management.
Emitted when fs.get_or_create_feature_group() persists a new feature group (on first insert()).
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_group_id | integer | Hopsworks feature group ID |
| name | string | Feature group name |
| version | integer | Feature group version |
| description | string | Human-readable description |
| primary_key | string[] | Primary key columns |
| event_time | string | Event time column name |
| online_enabled | boolean | Whether online store is enabled |
| stream | boolean | Whether streaming ingestion is enabled |
| features | object[] | Feature schema (name, type, primary) |
| location | string | HDFS/HopsFS storage location |
| feature_store_id | integer | Feature store ID |
| project_id | integer | Hopsworks project ID |
| consent_refs | string[] | Data consent event references |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_group.create",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_group_id": 37919,
"name": "eudr_commodity_origins",
"version": 1,
"description": "EUDR commodity origin data with geolocation and deforestation status",
"primary_key": ["commodity_id"],
"event_time": "last_verified",
"online_enabled": true,
"stream": true,
"features": [
{"name": "commodity_id", "type": "string", "primary": true},
{"name": "commodity_type", "type": "string", "primary": false},
{"name": "origin_country", "type": "string", "primary": false},
{"name": "latitude", "type": "double", "primary": false},
{"name": "longitude", "type": "double", "primary": false},
{"name": "plot_area_ha", "type": "double", "primary": false},
{"name": "deforestation_free", "type": "boolean", "primary": false},
{"name": "forest_cover_2020", "type": "double", "primary": false},
{"name": "forest_cover_current", "type": "double", "primary": false},
{"name": "risk_score", "type": "double", "primary": false},
{"name": "last_verified", "type": "timestamp", "primary": false}
],
"location": "hopsfs://10.240.146.119:8020/apps/hive/warehouse/onesecdecomdaicas_featurestore.db/eudr_commodity_origins_1",
"feature_store_id": 20616,
"project_id": 31932,
"consent_refs": [],
"timestamp": 1775672240000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted on fg.insert(df). Includes the auto-created materialization job metadata.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_group_id | integer | Feature group ID |
| name | string | Feature group name |
| version | integer | Feature group version |
| rows_inserted | integer | Number of rows inserted |
| columns | string[] | Column names in the inserted data |
| operation | string | Write operation type |
Values: upsert, insert, overwrite |
||
| storage | string | Target storage layer |
Values: offline, online, both |
||
| materialization_job | object | Auto-created Spark materialization job metadata |
| validation_report | object|null | Data validation report (if expectations configured) |
| consent_refs | string[] | Data consent event references |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_group.insert",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_group_id": 37919,
"name": "eudr_commodity_origins",
"version": 1,
"rows_inserted": 100,
"columns": ["commodity_id", "commodity_type", "origin_country", "latitude", "longitude", "plot_area_ha", "deforestation_free", "forest_cover_2020", "forest_cover_current", "risk_score", "last_verified"],
"operation": "upsert",
"storage": "both",
"materialization_job": {
"job_id": 37607,
"name": "eudr_commodity_origins_1_offline_fg_materialization",
"type": "SPARK",
"execution_id": 146114,
"state": "FINISHED",
"final_status": "SUCCEEDED",
"duration_ms": 138640,
"submission_time": "2026-04-08T20:37:25Z"
},
"validation_report": null,
"consent_refs": [],
"timestamp": 1775672245000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted on fg.read() or fv.get_batch_data().
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_group_id | integer | Feature group ID |
| name | string | Feature group name |
| version | integer | Feature group version |
| rows_read | integer | Number of rows read |
| columns | string[] | Column names read |
| dtypes | object | Selected column data types |
| purpose | string | Read purpose |
Values: model_training, analysis, export, debugging |
||
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_group.read",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_group_id": 37919,
"name": "eudr_commodity_origins",
"version": 1,
"rows_read": 100,
"columns": ["commodity_id", "commodity_type", "origin_country", "latitude", "longitude", "plot_area_ha", "deforestation_free", "forest_cover_2020", "forest_cover_current", "risk_score", "last_verified"],
"dtypes": {
"commodity_id": "object",
"latitude": "float64",
"deforestation_free": "bool",
"last_verified": "datetime64[ns, UTC]"
},
"purpose": "model_training",
"timestamp": 1775672415000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted when feature group statistics are computed server-side.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_group_id | integer | Feature group ID |
| name | string | Feature group name |
| version | integer | Feature group version |
| computed_server_side | boolean | Whether statistics were computed on server |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.feature_group.statistics",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_group_id": 37919,
"name": "eudr_commodity_origins",
"version": 1,
"computed_server_side": true,
"timestamp": 1775672420000,
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted when specific records are deleted from a feature group by primary key.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_group_id | integer | Feature group ID |
| name | string | Feature group name |
| version | integer | Feature group version |
| records_deleted | integer | Number of records deleted |
| primary_keys | string[] | Primary key values of deleted records |
| reason | string | Reason for deletion |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_group.delete_records",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_group_id": 37919,
"name": "eudr_commodity_origins",
"version": 1,
"records_deleted": 5,
"primary_keys": ["COM-0001", "COM-0002", "COM-0003", "COM-0004", "COM-0005"],
"reason": "data_correction",
"timestamp": 1775672500000,
"actor": "@raazesh:matrix.openearth.network"
}
}
Emitted when an entire feature group version is deleted.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_group_id | integer | Feature group ID |
| name | string | Feature group name |
| version | integer | Feature group version |
| reason | string | Reason for deletion |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_group.delete",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_group_id": 37919,
"name": "eudr_commodity_origins",
"version": 1,
"reason": "replaced_by_v2",
"timestamp": 1775672600000,
"actor": "@raazesh:matrix.openearth.network"
}
}
Emitted when a feature view is created, joining one or more feature groups with a label selection.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| name | string | Feature view name |
| version | integer | Feature view version |
| description | string | Human-readable description |
| labels | string[] | Label columns |
| source_feature_groups | object[] | Source feature groups (name, version, id) |
| feature_store_id | integer | Feature store ID |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_view.create",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"name": "eudr_risk_assessment",
"version": 1,
"description": "Feature view for EUDR deforestation risk assessment",
"labels": ["deforestation_free"],
"source_feature_groups": [
{"name": "eudr_commodity_origins", "version": 1, "id": 37919}
],
"feature_store_id": 20616,
"project_id": 31932,
"timestamp": 1775672486000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted when a feature view version is deleted.
| Field | Type | Description |
|---|---|---|
| name | string | Feature view name |
| version | integer | Feature view version |
| reason | string | Reason for deletion |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_view.delete",
"content": {
"name": "eudr_risk_assessment",
"version": 1,
"reason": "replaced_by_v2",
"timestamp": 1775672700000,
"actor": "@raazesh:matrix.openearth.network"
}
}
1 event for online/batch feature vector retrieval.
Emitted on fv.get_feature_vector() or fv.get_feature_vectors().
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_view | string | Feature view name |
| feature_view_version | integer | Feature view version |
| mode | string | Retrieval mode |
Values: single, batch |
||
| entries | object[] | Lookup keys |
| rows_returned | integer | Number of rows returned |
| columns | string[] | Returned feature columns |
| source | string | Feature store source |
Values: online_store, offline_store |
||
| purpose | string | Retrieval purpose |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.feature_view.serve",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_view": "eudr_risk_assessment",
"feature_view_version": 1,
"mode": "batch",
"entries": [
{"commodity_id": "COM-0023"},
{"commodity_id": "COM-0048"},
{"commodity_id": "COM-0072"}
],
"rows_returned": 3,
"columns": ["commodity_id", "commodity_type", "origin_country", "latitude", "longitude", "plot_area_ha", "forest_cover_2020", "forest_cover_current", "risk_score", "last_verified"],
"source": "online_store",
"purpose": "inference",
"timestamp": 1775672885000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
2 events for training dataset creation and deletion.
Emitted on fv.train_test_split() or fs.create_training_dataset().
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| feature_view | string | Source feature view name |
| feature_view_version | integer | Feature view version |
| training_dataset_version | integer | Training dataset version |
| split | object | Train/test split metadata (rows, ratio) |
| features | string[] | Feature columns included |
| label_columns | string[] | Label columns |
| purpose | string | Training purpose |
| consent_refs | string[] | Data consent event references |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.training_dataset.create",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"feature_view": "eudr_risk_assessment",
"feature_view_version": 1,
"training_dataset_version": 1,
"split": {
"train_rows": 80,
"test_rows": 20,
"ratio": {"train": 0.8, "test": 0.2}
},
"features": ["commodity_id", "commodity_type", "origin_country", "latitude", "longitude", "plot_area_ha", "forest_cover_2020", "forest_cover_current", "risk_score", "last_verified"],
"label_columns": ["deforestation_free"],
"purpose": "eudr_risk_classification",
"consent_refs": [],
"timestamp": 1775672496000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted when a training dataset version is deleted.
| Field | Type | Description |
|---|---|---|
| feature_view | string | Source feature view name |
| training_dataset_version | integer | Training dataset version |
| reason | string | Reason for deletion |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.training_dataset.delete",
"content": {
"feature_view": "eudr_risk_assessment",
"training_dataset_version": 1,
"reason": "superseded_by_v2",
"timestamp": 1775672800000,
"actor": "@raazesh:matrix.openearth.network"
}
}
5 events for model registration, download, deletion, evaluation, and tagging.
Emitted on model.save() (not create_model() which is lazy).
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| model_id | string | Unique model identifier (name_version) |
| name | string | Model name |
| version | integer | Model version |
| description | string | Model description |
| framework | string | ML framework |
Values: PYTHON, TENSORFLOW, TORCH, SKLEARN |
||
| training_metrics | object | Metrics as string-encoded decimals |
| model_schema | object|null | Input/output schema |
| model_path | string | HopsFS model path |
| model_files_path | string | HopsFS path to model files |
| files | string[] | Uploaded model files |
| feature_view_ref | string|null | Feature view used for training |
| training_dataset_version | integer|null | Training dataset version used |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.model.register",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"model_id": "eudr_risk_classifier_3",
"name": "eudr_risk_classifier",
"version": 3,
"description": "Random Forest classifier for EUDR deforestation risk assessment (v3)",
"framework": "PYTHON",
"training_metrics": {
"accuracy": "0.7500",
"f1": "0.8571",
"precision": "0.7895",
"recall": "0.9375"
},
"model_schema": null,
"model_path": "/Projects/onesecdecomdaicas/Models/eudr_risk_classifier",
"model_files_path": "/Projects/onesecdecomdaicas/Models/eudr_risk_classifier/3/Files",
"files": ["eudr_risk_model.pkl", "predict_example.py"],
"feature_view_ref": null,
"training_dataset_version": null,
"project_id": 31932,
"timestamp": 1775672475000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted when a model is downloaded from the Model Registry to a local path.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| model_id | string | Model identifier |
| name | string | Model name |
| version | integer | Model version |
| local_path | string | Local download path |
| purpose | string | Download purpose |
Values: evaluation, deployment, export, debugging |
||
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.model.download",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"model_id": "eudr_risk_classifier_1",
"name": "eudr_risk_classifier",
"version": 1,
"local_path": "/tmp/model_download/",
"purpose": "evaluation",
"timestamp": 1775672600000,
"actor": "@raazesh:matrix.openearth.network"
}
}
Emitted when a model version is deleted from the registry.
| Field | Type | Description |
|---|---|---|
| model_id | string | Model identifier |
| name | string | Model name |
| version | integer | Model version |
| reason | string | Reason for deletion |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.model.delete",
"content": {
"model_id": "eudr_risk_classifier_1",
"name": "eudr_risk_classifier",
"version": 1,
"reason": "replaced_by_v3",
"timestamp": 1775672700000,
"actor": "@raazesh:matrix.openearth.network"
}
}
DAICAS governance event — emitted by external evaluation pipeline. Records evaluation metrics against thresholds.
| Field | Type | Description |
|---|---|---|
| model_id | string | Model identifier |
| name | string | Model name |
| version | integer | Model version |
| evaluation_dataset | object | Evaluation dataset reference (feature_view, version, rows) |
| metrics | object | Evaluation metrics as string-encoded decimals |
| passed | boolean | Whether the model passed all thresholds |
| thresholds | object | Minimum threshold values |
| evaluator | string | Matrix user ID of evaluator |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.model.evaluate",
"content": {
"model_id": "eudr_risk_classifier_3",
"name": "eudr_risk_classifier",
"version": 3,
"evaluation_dataset": {
"feature_view": "eudr_risk_assessment",
"version": 1,
"rows": 20
},
"metrics": {
"accuracy": "0.7500",
"f1": "0.8571",
"precision": "0.7895",
"recall": "0.9375"
},
"passed": true,
"thresholds": {
"accuracy_min": "0.7000",
"f1_min": "0.7500"
},
"evaluator": "@ml_reviewer:matrix.openearth.network",
"timestamp": 1775672900000
}
}
Emitted when a tag is applied to a model (e.g., EU AI Act risk classification).
| Field | Type | Description |
|---|---|---|
| model_id | string | Model identifier |
| name | string | Model name |
| version | integer | Model version |
| tag_name | string | Tag key |
| tag_value | string | Tag value |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.model.tag",
"content": {
"model_id": "eudr_risk_classifier_3",
"name": "eudr_risk_classifier",
"version": 3,
"tag_name": "eu_ai_act_risk_class",
"tag_value": "limited",
"timestamp": 1775672950000,
"actor": "@raazesh:matrix.openearth.network"
}
}
5 events for model deployment lifecycle — create, start, stop, predict, and delete.
Emitted when a model serving deployment is created.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| deployment_id | integer | Hopsworks deployment ID |
| deployment_name | string | Deployment name |
| model_name | string | Model being deployed |
| model_version | integer | Model version |
| script_file | string | Serving script path |
| api_protocol | string | API protocol |
Values: REST, GRPC |
||
| serving_tool | string | Serving infrastructure |
Values: KSERVE, DEFAULT |
||
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.deployment.create",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"deployment_id": 8219,
"deployment_name": "eudrriskv3",
"model_name": "eudr_risk_classifier",
"model_version": 3,
"script_file": "/Projects/onesecdecomdaicas/Models/eudr_risk_classifier/3/Files/predict_example.py",
"api_protocol": "REST",
"serving_tool": "KSERVE",
"project_id": 31932,
"timestamp": 1775673000000,
"actor": "@raazesh:matrix.openearth.network"
}
}
Emitted when a deployment transitions to RUNNING state.
| Field | Type | Description |
|---|---|---|
| deployment_id | integer | Deployment ID |
| deployment_name | string | Deployment name |
| model_name | string | Model being served |
| model_version | integer | Model version |
| state | string | Deployment state |
| serving_tool | string | Serving infrastructure |
| resources | object | Resource allocation (num_instances) |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.deployment.start",
"content": {
"deployment_id": 8219,
"deployment_name": "eudrriskv3",
"model_name": "eudr_risk_classifier",
"model_version": 3,
"state": "RUNNING",
"serving_tool": "KSERVE",
"resources": {
"num_instances": 1
},
"timestamp": 1775673070000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$deployment_create_event_id"
}
}
}
Emitted when a deployment is stopped.
| Field | Type | Description |
|---|---|---|
| deployment_id | integer | Deployment ID |
| deployment_name | string | Deployment name |
| state | string | Deployment state (STOPPED) |
| reason | string | Reason for stopping |
Values: manual, scaling, error, quota |
||
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.deployment.stop",
"content": {
"deployment_id": 8219,
"deployment_name": "eudrriskv3",
"state": "STOPPED",
"reason": "manual",
"timestamp": 1775673200000,
"actor": "@raazesh:matrix.openearth.network"
}
}
Emitted when a prediction is made through a deployed model.
| Field | Type | Description |
|---|---|---|
| deployment_name | string | Deployment name |
| model_name | string | Model name |
| model_version | integer | Model version |
| input_shape | integer[] | Input tensor shape |
| output | object | Prediction output |
| latency_ms | integer | Prediction latency in milliseconds |
| api_protocol | string | API protocol used |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.deployment.predict",
"content": {
"deployment_name": "eudrriskv3",
"model_name": "eudr_risk_classifier",
"model_version": 3,
"input_shape": [1, 6],
"output": {"predictions": [1]},
"latency_ms": 45,
"api_protocol": "REST",
"timestamp": 1775673100000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$deployment_create_event_id"
}
}
}
Emitted when a deployment is deleted.
| Field | Type | Description |
|---|---|---|
| deployment_id | integer | Deployment ID |
| deployment_name | string | Deployment name |
| reason | string | Reason for deletion |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.deployment.delete",
"content": {
"deployment_id": 8219,
"deployment_name": "eudrriskv3",
"reason": "replaced_by_v4",
"timestamp": 1775673300000,
"actor": "@raazesh:matrix.openearth.network"
}
}
3 events for Spark/Python job lifecycle — start, complete, and fail.
Emitted when a job is triggered (e.g., by feature group insert materialization).
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| job_id | integer | Hopsworks job ID |
| job_name | string | Job name |
| job_type | string | Job type |
Values: SPARK, PYSPARK, PYTHON, FLINK |
||
| execution_id | integer | Execution ID |
| triggered_by | string | What triggered the job |
| trigger_ref | object | Reference to trigger source (feature_group, version, id) |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.job.start",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"job_id": 37607,
"job_name": "eudr_commodity_origins_1_offline_fg_materialization",
"job_type": "SPARK",
"execution_id": 146114,
"triggered_by": "feature_group_insert",
"trigger_ref": {
"feature_group": "eudr_commodity_origins",
"version": 1,
"id": 37919
},
"project_id": 31932,
"timestamp": 1775672245000,
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Emitted when a job finishes successfully.
| Field | Type | Description |
|---|---|---|
| job_id | integer | Job ID |
| job_name | string | Job name |
| job_type | string | Job type |
| execution_id | integer | Execution ID |
| state | string | Final state (FINISHED) |
| final_status | string | Final status (SUCCEEDED) |
| duration_ms | integer | Job duration in milliseconds |
| submission_time | string | ISO 8601 submission timestamp |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.job.complete",
"content": {
"job_id": 37607,
"job_name": "eudr_commodity_origins_1_offline_fg_materialization",
"job_type": "SPARK",
"execution_id": 146114,
"state": "FINISHED",
"final_status": "SUCCEEDED",
"duration_ms": 138640,
"submission_time": "2026-04-08T20:37:25Z",
"project_id": 31932,
"timestamp": 1775672383000,
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$job_start_event_id"
}
}
}
Emitted when a job fails.
| Field | Type | Description |
|---|---|---|
| job_id | integer | Job ID |
| job_name | string | Job name |
| job_type | string | Job type |
| execution_id | integer | Execution ID |
| state | string | Final state (FINISHED) |
| final_status | string | Final status (FAILED) |
| duration_ms | integer | Job duration before failure |
| error | string | Error message |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.job.fail",
"content": {
"job_id": 37607,
"job_name": "eudr_commodity_origins_1_offline_fg_materialization",
"job_type": "SPARK",
"execution_id": 146115,
"state": "FINISHED",
"final_status": "FAILED",
"duration_ms": 5200,
"error": "OutOfMemoryError: Java heap space",
"project_id": 31932,
"timestamp": 1775672400000,
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$job_start_event_id"
}
}
}
2 events for file upload and download to/from Hopsworks project storage.
Emitted when a file is uploaded to Hopsworks project storage.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| source_path | string | Local source file path |
| destination_path | string | Hopsworks destination path |
| size_bytes | integer | File size in bytes |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.data.upload",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"source_path": "predict_example.py",
"destination_path": "Models/predict_example.py",
"size_bytes": 352,
"project_id": 31932,
"timestamp": 1775672810000,
"actor": "@raazesh:matrix.openearth.network"
}
}
Emitted when a file is downloaded from Hopsworks project storage.
| Field | Type | Description |
|---|---|---|
| session_id | string | Session identifier |
| source_path | string | Hopsworks source path |
| local_path | string | Local download path |
| size_bytes | integer | File size in bytes |
| purpose | string | Download purpose |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.data.download",
"content": {
"session_id": "hw_sess_20260408T203533Z",
"source_path": "Models/eudr_risk_classifier/1/Files/eudr_risk_model.pkl",
"local_path": "/tmp/model_download/eudr_risk_model.pkl",
"size_bytes": 119749,
"purpose": "local_evaluation",
"project_id": 31932,
"timestamp": 1775672820000,
"actor": "@raazesh:matrix.openearth.network"
}
}
8 events for model approval/rejection, data lineage, quality checks, audit trails, cost tracking, and quota enforcement. These events have no direct SDK trigger — they are emitted by the Hopsworks Bridge daemon’s governance layer (📐).
📐 Ties into the Matrix approval.request/response pattern. Emitted when a model version is approved for production.
| Field | Type | Description |
|---|---|---|
| model_id | string | Model identifier |
| name | string | Model name |
| version | integer | Model version |
| approver | string | Matrix user ID of approver |
| conditions | string[] | Conditions that were met |
| approval_event_id | string | Matrix approval response event ID |
| approval_room | string | Matrix governance room ID |
| metrics_at_approval | object | Model metrics at time of approval |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.model.approve",
"content": {
"model_id": "eudr_risk_classifier_3",
"name": "eudr_risk_classifier",
"version": 3,
"approver": "@alice:matrix.openearth.network",
"conditions": ["accuracy >= 0.70", "f1 >= 0.75", "bias_check_passed"],
"approval_event_id": "$matrix_approval_response_event_id",
"approval_room": "!governance:matrix.openearth.network",
"metrics_at_approval": {
"accuracy": "0.7500",
"f1": "0.8571"
},
"timestamp": 1775673000000
}
}
📐 Emitted when a model version is rejected by a governance reviewer.
| Field | Type | Description |
|---|---|---|
| model_id | string | Model identifier |
| name | string | Model name |
| version | integer | Model version |
| rejector | string | Matrix user ID of rejector |
| reason | string | Rejection reason |
| rejection_event_id | string | Matrix approval response event ID |
| approval_room | string | Matrix governance room ID |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.model.reject",
"content": {
"model_id": "eudr_risk_classifier_2",
"name": "eudr_risk_classifier",
"version": 2,
"rejector": "@bob:matrix.openearth.network",
"reason": "f1 below threshold for production use",
"rejection_event_id": "$matrix_approval_response_event_id",
"approval_room": "!governance:matrix.openearth.network",
"timestamp": 1775673100000
}
}
📐 Records the end-to-end data lineage from feature groups through transforms to a model.
| Field | Type | Description |
|---|---|---|
| pipeline_name | string | Pipeline identifier |
| source_feature_groups | object[] | Source feature groups (name, version, id) |
| target | object | Target artifact (type, name, version, id) |
| transforms | string[] | Transformation steps applied |
| consent_chain | string[] | Chain of consent event references |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.data.lineage",
"content": {
"pipeline_name": "eudr_risk_training_pipeline",
"source_feature_groups": [
{"name": "eudr_commodity_origins", "version": 1, "id": 37919}
],
"target": {
"type": "model",
"name": "eudr_risk_classifier",
"version": 3,
"id": "eudr_risk_classifier_3"
},
"transforms": ["train_test_split(0.8/0.2)", "RandomForestClassifier(n_estimators=50)"],
"consent_chain": [],
"timestamp": 1775673200000
}
}
📐 Records data quality check results for a feature group.
| Field | Type | Description |
|---|---|---|
| feature_group_id | integer | Feature group ID |
| name | string | Feature group name |
| version | integer | Feature group version |
| checks_passed | integer | Number of checks passed |
| checks_failed | integer | Number of checks failed |
| checks | object[] | Individual check results |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.data.quality",
"content": {
"feature_group_id": 37919,
"name": "eudr_commodity_origins",
"version": 1,
"checks_passed": 8,
"checks_failed": 1,
"checks": [
{"name": "null_check_commodity_id", "passed": true},
{"name": "range_check_latitude", "passed": true, "min": -10.0, "max": 10.0},
{"name": "range_check_risk_score", "passed": true, "min": 0.0, "max": 1.0},
{"name": "completeness_check", "passed": false, "completeness": "0.97", "threshold": "0.99"}
],
"timestamp": 1775673300000
}
}
📐 Records data access for audit trail (EU AI Act Art. 12 record-keeping).
| Field | Type | Description |
|---|---|---|
| resource_type | string | Type of resource accessed |
Values: feature_group, model, training_dataset, deployment |
||
| resource_id | integer | Resource ID |
| resource_name | string | Resource name |
| operation | string | Operation performed |
Values: read, write, delete, predict |
||
| rows_accessed | integer | Number of rows accessed |
| purpose | string | Access purpose |
| consent_ref | string|null | Consent event reference |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.audit.access",
"content": {
"resource_type": "feature_group",
"resource_id": 37919,
"resource_name": "eudr_commodity_origins",
"operation": "read",
"rows_accessed": 100,
"purpose": "model_training",
"consent_ref": null,
"project_id": 31932,
"timestamp": 1775672415000,
"actor": "@raazesh:matrix.openearth.network"
}
}
📐 Records data export from Hopsworks to external systems with data minimisation tracking.
| Field | Type | Description |
|---|---|---|
| resource_type | string | Type of resource exported |
| resource_id | integer | Resource ID |
| resource_name | string | Resource name |
| destination | string | Export destination |
| rows_exported | integer | Number of rows exported |
| data_hash | string | SHA-256 hash of exported data |
| consent_ref | string|null | Consent event reference |
| minimisation_applied | boolean | Whether data minimisation was applied |
| project_id | integer | Hopsworks project ID |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.audit.export",
"content": {
"resource_type": "feature_group",
"resource_id": 37919,
"resource_name": "eudr_commodity_origins",
"destination": "local_filesystem",
"rows_exported": 100,
"data_hash": "sha256:a1b2c3d4e5...",
"consent_ref": null,
"minimisation_applied": false,
"project_id": 31932,
"timestamp": 1775672420000,
"actor": "@raazesh:matrix.openearth.network"
}
}
📐 Periodic cost aggregation, same pattern as ai.cost for Claude API. Tracks compute, storage, and serving costs.
| Field | Type | Description |
|---|---|---|
| project_id | integer | Hopsworks project ID |
| project_name | string | Project name |
| period | string | Cost period (ISO date) |
| compute | object | Compute costs (spark_jobs, duration, cpu_hours, cost) |
| storage | object | Storage costs (feature_store_gb, model_registry_gb, cost/month) |
| serving | object | Serving costs (predictions, serving_hours, cost) |
| total_cost_eur | string | Total cost as decimal string (EUR) |
| currency | string | ISO 4217 currency code |
| timestamp | integer | Unix millisecond timestamp |
{
"type": "foundation.protocols.ai.hopsworks.cost",
"state_key": "",
"content": {
"project_id": 31932,
"project_name": "onesecdecomdaicas",
"period": "2026-04-08",
"compute": {
"spark_jobs": 1,
"total_duration_ms": 138640,
"estimated_cpu_hours": "0.0385",
"estimated_cost_eur": "0.02"
},
"storage": {
"feature_store_gb": "0.001",
"model_registry_gb": "0.001",
"estimated_cost_eur_month": "0.01"
},
"serving": {
"predictions": 0,
"serving_hours": "0.0000",
"estimated_cost_eur": "0.00"
},
"total_cost_eur": "0.03",
"currency": "EUR",
"timestamp": 1775673600000
}
}
📐 Emitted when a project or user exceeds a configured resource quota (compute, storage, serving).
| Field | Type | Description |
|---|---|---|
| project_id | integer | Hopsworks project ID |
| quota_type | string | Type of quota exceeded |
Values: compute_hours, storage_gb, serving_hours, cost_eur |
||
| limit_value | string | Configured quota limit as decimal string |
| actual_value | string | Actual value that exceeded the limit |
| action_taken | string | Action taken by the system |
Values: warning, throttled, blocked |
||
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.quota.exceeded",
"content": {
"project_id": 31932,
"quota_type": "compute_hours",
"limit_value": "10.0000",
"actual_value": "10.2500",
"action_taken": "warning",
"timestamp": 1775674000000,
"actor": "@raazesh:matrix.openearth.network"
}
}
1 event linking Hopsworks data reads to Claude AI analysis — creating a complete audit trail across both bridges. Verified 2026-04-08: Hopsworks SDK + Anthropic SDK in same Python context.
Emitted when Claude analyses data from Hopsworks Feature Store. Links the
ai.hopsworks.feature_group.read event to the ai.claude.prompt/response events,
creating a complete audit trail: what data was read, what AI was asked, what it answered.
| Field | Type | Description |
|---|---|---|
| session_id | string | Hopsworks session identifier |
| data_source | object | Data source reference (type, feature_group, version, id, rows_read, read_event_id) |
| claude_interaction | object | Claude interaction reference (model, tokens, stop_reason, event_ids) |
| purpose | string | Analysis purpose (EU AI Act Art. 12) |
| data_minimisation | object | Data minimisation record (raw_data_sent, summary_only, fields_included) |
| timestamp | integer | Unix millisecond timestamp |
| actor | string | Matrix user ID |
{
"type": "foundation.protocols.ai.hopsworks.claude.analysis",
"content": {
"session_id": "hw_sess_20260408T214030Z",
"data_source": {
"type": "feature_group_read",
"feature_group": "eudr_commodity_origins",
"version": 1,
"feature_group_id": 37919,
"rows_read": 100,
"read_event_id": "$hopsworks_read_event_id"
},
"claude_interaction": {
"model": "claude-sonnet-4-20250514",
"input_tokens": 420,
"output_tokens": 324,
"stop_reason": "end_turn",
"prompt_event_id": "$claude_prompt_event_id",
"response_event_id": "$claude_response_event_id"
},
"purpose": "eudr_compliance_risk_analysis",
"data_minimisation": {
"raw_data_sent": false,
"summary_only": true,
"fields_included": ["commodity_types", "countries", "deforestation_free_pct", "avg_risk_score"]
},
"timestamp": 1775674846000,
"actor": "@raazesh:matrix.openearth.network",
"m.relates_to": {
"rel_type": "m.thread",
"event_id": "$session_start_event_id"
}
}
}
Key governance fields:
data_minimisation.raw_data_sent: false proves raw Feature Store data never left the commons; only a summary was sent to Claude (DCPAI “data stays home; questions travel” principle).
data_source.read_event_id + claude_interaction.prompt_event_id creates a provenance chain from data read through AI analysis.
purpose records why the AI was consulted (EU AI Act Art. 12 record-keeping).
37 of 37 events have verified JSON schemas, tested against matrix.org via the Hopsworks Bridge daemon (Python + matrix-nio). All event schemas refined against live Hopsworks enterprise instance (SDK 4.7.3, project onesecdecomdaicas, ID 31932).
| Event Type | Category | Matrix Type | Status |
|---|---|---|---|
session.start | Session | Timeline | Tested |
session.end | Session | Timeline | Tested |
feature_group.create | Feature Store | Timeline | Tested |
feature_group.insert | Feature Store | Timeline | Tested |
feature_group.read | Feature Store | Timeline | Tested |
feature_group.statistics | Feature Store | Timeline | Tested |
feature_group.delete_records | Feature Store | Timeline | Tested |
feature_group.delete | Feature Store | Timeline | Tested |
feature_view.create | Feature Store | Timeline | Tested |
feature_view.delete | Feature Store | Timeline | Tested |
feature_view.serve | Feature Serving | Timeline | Tested |
training_dataset.create | Training | Timeline | Tested |
training_dataset.delete | Training | Timeline | Tested |
model.register | Model Registry | Timeline | Tested |
model.download | Model Registry | Timeline | Tested |
model.delete | Model Registry | Timeline | Tested |
model.evaluate | Model Registry | Timeline | Tested |
model.tag | Model Registry | Timeline | Tested |
deployment.create | Deployment | Timeline | Tested |
deployment.start | Deployment | Timeline | Tested |
deployment.stop | Deployment | Timeline | Tested |
deployment.predict | Deployment | Timeline | Tested |
deployment.delete | Deployment | Timeline | Tested |
job.start | Jobs | Timeline | Tested |
job.complete | Jobs | Timeline | Tested |
job.fail | Jobs | Timeline | Tested |
data.upload | Data Mgmt | Timeline | Tested |
data.download | Data Mgmt | Timeline | Tested |
model.approve | Governance | Timeline | Tested |
model.reject | Governance | Timeline | Tested |
data.lineage | Governance | Timeline | Tested |
data.quality | Governance | Timeline | Tested |
audit.access | Governance | Timeline | Tested |
audit.export | Governance | Timeline | Tested |
cost | Governance | State | Tested |
quota.exceeded | Governance | Timeline | Tested |
claude.analysis | Dual-Bridge | Timeline | Tested |
| Family | Relationship |
|---|---|
| ai.claude.* | Claude session recording. The claude.analysis event links Hopsworks data reads to Claude AI analysis via dual-bridge correlation. |
| ai.* | Vendor-neutral governance layer. Hopsworks ML operations can be wrapped in ai.intention → ai.decision → ai.effect flows for high-risk deployments. |
| ai.cost | Vendor-agnostic cost accumulator. The hopsworks.cost state event follows the same pattern, tracking compute, storage, and serving costs separately. |
| data.* | Data consent gates what data enters the Feature Store. consent_refs fields link to data.consent events. |
| eudr.* | EUDR compliance workflow. The EUDR commodity origins feature group provides geolocation and deforestation data for Reference EUDR deployment’s supply chain analysis. |