agent_os_kernel 3.1.0__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.
- agent_control_plane/__init__.py +662 -0
- agent_control_plane/a2a_adapter.py +543 -0
- agent_control_plane/adapter.py +417 -0
- agent_control_plane/agent_hibernation.py +394 -0
- agent_control_plane/agent_kernel.py +470 -0
- agent_control_plane/compliance.py +720 -0
- agent_control_plane/constraint_graphs.py +478 -0
- agent_control_plane/control_plane.py +854 -0
- agent_control_plane/example_executors.py +195 -0
- agent_control_plane/execution_engine.py +231 -0
- agent_control_plane/flight_recorder.py +846 -0
- agent_control_plane/governance_layer.py +435 -0
- agent_control_plane/hf_utils.py +563 -0
- agent_control_plane/interfaces/__init__.py +55 -0
- agent_control_plane/interfaces/kernel_interface.py +361 -0
- agent_control_plane/interfaces/plugin_interface.py +497 -0
- agent_control_plane/interfaces/protocol_interfaces.py +387 -0
- agent_control_plane/kernel_space.py +1009 -0
- agent_control_plane/langchain_adapter.py +424 -0
- agent_control_plane/lifecycle.py +3113 -0
- agent_control_plane/mcp_adapter.py +653 -0
- agent_control_plane/ml_safety.py +563 -0
- agent_control_plane/multimodal.py +727 -0
- agent_control_plane/mute_agent.py +422 -0
- agent_control_plane/observability.py +787 -0
- agent_control_plane/orchestrator.py +482 -0
- agent_control_plane/plugin_registry.py +750 -0
- agent_control_plane/policy_engine.py +954 -0
- agent_control_plane/process_isolation.py +777 -0
- agent_control_plane/shadow_mode.py +310 -0
- agent_control_plane/signals.py +493 -0
- agent_control_plane/supervisor_agents.py +430 -0
- agent_control_plane/time_travel_debugger.py +557 -0
- agent_control_plane/tool_registry.py +452 -0
- agent_control_plane/vfs.py +697 -0
- agent_kernel/__init__.py +69 -0
- agent_kernel/analyzer.py +435 -0
- agent_kernel/auditor.py +36 -0
- agent_kernel/completeness_auditor.py +237 -0
- agent_kernel/detector.py +203 -0
- agent_kernel/kernel.py +744 -0
- agent_kernel/memory_manager.py +85 -0
- agent_kernel/models.py +374 -0
- agent_kernel/nudge_mechanism.py +263 -0
- agent_kernel/outcome_analyzer.py +338 -0
- agent_kernel/patcher.py +582 -0
- agent_kernel/semantic_analyzer.py +316 -0
- agent_kernel/semantic_purge.py +349 -0
- agent_kernel/simulator.py +449 -0
- agent_kernel/teacher.py +85 -0
- agent_kernel/triage.py +152 -0
- agent_os/__init__.py +409 -0
- agent_os/_adversarial_impl.py +200 -0
- agent_os/_circuit_breaker_impl.py +232 -0
- agent_os/_mcp_metrics.py +193 -0
- agent_os/adversarial.py +20 -0
- agent_os/agents_compat.py +490 -0
- agent_os/audit_logger.py +135 -0
- agent_os/base_agent.py +651 -0
- agent_os/circuit_breaker.py +34 -0
- agent_os/cli/__init__.py +659 -0
- agent_os/cli/cmd_audit.py +128 -0
- agent_os/cli/cmd_init.py +152 -0
- agent_os/cli/cmd_policy.py +41 -0
- agent_os/cli/cmd_policy_gen.py +180 -0
- agent_os/cli/cmd_validate.py +258 -0
- agent_os/cli/mcp_scan.py +265 -0
- agent_os/cli/output.py +192 -0
- agent_os/cli/policy_checker.py +330 -0
- agent_os/compat.py +74 -0
- agent_os/constraint_graph.py +234 -0
- agent_os/content_governance.py +140 -0
- agent_os/context_budget.py +305 -0
- agent_os/credential_redactor.py +224 -0
- agent_os/diff_policy.py +89 -0
- agent_os/egress_policy.py +159 -0
- agent_os/escalation.py +276 -0
- agent_os/event_bus.py +124 -0
- agent_os/exceptions.py +180 -0
- agent_os/execution_context_policy.py +141 -0
- agent_os/github_enterprise.py +96 -0
- agent_os/health.py +20 -0
- agent_os/integrations/__init__.py +279 -0
- agent_os/integrations/a2a_adapter.py +279 -0
- agent_os/integrations/agent_lightning/__init__.py +30 -0
- agent_os/integrations/anthropic_adapter.py +420 -0
- agent_os/integrations/autogen_adapter.py +620 -0
- agent_os/integrations/base.py +1137 -0
- agent_os/integrations/compat.py +229 -0
- agent_os/integrations/config.py +98 -0
- agent_os/integrations/conversation_guardian.py +957 -0
- agent_os/integrations/crewai_adapter.py +467 -0
- agent_os/integrations/drift_detector.py +425 -0
- agent_os/integrations/dry_run.py +124 -0
- agent_os/integrations/escalation.py +582 -0
- agent_os/integrations/gemini_adapter.py +364 -0
- agent_os/integrations/google_adk_adapter.py +633 -0
- agent_os/integrations/guardrails_adapter.py +394 -0
- agent_os/integrations/health.py +197 -0
- agent_os/integrations/langchain_adapter.py +654 -0
- agent_os/integrations/llamafirewall.py +343 -0
- agent_os/integrations/llamaindex_adapter.py +188 -0
- agent_os/integrations/logging.py +191 -0
- agent_os/integrations/maf_adapter.py +631 -0
- agent_os/integrations/mistral_adapter.py +365 -0
- agent_os/integrations/openai_adapter.py +816 -0
- agent_os/integrations/openai_agents_sdk.py +406 -0
- agent_os/integrations/policy_compose.py +171 -0
- agent_os/integrations/profiling.py +144 -0
- agent_os/integrations/pydantic_ai_adapter.py +420 -0
- agent_os/integrations/rate_limiter.py +130 -0
- agent_os/integrations/rbac.py +143 -0
- agent_os/integrations/registry.py +113 -0
- agent_os/integrations/scope_guard.py +303 -0
- agent_os/integrations/semantic_kernel_adapter.py +769 -0
- agent_os/integrations/smolagents_adapter.py +629 -0
- agent_os/integrations/templates.py +178 -0
- agent_os/integrations/token_budget.py +134 -0
- agent_os/integrations/tool_aliases.py +190 -0
- agent_os/integrations/webhooks.py +177 -0
- agent_os/lite.py +208 -0
- agent_os/mcp_gateway.py +385 -0
- agent_os/mcp_message_signer.py +273 -0
- agent_os/mcp_protocols.py +161 -0
- agent_os/mcp_response_scanner.py +232 -0
- agent_os/mcp_security.py +924 -0
- agent_os/mcp_session_auth.py +231 -0
- agent_os/mcp_sliding_rate_limiter.py +184 -0
- agent_os/memory_guard.py +409 -0
- agent_os/metrics.py +134 -0
- agent_os/mute.py +428 -0
- agent_os/mute_agent.py +209 -0
- agent_os/policies/__init__.py +77 -0
- agent_os/policies/async_evaluator.py +275 -0
- agent_os/policies/backends.py +670 -0
- agent_os/policies/bridge.py +169 -0
- agent_os/policies/budget.py +85 -0
- agent_os/policies/cli.py +294 -0
- agent_os/policies/conflict_resolution.py +270 -0
- agent_os/policies/data_classification.py +252 -0
- agent_os/policies/evaluator.py +239 -0
- agent_os/policies/policy_schema.json +228 -0
- agent_os/policies/rate_limiting.py +145 -0
- agent_os/policies/schema.py +115 -0
- agent_os/policies/shared.py +331 -0
- agent_os/prompt_injection.py +694 -0
- agent_os/providers.py +182 -0
- agent_os/py.typed +0 -0
- agent_os/retry.py +81 -0
- agent_os/reversibility.py +251 -0
- agent_os/sandbox.py +432 -0
- agent_os/sandbox_provider.py +140 -0
- agent_os/secure_codegen.py +525 -0
- agent_os/security_skills.py +538 -0
- agent_os/semantic_policy.py +422 -0
- agent_os/server/__init__.py +15 -0
- agent_os/server/__main__.py +25 -0
- agent_os/server/app.py +277 -0
- agent_os/server/models.py +104 -0
- agent_os/shift_left_metrics.py +130 -0
- agent_os/stateless.py +742 -0
- agent_os/supervisor.py +148 -0
- agent_os/task_outcome.py +148 -0
- agent_os/transparency.py +181 -0
- agent_os/trust_root.py +128 -0
- agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
- agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
- agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
- agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
- agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
- agent_os_observability/__init__.py +27 -0
- agent_os_observability/dashboards.py +898 -0
- agent_os_observability/metrics.py +398 -0
- agent_os_observability/server.py +223 -0
- agent_os_observability/tracer.py +232 -0
- agent_primitives/__init__.py +24 -0
- agent_primitives/failures.py +84 -0
- agent_primitives/py.typed +0 -0
- amb_core/__init__.py +177 -0
- amb_core/adapters/__init__.py +57 -0
- amb_core/adapters/aws_sqs_broker.py +376 -0
- amb_core/adapters/azure_servicebus_broker.py +340 -0
- amb_core/adapters/kafka_broker.py +260 -0
- amb_core/adapters/nats_broker.py +285 -0
- amb_core/adapters/rabbitmq_broker.py +235 -0
- amb_core/adapters/redis_broker.py +262 -0
- amb_core/broker.py +145 -0
- amb_core/bus.py +481 -0
- amb_core/cloudevents.py +509 -0
- amb_core/dlq.py +345 -0
- amb_core/hf_utils.py +536 -0
- amb_core/memory_broker.py +410 -0
- amb_core/models.py +141 -0
- amb_core/persistence.py +529 -0
- amb_core/schema.py +294 -0
- amb_core/tracing.py +358 -0
- atr/__init__.py +640 -0
- atr/access.py +348 -0
- atr/composition.py +645 -0
- atr/decorator.py +357 -0
- atr/executor.py +384 -0
- atr/health.py +557 -0
- atr/hf_utils.py +449 -0
- atr/injection.py +422 -0
- atr/metrics.py +440 -0
- atr/policies.py +403 -0
- atr/py.typed +2 -0
- atr/registry.py +452 -0
- atr/schema.py +480 -0
- atr/tools/safe/__init__.py +75 -0
- atr/tools/safe/calculator.py +467 -0
- atr/tools/safe/datetime_tool.py +443 -0
- atr/tools/safe/file_reader.py +402 -0
- atr/tools/safe/http_client.py +316 -0
- atr/tools/safe/json_parser.py +374 -0
- atr/tools/safe/text_tool.py +537 -0
- atr/tools/safe/toolkit.py +175 -0
- caas/__init__.py +162 -0
- caas/api/__init__.py +7 -0
- caas/api/server.py +1328 -0
- caas/caching.py +834 -0
- caas/cli.py +210 -0
- caas/conversation.py +223 -0
- caas/decay.py +72 -0
- caas/detection/__init__.py +9 -0
- caas/detection/detector.py +238 -0
- caas/enrichment.py +130 -0
- caas/gateway/__init__.py +27 -0
- caas/gateway/trust_gateway.py +474 -0
- caas/hf_utils.py +479 -0
- caas/ingestion/__init__.py +23 -0
- caas/ingestion/processors.py +253 -0
- caas/ingestion/structure_parser.py +188 -0
- caas/models.py +356 -0
- caas/pragmatic_truth.py +444 -0
- caas/routing/__init__.py +10 -0
- caas/routing/heuristic_router.py +58 -0
- caas/storage/__init__.py +9 -0
- caas/storage/store.py +389 -0
- caas/triad.py +213 -0
- caas/tuning/__init__.py +9 -0
- caas/tuning/tuner.py +329 -0
- caas/vfs/__init__.py +14 -0
- caas/vfs/filesystem.py +452 -0
- cmvk/__init__.py +218 -0
- cmvk/audit.py +402 -0
- cmvk/benchmarks.py +478 -0
- cmvk/constitutional.py +904 -0
- cmvk/hf_utils.py +301 -0
- cmvk/metrics.py +473 -0
- cmvk/profiles.py +300 -0
- cmvk/py.typed +0 -0
- cmvk/types.py +12 -0
- cmvk/verification.py +956 -0
- emk/__init__.py +89 -0
- emk/causal.py +352 -0
- emk/hf_utils.py +421 -0
- emk/indexer.py +83 -0
- emk/py.typed +0 -0
- emk/schema.py +204 -0
- emk/sleep_cycle.py +347 -0
- emk/store.py +281 -0
- iatp/__init__.py +166 -0
- iatp/attestation.py +461 -0
- iatp/cli.py +317 -0
- iatp/hf_utils.py +472 -0
- iatp/ipc_pipes.py +580 -0
- iatp/main.py +412 -0
- iatp/models/__init__.py +447 -0
- iatp/policy_engine.py +337 -0
- iatp/py.typed +2 -0
- iatp/recovery.py +321 -0
- iatp/security/__init__.py +270 -0
- iatp/sidecar/__init__.py +519 -0
- iatp/telemetry/__init__.py +164 -0
- iatp/tests/__init__.py +1 -0
- iatp/tests/test_attestation.py +370 -0
- iatp/tests/test_cli.py +131 -0
- iatp/tests/test_ed25519_attestation.py +211 -0
- iatp/tests/test_models.py +130 -0
- iatp/tests/test_policy_engine.py +347 -0
- iatp/tests/test_recovery.py +281 -0
- iatp/tests/test_security.py +222 -0
- iatp/tests/test_sidecar.py +167 -0
- iatp/tests/test_telemetry.py +175 -0
- mcp_kernel_server/__init__.py +28 -0
- mcp_kernel_server/cli.py +274 -0
- mcp_kernel_server/resources.py +217 -0
- mcp_kernel_server/server.py +564 -0
- mcp_kernel_server/tools.py +1174 -0
- mute_agent/__init__.py +68 -0
- mute_agent/core/__init__.py +1 -0
- mute_agent/core/execution_agent.py +166 -0
- mute_agent/core/handshake_protocol.py +201 -0
- mute_agent/core/reasoning_agent.py +238 -0
- mute_agent/knowledge_graph/__init__.py +1 -0
- mute_agent/knowledge_graph/graph_elements.py +65 -0
- mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
- mute_agent/knowledge_graph/subgraph.py +224 -0
- mute_agent/listener/__init__.py +43 -0
- mute_agent/listener/adapters/__init__.py +31 -0
- mute_agent/listener/adapters/base_adapter.py +189 -0
- mute_agent/listener/adapters/caas_adapter.py +344 -0
- mute_agent/listener/adapters/control_plane_adapter.py +436 -0
- mute_agent/listener/adapters/iatp_adapter.py +332 -0
- mute_agent/listener/adapters/scak_adapter.py +251 -0
- mute_agent/listener/listener.py +610 -0
- mute_agent/listener/state_observer.py +436 -0
- mute_agent/listener/threshold_config.py +313 -0
- mute_agent/super_system/__init__.py +1 -0
- mute_agent/super_system/router.py +204 -0
- mute_agent/visualization/__init__.py +10 -0
- mute_agent/visualization/graph_debugger.py +502 -0
- nexus/README.md +60 -0
- nexus/__init__.py +51 -0
- nexus/arbiter.py +359 -0
- nexus/client.py +466 -0
- nexus/dmz.py +444 -0
- nexus/escrow.py +430 -0
- nexus/exceptions.py +286 -0
- nexus/pyproject.toml +36 -0
- nexus/registry.py +393 -0
- nexus/reputation.py +425 -0
- nexus/schemas/__init__.py +51 -0
- nexus/schemas/compliance.py +276 -0
- nexus/schemas/escrow.py +251 -0
- nexus/schemas/manifest.py +225 -0
- nexus/schemas/receipt.py +208 -0
- nexus/tests/__init__.py +0 -0
- nexus/tests/conftest.py +146 -0
- nexus/tests/test_arbiter.py +192 -0
- nexus/tests/test_dmz.py +194 -0
- nexus/tests/test_escrow.py +276 -0
- nexus/tests/test_exceptions.py +225 -0
- nexus/tests/test_registry.py +232 -0
- nexus/tests/test_reputation.py +328 -0
- nexus/tests/test_schemas.py +295 -0
cmvk/profiles.py
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""
|
|
4
|
+
CMVK Threshold Profiles Module
|
|
5
|
+
|
|
6
|
+
Pre-configured threshold profiles for different verification domains.
|
|
7
|
+
Each profile defines appropriate thresholds and metric defaults for specific use cases.
|
|
8
|
+
|
|
9
|
+
Domains:
|
|
10
|
+
- carbon: Carbon credit and environmental verification
|
|
11
|
+
- financial: Financial transaction and fraud detection
|
|
12
|
+
- medical: Medical claims and health data verification
|
|
13
|
+
- general: Default profile for general use
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from dataclasses import dataclass, field
|
|
19
|
+
from enum import Enum
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ProfileName(Enum):
|
|
24
|
+
"""Available threshold profile names."""
|
|
25
|
+
|
|
26
|
+
GENERAL = "general"
|
|
27
|
+
CARBON = "carbon"
|
|
28
|
+
FINANCIAL = "financial"
|
|
29
|
+
MEDICAL = "medical"
|
|
30
|
+
STRICT = "strict"
|
|
31
|
+
LENIENT = "lenient"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass(frozen=True)
|
|
35
|
+
class ThresholdProfile:
|
|
36
|
+
"""
|
|
37
|
+
Configuration profile for verification thresholds.
|
|
38
|
+
|
|
39
|
+
Attributes:
|
|
40
|
+
name: Profile identifier
|
|
41
|
+
description: Human-readable description
|
|
42
|
+
drift_threshold: Maximum acceptable drift score (0.0-1.0)
|
|
43
|
+
confidence_threshold: Minimum required confidence (0.0-1.0)
|
|
44
|
+
default_metric: Recommended distance metric for this domain
|
|
45
|
+
dimension_weights: Optional default weights for dimensions
|
|
46
|
+
anomaly_sigma: Standard deviations for anomaly detection
|
|
47
|
+
flags: Additional domain-specific flags
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
name: str
|
|
51
|
+
description: str
|
|
52
|
+
drift_threshold: float
|
|
53
|
+
confidence_threshold: float
|
|
54
|
+
default_metric: str = "euclidean"
|
|
55
|
+
dimension_weights: dict[str, float] | None = None
|
|
56
|
+
anomaly_sigma: float = 3.0
|
|
57
|
+
flags: dict[str, Any] = field(default_factory=dict)
|
|
58
|
+
|
|
59
|
+
def is_within_threshold(self, drift_score: float, confidence: float) -> bool:
|
|
60
|
+
"""Check if verification result passes this profile's thresholds."""
|
|
61
|
+
return drift_score <= self.drift_threshold and confidence >= self.confidence_threshold
|
|
62
|
+
|
|
63
|
+
def get_severity(self, drift_score: float) -> str:
|
|
64
|
+
"""
|
|
65
|
+
Classify drift severity based on profile thresholds.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
"pass": Within threshold
|
|
69
|
+
"warning": 1-1.5x threshold
|
|
70
|
+
"critical": 1.5-2x threshold
|
|
71
|
+
"severe": >2x threshold
|
|
72
|
+
"""
|
|
73
|
+
ratio = drift_score / self.drift_threshold if self.drift_threshold > 0 else float("inf")
|
|
74
|
+
|
|
75
|
+
if ratio <= 1.0:
|
|
76
|
+
return "pass"
|
|
77
|
+
elif ratio <= 1.5:
|
|
78
|
+
return "warning"
|
|
79
|
+
elif ratio <= 2.0:
|
|
80
|
+
return "critical"
|
|
81
|
+
else:
|
|
82
|
+
return "severe"
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
# ============================================================================
|
|
86
|
+
# Pre-defined Profiles
|
|
87
|
+
# ============================================================================
|
|
88
|
+
|
|
89
|
+
GENERAL_PROFILE = ThresholdProfile(
|
|
90
|
+
name="general",
|
|
91
|
+
description="Default profile for general-purpose verification",
|
|
92
|
+
drift_threshold=0.3,
|
|
93
|
+
confidence_threshold=0.7,
|
|
94
|
+
default_metric="cosine",
|
|
95
|
+
anomaly_sigma=3.0,
|
|
96
|
+
flags={
|
|
97
|
+
"require_explanation": False,
|
|
98
|
+
"strict_shape_match": True,
|
|
99
|
+
},
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
CARBON_PROFILE = ThresholdProfile(
|
|
103
|
+
name="carbon",
|
|
104
|
+
description="Profile for carbon credit and environmental data verification. "
|
|
105
|
+
"Uses Euclidean distance to preserve magnitude information critical "
|
|
106
|
+
"for detecting discrepancies in NDVI, carbon stock, and sequestration values.",
|
|
107
|
+
drift_threshold=0.15,
|
|
108
|
+
confidence_threshold=0.85,
|
|
109
|
+
default_metric="euclidean",
|
|
110
|
+
dimension_weights={
|
|
111
|
+
"ndvi": 0.35,
|
|
112
|
+
"carbon_stock": 0.30,
|
|
113
|
+
"sequestration_rate": 0.20,
|
|
114
|
+
"area": 0.15,
|
|
115
|
+
},
|
|
116
|
+
anomaly_sigma=2.5,
|
|
117
|
+
flags={
|
|
118
|
+
"require_explanation": True,
|
|
119
|
+
"fraud_detection_mode": True,
|
|
120
|
+
"magnitude_sensitive": True,
|
|
121
|
+
"min_sample_size": 10,
|
|
122
|
+
},
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
FINANCIAL_PROFILE = ThresholdProfile(
|
|
126
|
+
name="financial",
|
|
127
|
+
description="Profile for financial transaction and fraud detection. "
|
|
128
|
+
"Very strict thresholds with Chebyshev metric to catch "
|
|
129
|
+
"single-dimension anomalies (e.g., one suspicious transaction).",
|
|
130
|
+
drift_threshold=0.10,
|
|
131
|
+
confidence_threshold=0.90,
|
|
132
|
+
default_metric="chebyshev",
|
|
133
|
+
dimension_weights={
|
|
134
|
+
"amount": 0.40,
|
|
135
|
+
"frequency": 0.25,
|
|
136
|
+
"location": 0.20,
|
|
137
|
+
"timing": 0.15,
|
|
138
|
+
},
|
|
139
|
+
anomaly_sigma=2.0,
|
|
140
|
+
flags={
|
|
141
|
+
"require_explanation": True,
|
|
142
|
+
"fraud_detection_mode": True,
|
|
143
|
+
"audit_required": True,
|
|
144
|
+
"real_time_alerting": True,
|
|
145
|
+
},
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
MEDICAL_PROFILE = ThresholdProfile(
|
|
149
|
+
name="medical",
|
|
150
|
+
description="Profile for medical claims and health data verification. "
|
|
151
|
+
"Balanced thresholds with Manhattan distance for robustness to outliers.",
|
|
152
|
+
drift_threshold=0.20,
|
|
153
|
+
confidence_threshold=0.85,
|
|
154
|
+
default_metric="manhattan",
|
|
155
|
+
dimension_weights={
|
|
156
|
+
"diagnosis": 0.35,
|
|
157
|
+
"treatment": 0.30,
|
|
158
|
+
"outcome": 0.25,
|
|
159
|
+
"cost": 0.10,
|
|
160
|
+
},
|
|
161
|
+
anomaly_sigma=2.5,
|
|
162
|
+
flags={
|
|
163
|
+
"require_explanation": True,
|
|
164
|
+
"hipaa_compliant": True,
|
|
165
|
+
"audit_required": True,
|
|
166
|
+
"sensitive_data": True,
|
|
167
|
+
},
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
STRICT_PROFILE = ThresholdProfile(
|
|
171
|
+
name="strict",
|
|
172
|
+
description="Strict verification profile with minimal tolerance for drift. "
|
|
173
|
+
"Use for high-stakes verification where any discrepancy is significant.",
|
|
174
|
+
drift_threshold=0.05,
|
|
175
|
+
confidence_threshold=0.95,
|
|
176
|
+
default_metric="euclidean",
|
|
177
|
+
anomaly_sigma=2.0,
|
|
178
|
+
flags={
|
|
179
|
+
"require_explanation": True,
|
|
180
|
+
"zero_tolerance_mode": True,
|
|
181
|
+
},
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
LENIENT_PROFILE = ThresholdProfile(
|
|
185
|
+
name="lenient",
|
|
186
|
+
description="Lenient profile for exploratory analysis or when some drift "
|
|
187
|
+
"is acceptable. Higher thresholds allow more variation.",
|
|
188
|
+
drift_threshold=0.5,
|
|
189
|
+
confidence_threshold=0.5,
|
|
190
|
+
default_metric="cosine",
|
|
191
|
+
anomaly_sigma=4.0,
|
|
192
|
+
flags={
|
|
193
|
+
"require_explanation": False,
|
|
194
|
+
"exploratory_mode": True,
|
|
195
|
+
},
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# Registry of all profiles
|
|
199
|
+
PROFILES: dict[str, ThresholdProfile] = {
|
|
200
|
+
"general": GENERAL_PROFILE,
|
|
201
|
+
"carbon": CARBON_PROFILE,
|
|
202
|
+
"financial": FINANCIAL_PROFILE,
|
|
203
|
+
"medical": MEDICAL_PROFILE,
|
|
204
|
+
"strict": STRICT_PROFILE,
|
|
205
|
+
"lenient": LENIENT_PROFILE,
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def get_profile(name: str | ProfileName) -> ThresholdProfile:
|
|
210
|
+
"""
|
|
211
|
+
Get a threshold profile by name.
|
|
212
|
+
|
|
213
|
+
Args:
|
|
214
|
+
name: Profile name (string or ProfileName enum)
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
ThresholdProfile configuration
|
|
218
|
+
|
|
219
|
+
Raises:
|
|
220
|
+
ValueError: If profile name is not found
|
|
221
|
+
"""
|
|
222
|
+
if isinstance(name, ProfileName):
|
|
223
|
+
name = name.value
|
|
224
|
+
|
|
225
|
+
name = name.lower()
|
|
226
|
+
if name not in PROFILES:
|
|
227
|
+
available = list(PROFILES.keys())
|
|
228
|
+
raise ValueError(f"Unknown profile '{name}'. Available profiles: {available}")
|
|
229
|
+
|
|
230
|
+
return PROFILES[name]
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def list_profiles() -> list[str]:
|
|
234
|
+
"""Return list of available profile names."""
|
|
235
|
+
return list(PROFILES.keys())
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def register_profile(profile: ThresholdProfile) -> None:
|
|
239
|
+
"""
|
|
240
|
+
Register a custom threshold profile.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
profile: ThresholdProfile to register
|
|
244
|
+
|
|
245
|
+
Raises:
|
|
246
|
+
ValueError: If profile name already exists (use update_profile instead)
|
|
247
|
+
"""
|
|
248
|
+
if profile.name in PROFILES:
|
|
249
|
+
raise ValueError(
|
|
250
|
+
f"Profile '{profile.name}' already exists. Use update_profile() to modify."
|
|
251
|
+
)
|
|
252
|
+
PROFILES[profile.name] = profile
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def update_profile(profile: ThresholdProfile) -> None:
|
|
256
|
+
"""
|
|
257
|
+
Update an existing profile or add a new one.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
profile: ThresholdProfile to register/update
|
|
261
|
+
"""
|
|
262
|
+
PROFILES[profile.name] = profile
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def create_profile(
|
|
266
|
+
name: str,
|
|
267
|
+
drift_threshold: float,
|
|
268
|
+
confidence_threshold: float,
|
|
269
|
+
description: str = "",
|
|
270
|
+
default_metric: str = "euclidean",
|
|
271
|
+
dimension_weights: dict[str, float] | None = None,
|
|
272
|
+
anomaly_sigma: float = 3.0,
|
|
273
|
+
flags: dict[str, Any] | None = None,
|
|
274
|
+
) -> ThresholdProfile:
|
|
275
|
+
"""
|
|
276
|
+
Create a new threshold profile.
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
name: Unique profile identifier
|
|
280
|
+
drift_threshold: Maximum acceptable drift score
|
|
281
|
+
confidence_threshold: Minimum required confidence
|
|
282
|
+
description: Human-readable description
|
|
283
|
+
default_metric: Recommended distance metric
|
|
284
|
+
dimension_weights: Optional default weights
|
|
285
|
+
anomaly_sigma: Standard deviations for anomaly detection
|
|
286
|
+
flags: Additional domain-specific flags
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
New ThresholdProfile instance
|
|
290
|
+
"""
|
|
291
|
+
return ThresholdProfile(
|
|
292
|
+
name=name,
|
|
293
|
+
description=description,
|
|
294
|
+
drift_threshold=drift_threshold,
|
|
295
|
+
confidence_threshold=confidence_threshold,
|
|
296
|
+
default_metric=default_metric,
|
|
297
|
+
dimension_weights=dimension_weights,
|
|
298
|
+
anomaly_sigma=anomaly_sigma,
|
|
299
|
+
flags=flags or {},
|
|
300
|
+
)
|
cmvk/py.typed
ADDED
|
File without changes
|
cmvk/types.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""
|
|
4
|
+
CMVK Type Definitions
|
|
5
|
+
|
|
6
|
+
Core types used throughout the verification library.
|
|
7
|
+
All types are immutable where possible for purity.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from .verification import DriftExplanation, DriftType, VerificationScore
|
|
11
|
+
|
|
12
|
+
__all__ = ["DriftType", "VerificationScore", "DriftExplanation"]
|