feat: Compliance Maximizer — Regulatory Optimization Engine
Some checks failed
Build + Deploy / build-admin-compliance (push) Successful in 1m45s
Build + Deploy / build-backend-compliance (push) Successful in 4m42s
Build + Deploy / build-ai-sdk (push) Successful in 46s
Build + Deploy / build-developer-portal (push) Successful in 1m6s
Build + Deploy / build-tts (push) Successful in 1m14s
Build + Deploy / build-document-crawler (push) Successful in 31s
Build + Deploy / build-dsms-gateway (push) Successful in 24s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 15s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m27s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 37s
CI / test-python-backend (push) Successful in 42s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 4m35s
Some checks failed
Build + Deploy / build-admin-compliance (push) Successful in 1m45s
Build + Deploy / build-backend-compliance (push) Successful in 4m42s
Build + Deploy / build-ai-sdk (push) Successful in 46s
Build + Deploy / build-developer-portal (push) Successful in 1m6s
Build + Deploy / build-tts (push) Successful in 1m14s
Build + Deploy / build-document-crawler (push) Successful in 31s
Build + Deploy / build-dsms-gateway (push) Successful in 24s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 15s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m27s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 37s
CI / test-python-backend (push) Successful in 42s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 4m35s
Neues Modul das den regulatorischen Spielraum fuer KI-Use-Cases deterministisch berechnet und optimale Konfigurationen vorschlaegt. Kernfeatures: - 13-Dimensionen Constraint-Space (DSGVO + AI Act) - 3-Zonen-Analyse: Verboten / Eingeschraenkt / Erlaubt - Deterministische Optimizer-Engine (kein LLM im Kern) - 28 Constraint-Regeln aus DSGVO, AI Act, EDPB Guidelines - 28 Tests (Golden Suite + Meta-Tests) - REST API: /sdk/v1/maximizer/* (9 Endpoints) - Frontend: 3-Zonen-Visualisierung, Dimension-Form, Score-Gauges [migration-approved] Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
84
ai-compliance-sdk/internal/maximizer/scoring.go
Normal file
84
ai-compliance-sdk/internal/maximizer/scoring.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package maximizer
|
||||
|
||||
// ScoreWeights controls the balance between safety and business utility.
|
||||
type ScoreWeights struct {
|
||||
Safety float64 `json:"safety"`
|
||||
Utility float64 `json:"utility"`
|
||||
}
|
||||
|
||||
// DefaultWeights prioritizes business utility slightly over safety margin
|
||||
// since the optimizer already ensures compliance.
|
||||
var DefaultWeights = ScoreWeights{Safety: 0.4, Utility: 0.6}
|
||||
|
||||
// dimensionBusinessWeight indicates how much business value each dimension
|
||||
// contributes. Higher = more costly to change for the business.
|
||||
var dimensionBusinessWeight = map[string]int{
|
||||
"automation_level": 15,
|
||||
"decision_binding": 12,
|
||||
"deployment_scope": 10,
|
||||
"model_type": 8,
|
||||
"decision_impact": 7,
|
||||
"explainability": 5,
|
||||
"data_type": 5,
|
||||
"human_in_loop": 5,
|
||||
"legal_basis": 4,
|
||||
"domain": 3,
|
||||
"risk_classification": 3,
|
||||
"transparency_required": 2,
|
||||
"logging_required": 2,
|
||||
}
|
||||
|
||||
// ComputeSafetyScore returns 0-100 where 100 = completely safe (no restrictions).
|
||||
// Decreases with each RESTRICTED or FORBIDDEN zone.
|
||||
func ComputeSafetyScore(eval *EvaluationResult) int {
|
||||
if eval == nil {
|
||||
return 0
|
||||
}
|
||||
total := len(allDimensions)
|
||||
safe := 0
|
||||
for _, zi := range eval.ZoneMap {
|
||||
if zi.Zone == ZoneSafe {
|
||||
safe++
|
||||
}
|
||||
}
|
||||
if total == 0 {
|
||||
return 100
|
||||
}
|
||||
return (safe * 100) / total
|
||||
}
|
||||
|
||||
// ComputeUtilityScore returns 0-100 where 100 = no changes from original.
|
||||
// Decreases based on the business weight of each changed dimension.
|
||||
func ComputeUtilityScore(original, variant *DimensionConfig) int {
|
||||
if original == nil || variant == nil {
|
||||
return 0
|
||||
}
|
||||
deltas := original.Diff(variant)
|
||||
if len(deltas) == 0 {
|
||||
return 100
|
||||
}
|
||||
|
||||
maxCost := 0
|
||||
for _, w := range dimensionBusinessWeight {
|
||||
maxCost += w
|
||||
}
|
||||
|
||||
cost := 0
|
||||
for _, d := range deltas {
|
||||
w := dimensionBusinessWeight[d.Dimension]
|
||||
if w == 0 {
|
||||
w = 3 // default
|
||||
}
|
||||
cost += w
|
||||
}
|
||||
|
||||
if cost >= maxCost {
|
||||
return 0
|
||||
}
|
||||
return 100 - (cost*100)/maxCost
|
||||
}
|
||||
|
||||
// ComputeCompositeScore combines safety and utility into a single ranking score.
|
||||
func ComputeCompositeScore(safety, utility int, weights ScoreWeights) float64 {
|
||||
return weights.Safety*float64(safety) + weights.Utility*float64(utility)
|
||||
}
|
||||
Reference in New Issue
Block a user