truthound-dashboard 1.4.4__py3-none-any.whl → 1.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- truthound_dashboard/api/alerts.py +75 -86
- truthound_dashboard/api/anomaly.py +7 -13
- truthound_dashboard/api/cross_alerts.py +38 -52
- truthound_dashboard/api/drift.py +49 -59
- truthound_dashboard/api/drift_monitor.py +234 -79
- truthound_dashboard/api/enterprise_sampling.py +498 -0
- truthound_dashboard/api/history.py +57 -5
- truthound_dashboard/api/lineage.py +3 -48
- truthound_dashboard/api/maintenance.py +104 -49
- truthound_dashboard/api/mask.py +1 -2
- truthound_dashboard/api/middleware.py +2 -1
- truthound_dashboard/api/model_monitoring.py +435 -311
- truthound_dashboard/api/notifications.py +227 -191
- truthound_dashboard/api/notifications_advanced.py +21 -20
- truthound_dashboard/api/observability.py +586 -0
- truthound_dashboard/api/plugins.py +2 -433
- truthound_dashboard/api/profile.py +199 -37
- truthound_dashboard/api/quality_reporter.py +701 -0
- truthound_dashboard/api/reports.py +7 -16
- truthound_dashboard/api/router.py +66 -0
- truthound_dashboard/api/rule_suggestions.py +5 -5
- truthound_dashboard/api/scan.py +17 -19
- truthound_dashboard/api/schedules.py +85 -50
- truthound_dashboard/api/schema_evolution.py +6 -6
- truthound_dashboard/api/schema_watcher.py +667 -0
- truthound_dashboard/api/sources.py +98 -27
- truthound_dashboard/api/tiering.py +1323 -0
- truthound_dashboard/api/triggers.py +14 -11
- truthound_dashboard/api/validations.py +12 -11
- truthound_dashboard/api/versioning.py +1 -6
- truthound_dashboard/core/__init__.py +129 -3
- truthound_dashboard/core/actions/__init__.py +62 -0
- truthound_dashboard/core/actions/custom.py +426 -0
- truthound_dashboard/core/actions/notifications.py +910 -0
- truthound_dashboard/core/actions/storage.py +472 -0
- truthound_dashboard/core/actions/webhook.py +281 -0
- truthound_dashboard/core/anomaly.py +262 -67
- truthound_dashboard/core/anomaly_explainer.py +4 -3
- truthound_dashboard/core/backends/__init__.py +67 -0
- truthound_dashboard/core/backends/base.py +299 -0
- truthound_dashboard/core/backends/errors.py +191 -0
- truthound_dashboard/core/backends/factory.py +423 -0
- truthound_dashboard/core/backends/mock_backend.py +451 -0
- truthound_dashboard/core/backends/truthound_backend.py +718 -0
- truthound_dashboard/core/checkpoint/__init__.py +87 -0
- truthound_dashboard/core/checkpoint/adapters.py +814 -0
- truthound_dashboard/core/checkpoint/checkpoint.py +491 -0
- truthound_dashboard/core/checkpoint/runner.py +270 -0
- truthound_dashboard/core/connections.py +645 -23
- truthound_dashboard/core/converters/__init__.py +14 -0
- truthound_dashboard/core/converters/truthound.py +620 -0
- truthound_dashboard/core/cross_alerts.py +540 -320
- truthound_dashboard/core/datasource_factory.py +1672 -0
- truthound_dashboard/core/drift_monitor.py +216 -20
- truthound_dashboard/core/enterprise_sampling.py +1291 -0
- truthound_dashboard/core/interfaces/__init__.py +225 -0
- truthound_dashboard/core/interfaces/actions.py +652 -0
- truthound_dashboard/core/interfaces/base.py +247 -0
- truthound_dashboard/core/interfaces/checkpoint.py +676 -0
- truthound_dashboard/core/interfaces/protocols.py +664 -0
- truthound_dashboard/core/interfaces/reporters.py +650 -0
- truthound_dashboard/core/interfaces/routing.py +646 -0
- truthound_dashboard/core/interfaces/triggers.py +619 -0
- truthound_dashboard/core/lineage.py +407 -71
- truthound_dashboard/core/model_monitoring.py +431 -3
- truthound_dashboard/core/notifications/base.py +4 -0
- truthound_dashboard/core/notifications/channels.py +501 -1203
- truthound_dashboard/core/notifications/deduplication/__init__.py +81 -115
- truthound_dashboard/core/notifications/deduplication/service.py +131 -348
- truthound_dashboard/core/notifications/dispatcher.py +202 -11
- truthound_dashboard/core/notifications/escalation/__init__.py +119 -106
- truthound_dashboard/core/notifications/escalation/engine.py +168 -358
- truthound_dashboard/core/notifications/routing/__init__.py +88 -128
- truthound_dashboard/core/notifications/routing/engine.py +90 -317
- truthound_dashboard/core/notifications/stats_aggregator.py +246 -1
- truthound_dashboard/core/notifications/throttling/__init__.py +67 -50
- truthound_dashboard/core/notifications/throttling/builder.py +117 -255
- truthound_dashboard/core/notifications/truthound_adapter.py +842 -0
- truthound_dashboard/core/phase5/collaboration.py +1 -1
- truthound_dashboard/core/plugins/lifecycle/__init__.py +0 -13
- truthound_dashboard/core/quality_reporter.py +1359 -0
- truthound_dashboard/core/report_history.py +0 -6
- truthound_dashboard/core/reporters/__init__.py +175 -14
- truthound_dashboard/core/reporters/adapters.py +943 -0
- truthound_dashboard/core/reporters/base.py +0 -3
- truthound_dashboard/core/reporters/builtin/__init__.py +18 -0
- truthound_dashboard/core/reporters/builtin/csv_reporter.py +111 -0
- truthound_dashboard/core/reporters/builtin/html_reporter.py +270 -0
- truthound_dashboard/core/reporters/builtin/json_reporter.py +127 -0
- truthound_dashboard/core/reporters/compat.py +266 -0
- truthound_dashboard/core/reporters/csv_reporter.py +2 -35
- truthound_dashboard/core/reporters/factory.py +526 -0
- truthound_dashboard/core/reporters/interfaces.py +745 -0
- truthound_dashboard/core/reporters/registry.py +1 -10
- truthound_dashboard/core/scheduler.py +165 -0
- truthound_dashboard/core/schema_evolution.py +3 -3
- truthound_dashboard/core/schema_watcher.py +1528 -0
- truthound_dashboard/core/services.py +595 -76
- truthound_dashboard/core/store_manager.py +810 -0
- truthound_dashboard/core/streaming_anomaly.py +169 -4
- truthound_dashboard/core/tiering.py +1309 -0
- truthound_dashboard/core/triggers/evaluators.py +178 -8
- truthound_dashboard/core/truthound_adapter.py +2620 -197
- truthound_dashboard/core/unified_alerts.py +23 -20
- truthound_dashboard/db/__init__.py +8 -0
- truthound_dashboard/db/database.py +8 -2
- truthound_dashboard/db/models.py +944 -25
- truthound_dashboard/db/repository.py +2 -0
- truthound_dashboard/main.py +15 -0
- truthound_dashboard/schemas/__init__.py +177 -16
- truthound_dashboard/schemas/base.py +44 -23
- truthound_dashboard/schemas/collaboration.py +19 -6
- truthound_dashboard/schemas/cross_alerts.py +19 -3
- truthound_dashboard/schemas/drift.py +61 -55
- truthound_dashboard/schemas/drift_monitor.py +67 -23
- truthound_dashboard/schemas/enterprise_sampling.py +653 -0
- truthound_dashboard/schemas/lineage.py +0 -33
- truthound_dashboard/schemas/mask.py +10 -8
- truthound_dashboard/schemas/model_monitoring.py +89 -10
- truthound_dashboard/schemas/notifications_advanced.py +13 -0
- truthound_dashboard/schemas/observability.py +453 -0
- truthound_dashboard/schemas/plugins.py +0 -280
- truthound_dashboard/schemas/profile.py +154 -247
- truthound_dashboard/schemas/quality_reporter.py +403 -0
- truthound_dashboard/schemas/reports.py +2 -2
- truthound_dashboard/schemas/rule_suggestion.py +8 -1
- truthound_dashboard/schemas/scan.py +4 -24
- truthound_dashboard/schemas/schedule.py +11 -3
- truthound_dashboard/schemas/schema_watcher.py +727 -0
- truthound_dashboard/schemas/source.py +17 -2
- truthound_dashboard/schemas/tiering.py +822 -0
- truthound_dashboard/schemas/triggers.py +16 -0
- truthound_dashboard/schemas/unified_alerts.py +7 -0
- truthound_dashboard/schemas/validation.py +0 -13
- truthound_dashboard/schemas/validators/base.py +41 -21
- truthound_dashboard/schemas/validators/business_rule_validators.py +244 -0
- truthound_dashboard/schemas/validators/localization_validators.py +273 -0
- truthound_dashboard/schemas/validators/ml_feature_validators.py +308 -0
- truthound_dashboard/schemas/validators/profiling_validators.py +275 -0
- truthound_dashboard/schemas/validators/referential_validators.py +312 -0
- truthound_dashboard/schemas/validators/registry.py +93 -8
- truthound_dashboard/schemas/validators/timeseries_validators.py +389 -0
- truthound_dashboard/schemas/versioning.py +1 -6
- truthound_dashboard/static/index.html +2 -2
- truthound_dashboard-1.5.1.dist-info/METADATA +312 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/RECORD +149 -148
- truthound_dashboard/core/plugins/hooks/__init__.py +0 -63
- truthound_dashboard/core/plugins/hooks/decorators.py +0 -367
- truthound_dashboard/core/plugins/hooks/manager.py +0 -403
- truthound_dashboard/core/plugins/hooks/protocols.py +0 -265
- truthound_dashboard/core/plugins/lifecycle/hot_reload.py +0 -584
- truthound_dashboard/core/reporters/junit_reporter.py +0 -233
- truthound_dashboard/core/reporters/markdown_reporter.py +0 -207
- truthound_dashboard/core/reporters/pdf_reporter.py +0 -209
- truthound_dashboard/static/assets/_baseUniq-BcrSP13d.js +0 -1
- truthound_dashboard/static/assets/arc-DlYjKwIL.js +0 -1
- truthound_dashboard/static/assets/architectureDiagram-VXUJARFQ-Bb2drbQM.js +0 -36
- truthound_dashboard/static/assets/blockDiagram-VD42YOAC-BlsPG1CH.js +0 -122
- truthound_dashboard/static/assets/c4Diagram-YG6GDRKO-B9JdUoaC.js +0 -10
- truthound_dashboard/static/assets/channel-Q6mHF1Hd.js +0 -1
- truthound_dashboard/static/assets/chunk-4BX2VUAB-DmyoPVuJ.js +0 -1
- truthound_dashboard/static/assets/chunk-55IACEB6-Bcz6Siv8.js +0 -1
- truthound_dashboard/static/assets/chunk-B4BG7PRW-Br3G5Rum.js +0 -165
- truthound_dashboard/static/assets/chunk-DI55MBZ5-DuM9c23u.js +0 -220
- truthound_dashboard/static/assets/chunk-FMBD7UC4-DNU-5mvT.js +0 -15
- truthound_dashboard/static/assets/chunk-QN33PNHL-Im2yNcmS.js +0 -1
- truthound_dashboard/static/assets/chunk-QZHKN3VN-kZr8XFm1.js +0 -1
- truthound_dashboard/static/assets/chunk-TZMSLE5B-Q__360q_.js +0 -1
- truthound_dashboard/static/assets/classDiagram-2ON5EDUG-vtixxUyK.js +0 -1
- truthound_dashboard/static/assets/classDiagram-v2-WZHVMYZB-vtixxUyK.js +0 -1
- truthound_dashboard/static/assets/clone-BOt2LwD0.js +0 -1
- truthound_dashboard/static/assets/cose-bilkent-S5V4N54A-CBDw6iac.js +0 -1
- truthound_dashboard/static/assets/dagre-6UL2VRFP-XdKqmmY9.js +0 -4
- truthound_dashboard/static/assets/diagram-PSM6KHXK-DAZ8nx9V.js +0 -24
- truthound_dashboard/static/assets/diagram-QEK2KX5R-BRvDTbGD.js +0 -43
- truthound_dashboard/static/assets/diagram-S2PKOQOG-bQcczUkl.js +0 -24
- truthound_dashboard/static/assets/erDiagram-Q2GNP2WA-DPje7VMN.js +0 -60
- truthound_dashboard/static/assets/flowDiagram-NV44I4VS-B7BVtFVS.js +0 -162
- truthound_dashboard/static/assets/ganttDiagram-JELNMOA3-D6WKSS7U.js +0 -267
- truthound_dashboard/static/assets/gitGraphDiagram-NY62KEGX-D3vtVd3y.js +0 -65
- truthound_dashboard/static/assets/graph-BKgNKZVp.js +0 -1
- truthound_dashboard/static/assets/index-C6JSrkHo.css +0 -1
- truthound_dashboard/static/assets/index-DkU82VsU.js +0 -1800
- truthound_dashboard/static/assets/infoDiagram-WHAUD3N6-DnNCT429.js +0 -2
- truthound_dashboard/static/assets/journeyDiagram-XKPGCS4Q-DGiMozqS.js +0 -139
- truthound_dashboard/static/assets/kanban-definition-3W4ZIXB7-BV2gUgli.js +0 -89
- truthound_dashboard/static/assets/katex-Cu_Erd72.js +0 -261
- truthound_dashboard/static/assets/layout-DI2MfQ5G.js +0 -1
- truthound_dashboard/static/assets/min-DYdgXVcT.js +0 -1
- truthound_dashboard/static/assets/mindmap-definition-VGOIOE7T-C7x4ruxz.js +0 -68
- truthound_dashboard/static/assets/pieDiagram-ADFJNKIX-CAJaAB9f.js +0 -30
- truthound_dashboard/static/assets/quadrantDiagram-AYHSOK5B-DeqwDI46.js +0 -7
- truthound_dashboard/static/assets/requirementDiagram-UZGBJVZJ-e3XDpZIM.js +0 -64
- truthound_dashboard/static/assets/sankeyDiagram-TZEHDZUN-CNnAv5Ux.js +0 -10
- truthound_dashboard/static/assets/sequenceDiagram-WL72ISMW-Dsne-Of3.js +0 -145
- truthound_dashboard/static/assets/stateDiagram-FKZM4ZOC-Ee0sQXyb.js +0 -1
- truthound_dashboard/static/assets/stateDiagram-v2-4FDKWEC3-B26KqW_W.js +0 -1
- truthound_dashboard/static/assets/timeline-definition-IT6M3QCI-DZYi2yl3.js +0 -61
- truthound_dashboard/static/assets/treemap-KMMF4GRG-CY3f8In2.js +0 -128
- truthound_dashboard/static/assets/unmerged_dictionaries-Dd7xcPWG.js +0 -1
- truthound_dashboard/static/assets/xychartDiagram-PRI3JC2R-CS7fydZZ.js +0 -7
- truthound_dashboard-1.4.4.dist-info/METADATA +0 -507
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/WHEEL +0 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/entry_points.txt +0 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"""Drift monitoring schemas.
|
|
2
2
|
|
|
3
3
|
This module defines schemas for automatic drift monitoring operations.
|
|
4
|
+
|
|
5
|
+
API Design: Direct Response Style
|
|
6
|
+
- Single resources return the resource directly
|
|
7
|
+
- List endpoints return PaginatedResponse with data, total, offset, limit
|
|
8
|
+
- Errors are handled via HTTPException
|
|
9
|
+
- Success is indicated by HTTP status codes (200, 201, 204)
|
|
4
10
|
"""
|
|
5
11
|
|
|
6
12
|
from __future__ import annotations
|
|
@@ -10,7 +16,7 @@ from typing import Literal
|
|
|
10
16
|
|
|
11
17
|
from pydantic import Field
|
|
12
18
|
|
|
13
|
-
from .base import BaseSchema, IDMixin,
|
|
19
|
+
from .base import BaseSchema, IDMixin, PaginatedResponse, TimestampMixin
|
|
14
20
|
|
|
15
21
|
# Drift monitoring status
|
|
16
22
|
DriftMonitorStatus = Literal["active", "paused", "error"]
|
|
@@ -106,6 +112,14 @@ class DriftMonitorUpdate(BaseSchema):
|
|
|
106
112
|
class DriftMonitorResponse(DriftMonitorBase, IDMixin, TimestampMixin):
|
|
107
113
|
"""Schema for drift monitor response."""
|
|
108
114
|
|
|
115
|
+
baseline_source_name: str | None = Field(
|
|
116
|
+
default=None,
|
|
117
|
+
description="Baseline source name",
|
|
118
|
+
)
|
|
119
|
+
current_source_name: str | None = Field(
|
|
120
|
+
default=None,
|
|
121
|
+
description="Current source name",
|
|
122
|
+
)
|
|
109
123
|
status: DriftMonitorStatus = Field(
|
|
110
124
|
default="active",
|
|
111
125
|
description="Monitor status",
|
|
@@ -132,10 +146,10 @@ class DriftMonitorResponse(DriftMonitorBase, IDMixin, TimestampMixin):
|
|
|
132
146
|
)
|
|
133
147
|
|
|
134
148
|
|
|
135
|
-
class DriftMonitorListResponse(
|
|
149
|
+
class DriftMonitorListResponse(PaginatedResponse[DriftMonitorResponse]):
|
|
136
150
|
"""List response for drift monitors."""
|
|
137
151
|
|
|
138
|
-
|
|
152
|
+
pass
|
|
139
153
|
|
|
140
154
|
|
|
141
155
|
# Drift Alert Schemas
|
|
@@ -197,10 +211,10 @@ class DriftAlertResponse(DriftAlertBase, IDMixin, TimestampMixin):
|
|
|
197
211
|
)
|
|
198
212
|
|
|
199
213
|
|
|
200
|
-
class DriftAlertListResponse(
|
|
214
|
+
class DriftAlertListResponse(PaginatedResponse[DriftAlertResponse]):
|
|
201
215
|
"""List response for drift alerts."""
|
|
202
216
|
|
|
203
|
-
|
|
217
|
+
pass
|
|
204
218
|
|
|
205
219
|
|
|
206
220
|
class DriftAlertUpdate(BaseSchema):
|
|
@@ -476,13 +490,6 @@ class RootCauseAnalysis(BaseSchema):
|
|
|
476
490
|
)
|
|
477
491
|
|
|
478
492
|
|
|
479
|
-
class RootCauseAnalysisResponse(BaseSchema):
|
|
480
|
-
"""Response wrapper for root cause analysis."""
|
|
481
|
-
|
|
482
|
-
success: bool = Field(default=True)
|
|
483
|
-
data: RootCauseAnalysis
|
|
484
|
-
|
|
485
|
-
|
|
486
493
|
# Drift Preview Schemas
|
|
487
494
|
|
|
488
495
|
|
|
@@ -617,13 +624,6 @@ class DriftPreviewData(BaseSchema):
|
|
|
617
624
|
)
|
|
618
625
|
|
|
619
626
|
|
|
620
|
-
class DriftPreviewResponse(BaseSchema):
|
|
621
|
-
"""Response for drift preview."""
|
|
622
|
-
|
|
623
|
-
success: bool = Field(default=True)
|
|
624
|
-
data: DriftPreviewData
|
|
625
|
-
|
|
626
|
-
|
|
627
627
|
# Large-Scale Dataset Optimization Schemas
|
|
628
628
|
|
|
629
629
|
|
|
@@ -883,8 +883,52 @@ class SampledComparisonResult(BaseSchema):
|
|
|
883
883
|
)
|
|
884
884
|
|
|
885
885
|
|
|
886
|
-
class
|
|
887
|
-
"""
|
|
886
|
+
class MonitorRunResult(BaseSchema):
|
|
887
|
+
"""Result of running a drift monitor."""
|
|
888
|
+
|
|
889
|
+
comparison_id: str = Field(..., description="Comparison ID")
|
|
890
|
+
has_drift: bool = Field(..., description="Whether drift was detected")
|
|
891
|
+
drift_percentage: float = Field(..., description="Percentage of drifted columns")
|
|
892
|
+
drifted_columns: list[str] = Field(
|
|
893
|
+
default_factory=list, description="List of drifted column names"
|
|
894
|
+
)
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
# Run History Schemas
|
|
898
|
+
|
|
899
|
+
RunStatus = Literal["running", "completed", "failed"]
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
class DriftMonitorRunResponse(BaseSchema, IDMixin):
|
|
903
|
+
"""Response schema for drift monitor run."""
|
|
904
|
+
|
|
905
|
+
monitor_id: str = Field(..., description="Associated monitor ID")
|
|
906
|
+
status: RunStatus = Field(..., description="Run status")
|
|
907
|
+
has_drift: bool | None = Field(None, description="Whether drift was detected")
|
|
908
|
+
max_drift_score: float | None = Field(None, description="Maximum drift score")
|
|
909
|
+
total_columns: int | None = Field(None, description="Total columns compared")
|
|
910
|
+
drifted_columns: int | None = Field(None, description="Number of drifted columns")
|
|
911
|
+
column_results: dict | None = Field(None, description="Per-column results")
|
|
912
|
+
root_cause_analysis: dict | None = Field(None, description="Root cause analysis")
|
|
913
|
+
duration_ms: int | None = Field(None, description="Run duration in milliseconds")
|
|
914
|
+
error_message: str | None = Field(None, description="Error message if failed")
|
|
915
|
+
created_at: datetime = Field(..., description="When run started")
|
|
916
|
+
completed_at: datetime | None = Field(None, description="When run completed")
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
class DriftMonitorRunListResponse(PaginatedResponse[DriftMonitorRunResponse]):
|
|
920
|
+
"""List response for drift monitor runs."""
|
|
921
|
+
|
|
922
|
+
pass
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
class DriftMonitorRunStatistics(BaseSchema):
|
|
926
|
+
"""Statistics for drift monitor runs."""
|
|
888
927
|
|
|
889
|
-
|
|
890
|
-
|
|
928
|
+
total_runs: int = Field(..., description="Total number of runs")
|
|
929
|
+
completed_runs: int = Field(..., description="Number of completed runs")
|
|
930
|
+
failed_runs: int = Field(..., description="Number of failed runs")
|
|
931
|
+
runs_with_drift: int = Field(..., description="Number of runs with drift detected")
|
|
932
|
+
success_rate: float = Field(..., description="Percentage of successful runs")
|
|
933
|
+
drift_rate: float = Field(..., description="Percentage of runs with drift")
|
|
934
|
+
avg_duration_ms: int = Field(..., description="Average run duration in milliseconds")
|