aicertify 0.7.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.
- aicertify/__init__.py +51 -0
- aicertify/api/__init__.py +40 -0
- aicertify/api/core.py +117 -0
- aicertify/api/evaluators.py +516 -0
- aicertify/api/policy.py +322 -0
- aicertify/api/reports.py +209 -0
- aicertify/api/utils.py +95 -0
- aicertify/api.py +39 -0
- aicertify/application.py +275 -0
- aicertify/assets/aic.png +0 -0
- aicertify/assets/aicert.png +0 -0
- aicertify/cli.py +183 -0
- aicertify/context_helpers.py +328 -0
- aicertify/evaluators/__init__.py +90 -0
- aicertify/evaluators/accuracy_evaluator.py +221 -0
- aicertify/evaluators/api.py +927 -0
- aicertify/evaluators/base.py +11 -0
- aicertify/evaluators/base_evaluator.py +208 -0
- aicertify/evaluators/biometric_categorization_evaluator.py +472 -0
- aicertify/evaluators/compliance_evaluator.py +407 -0
- aicertify/evaluators/content_safety_evaluator.py +532 -0
- aicertify/evaluators/documentation/__init__.py +11 -0
- aicertify/evaluators/documentation/model_card_evaluator.py +449 -0
- aicertify/evaluators/evaluator_registry.py +537 -0
- aicertify/evaluators/fairness_evaluator.py +1035 -0
- aicertify/evaluators/prohibited_practices/__init__.py +25 -0
- aicertify/evaluators/prohibited_practices/emotion_recognition_evaluator.py +347 -0
- aicertify/evaluators/prohibited_practices/manipulation_evaluator.py +326 -0
- aicertify/evaluators/prohibited_practices/social_scoring_evaluator.py +280 -0
- aicertify/evaluators/prohibited_practices/vulnerability_exploitation_evaluator.py +353 -0
- aicertify/evaluators/risk_management_evaluator.py +309 -0
- aicertify/evaluators/simple_evaluator.py +111 -0
- aicertify/models/README.md +93 -0
- aicertify/models/__init__.py +93 -0
- aicertify/models/base.py +54 -0
- aicertify/models/contract.py +328 -0
- aicertify/models/contract_models.py +146 -0
- aicertify/models/evaluation.py +264 -0
- aicertify/models/evaluation_models.py +45 -0
- aicertify/models/langfair_eval.py +80 -0
- aicertify/models/model_card.py +229 -0
- aicertify/models/opa_results.py +105 -0
- aicertify/models/policy_models.py +146 -0
- aicertify/models/report.py +203 -0
- aicertify/opa_core/__init__.py +26 -0
- aicertify/opa_core/compliance_evaluator.py +280 -0
- aicertify/opa_core/evaluator.py +1141 -0
- aicertify/opa_core/extraction.py +388 -0
- aicertify/opa_core/flexible_extractor.py +218 -0
- aicertify/opa_core/policy_loader.py +877 -0
- aicertify/opa_core/rego_parser.py +126 -0
- aicertify/opa_core/simple_policy.py +93 -0
- aicertify/opa_policies/.git +1 -0
- aicertify/opa_policies/.github/WORKFLOWS.md +40 -0
- aicertify/opa_policies/.github/workflows/opa-ci.yaml +40 -0
- aicertify/opa_policies/.gitignore +39 -0
- aicertify/opa_policies/.pre-commit-config.yaml +24 -0
- aicertify/opa_policies/.regal/config.yaml +12 -0
- aicertify/opa_policies/COMPATIBILITY.md +27 -0
- aicertify/opa_policies/LICENSE +201 -0
- aicertify/opa_policies/README.md +99 -0
- aicertify/opa_policies/VERSION +1 -0
- aicertify/opa_policies/custom/README.md +166 -0
- aicertify/opa_policies/custom/example/v1/compliance/basic_compliance.rego.wip +68 -0
- aicertify/opa_policies/custom/example/v1/compliance/basic_compliance_test.rego.wip +86 -0
- aicertify/opa_policies/global/README.md +34 -0
- aicertify/opa_policies/global/v1/accountability/accountability.rego +137 -0
- aicertify/opa_policies/global/v1/accountability/accountability_test.rego +188 -0
- aicertify/opa_policies/global/v1/common/common_rules.rego +96 -0
- aicertify/opa_policies/global/v1/common/common_rules_test.rego +175 -0
- aicertify/opa_policies/global/v1/common/compliance.rego +48 -0
- aicertify/opa_policies/global/v1/common/compliance_test.rego +89 -0
- aicertify/opa_policies/global/v1/common/content_safety.rego +36 -0
- aicertify/opa_policies/global/v1/common/fairness.rego +48 -0
- aicertify/opa_policies/global/v1/common/risk_management.rego +39 -0
- aicertify/opa_policies/global/v1/fairness/fairness.rego +133 -0
- aicertify/opa_policies/global/v1/fairness/fairness_test.rego +240 -0
- aicertify/opa_policies/global/v1/toxicity/toxicity.rego +53 -0
- aicertify/opa_policies/global/v1/toxicity/toxicity_test.rego +80 -0
- aicertify/opa_policies/global/v1/transparency/transparency.rego +129 -0
- aicertify/opa_policies/global/v1/transparency/transparency_test.rego +172 -0
- aicertify/opa_policies/helper_functions/reporting.rego +72 -0
- aicertify/opa_policies/helper_functions/reporting_test.rego +147 -0
- aicertify/opa_policies/helper_functions/validation.rego +21 -0
- aicertify/opa_policies/industry_specific/README.md +40 -0
- aicertify/opa_policies/industry_specific/automotive/v1/vehicle_safety/vehicle_safety.rego +48 -0
- aicertify/opa_policies/industry_specific/bfs/v1/loan_evaluation/README.md +54 -0
- aicertify/opa_policies/industry_specific/bfs/v1/loan_evaluation/fair_lending.rego +150 -0
- aicertify/opa_policies/industry_specific/bfs/v1/loan_evaluation/fair_lending_test.rego +144 -0
- aicertify/opa_policies/industry_specific/bfs/v1/model_risk/model_risk.rego +60 -0
- aicertify/opa_policies/industry_specific/bfs/v1/model_risk/model_risk_test.rego +34 -0
- aicertify/opa_policies/industry_specific/healthcare/v1/diagnostic_safety/README.md +53 -0
- aicertify/opa_policies/industry_specific/healthcare/v1/diagnostic_safety/diagnostic_safety.rego +158 -0
- aicertify/opa_policies/industry_specific/healthcare/v1/diagnostic_safety/diagnostic_safety_test.rego +207 -0
- aicertify/opa_policies/industry_specific/healthcare/v1/patient_safety/patient_safety.rego +69 -0
- aicertify/opa_policies/industry_specific/healthcare/v1/patient_safety/patient_safety_test.rego +34 -0
- aicertify/opa_policies/international/README.md +39 -0
- aicertify/opa_policies/international/eu_ai_act/v1/compliance/ce_marking.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/compliance/conformity_assessment.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/compliance/declaration_conformity.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/compliance/registration.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/data_governance/data_quality.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/data_governance/training_data.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/documentation/automated_logs.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/documentation/record_keeping.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/documentation/technical_documentation.rego +125 -0
- aicertify/opa_policies/international/eu_ai_act/v1/eu_fairness/eu_fairness.rego +113 -0
- aicertify/opa_policies/international/eu_ai_act/v1/eu_fairness/eu_fairness_test.rego +167 -0
- aicertify/opa_policies/international/eu_ai_act/v1/eu_fairness/test_input.json +17 -0
- aicertify/opa_policies/international/eu_ai_act/v1/gpai/downstream_transparency.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/gpai/systemic_risk_classification.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/gpai/technical_documentation.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/human_oversight/human_oversight.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/obligations/deployer_obligations.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/obligations/distributor_obligations.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/obligations/importer_obligations.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/obligations/provider_obligations.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/biometric_categorization.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/biometric_identification.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/criminal_profiling.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/emotion_recognition.rego +111 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/facial_recognition_scraping.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/manipulation.rego +56 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/social_scoring.rego +111 -0
- aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/vulnerability_exploitation.rego +7 -0
- aicertify/opa_policies/international/eu_ai_act/v1/risk_management/risk_management.rego +155 -0
- aicertify/opa_policies/international/eu_ai_act/v1/technical_robustness/robustness.rego +6 -0
- aicertify/opa_policies/international/eu_ai_act/v1/transparency/transparency.rego +127 -0
- aicertify/opa_policies/international/india/v1/digital_india_policy/digital_india_policy.rego +42 -0
- aicertify/opa_policies/international/nist/v1/ai_600_1/ai_600_1.rego +42 -0
- aicertify/opa_policies/operational/README.md +41 -0
- aicertify/opa_policies/operational/aiops/v1/scalability/scalability.rego +39 -0
- aicertify/opa_policies/operational/corporate/v1/governance/governance.rego +45 -0
- aicertify/opa_policies/operational/corporate/v1/infosec/infosec.rego +45 -0
- aicertify/opa_policies/operational/cost/v1/resource_efficiency/resource_efficiency.rego +45 -0
- aicertify/opa_policies/pyproject.toml +32 -0
- aicertify/regulations.py +185 -0
- aicertify/report_generation/README.md +157 -0
- aicertify/report_generation/__init__.py +0 -0
- aicertify/report_generation/config.py +66 -0
- aicertify/report_generation/custom_extractors.py +164 -0
- aicertify/report_generation/data_extraction.py +557 -0
- aicertify/report_generation/flexible_extraction.py +268 -0
- aicertify/report_generation/metric_configs.py +350 -0
- aicertify/report_generation/policy_metric_extraction.py +325 -0
- aicertify/report_generation/report_generator.py +712 -0
- aicertify/report_generation/report_models.py +140 -0
- aicertify/report_generation/report_template.html +313 -0
- aicertify/report_generation/test_policy_metric_extraction.py +191 -0
- aicertify/report_generation/test_report_generator.py +214 -0
- aicertify/utils/logging_config.py +328 -0
- aicertify-0.7.0.dist-info/LICENSE +211 -0
- aicertify-0.7.0.dist-info/METADATA +393 -0
- aicertify-0.7.0.dist-info/RECORD +156 -0
- aicertify-0.7.0.dist-info/WHEEL +4 -0
- aicertify-0.7.0.dist-info/entry_points.txt +3 -0
aicertify/__init__.py
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AICertify package.
|
|
3
|
+
|
|
4
|
+
This package provides tools for certifying AI applications against different
|
|
5
|
+
compliance frameworks.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
# Version information
|
|
9
|
+
__version__ = "0.7.0"
|
|
10
|
+
|
|
11
|
+
# Direct imports for developer convenience
|
|
12
|
+
try:
|
|
13
|
+
# Contract creation and management
|
|
14
|
+
from aicertify.models.contract_models import (
|
|
15
|
+
create_contract,
|
|
16
|
+
save_contract,
|
|
17
|
+
load_contract,
|
|
18
|
+
AiCertifyContract,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# Evaluation functions
|
|
22
|
+
from aicertify.api import (
|
|
23
|
+
evaluate_contract,
|
|
24
|
+
evaluate_contract_object,
|
|
25
|
+
evaluate_conversations,
|
|
26
|
+
evaluate_contract_with_phase1_evaluators,
|
|
27
|
+
evaluate_contract_comprehensive,
|
|
28
|
+
generate_report,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# Phase 1 Evaluators
|
|
32
|
+
from aicertify.evaluators import (
|
|
33
|
+
BaseEvaluator,
|
|
34
|
+
EvaluationResult,
|
|
35
|
+
Report,
|
|
36
|
+
FairnessEvaluator,
|
|
37
|
+
ContentSafetyEvaluator,
|
|
38
|
+
RiskManagementEvaluator,
|
|
39
|
+
ComplianceEvaluator,
|
|
40
|
+
EvaluatorConfig,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# Set a flag to indicate successful imports
|
|
44
|
+
AICERTIFY_AVAILABLE = True
|
|
45
|
+
except ImportError as e:
|
|
46
|
+
import logging
|
|
47
|
+
|
|
48
|
+
logging.getLogger(__name__).warning(
|
|
49
|
+
f"AICertify components not fully available. Error: {e}"
|
|
50
|
+
)
|
|
51
|
+
AICERTIFY_AVAILABLE = False
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AICertify API
|
|
3
|
+
|
|
4
|
+
A simple entry point for developers to integrate AICertify evaluation into their applications.
|
|
5
|
+
This module provides functions to evaluate AI interactions for compliance with various policies.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
|
|
10
|
+
# Re-export public API from specialized modules
|
|
11
|
+
from aicertify.api.core import load_contract, CustomJSONEncoder
|
|
12
|
+
|
|
13
|
+
from aicertify.api.evaluators import (
|
|
14
|
+
evaluate_contract,
|
|
15
|
+
evaluate_contract_object,
|
|
16
|
+
evaluate_contract_with_phase1_evaluators,
|
|
17
|
+
evaluate_contract_comprehensive,
|
|
18
|
+
evaluate_conversations,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
from aicertify.api.reports import generate_report, generate_reports
|
|
22
|
+
|
|
23
|
+
from aicertify.api.policy import evaluate_by_policy, aicertify_app_for_policy
|
|
24
|
+
|
|
25
|
+
# Configure logging
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
# Define the public API
|
|
28
|
+
__all__ = [
|
|
29
|
+
"load_contract",
|
|
30
|
+
"evaluate_contract",
|
|
31
|
+
"evaluate_contract_object",
|
|
32
|
+
"evaluate_contract_with_phase1_evaluators",
|
|
33
|
+
"evaluate_contract_comprehensive",
|
|
34
|
+
"evaluate_conversations",
|
|
35
|
+
"generate_report",
|
|
36
|
+
"generate_reports",
|
|
37
|
+
"evaluate_by_policy",
|
|
38
|
+
"aicertify_app_for_policy",
|
|
39
|
+
"CustomJSONEncoder",
|
|
40
|
+
]
|
aicertify/api/core.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AICertify API Core Module
|
|
3
|
+
|
|
4
|
+
This module provides core functionality for the AICertify API, including
|
|
5
|
+
contract loading, validation, and utility functions.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import logging
|
|
10
|
+
from typing import Dict, Any
|
|
11
|
+
from uuid import UUID
|
|
12
|
+
from datetime import datetime
|
|
13
|
+
|
|
14
|
+
# Import models
|
|
15
|
+
from aicertify.models.contract_models import AiCertifyContract
|
|
16
|
+
|
|
17
|
+
# Configure logging
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def load_contract(contract_path: str) -> AiCertifyContract:
|
|
22
|
+
"""
|
|
23
|
+
Load an AiCertifyContract from a JSON file.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
contract_path: Path to the contract JSON file
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
AiCertifyContract object
|
|
30
|
+
"""
|
|
31
|
+
try:
|
|
32
|
+
with open(contract_path, "r") as f:
|
|
33
|
+
contract_data = json.load(f)
|
|
34
|
+
return AiCertifyContract.parse_obj(contract_data)
|
|
35
|
+
except Exception as e:
|
|
36
|
+
logger.error(f"Error loading contract from {contract_path}: {e}")
|
|
37
|
+
raise
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Custom JSON encoder to handle UUID serialization
|
|
41
|
+
class CustomJSONEncoder(json.JSONEncoder):
|
|
42
|
+
"""Custom JSON encoder that handles UUID objects."""
|
|
43
|
+
|
|
44
|
+
def default(self, obj):
|
|
45
|
+
if isinstance(obj, UUID):
|
|
46
|
+
return str(obj)
|
|
47
|
+
if isinstance(obj, datetime):
|
|
48
|
+
return obj.isoformat()
|
|
49
|
+
return super().default(obj)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _ensure_valid_evaluation_structure(
|
|
53
|
+
evaluation_result: Dict[str, Any],
|
|
54
|
+
) -> Dict[str, Any]:
|
|
55
|
+
"""
|
|
56
|
+
Ensure the evaluation result has a valid structure for policy evaluation.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
evaluation_result: The evaluation result to validate and fix
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
A validated and fixed evaluation result
|
|
63
|
+
"""
|
|
64
|
+
if evaluation_result is None:
|
|
65
|
+
evaluation_result = {}
|
|
66
|
+
|
|
67
|
+
# Ensure metrics exists
|
|
68
|
+
if "metrics" not in evaluation_result:
|
|
69
|
+
evaluation_result["metrics"] = {}
|
|
70
|
+
|
|
71
|
+
# Ensure toxicity metrics exist
|
|
72
|
+
if "toxicity" not in evaluation_result["metrics"]:
|
|
73
|
+
evaluation_result["metrics"]["toxicity"] = {}
|
|
74
|
+
|
|
75
|
+
# Ensure toxicity values are valid
|
|
76
|
+
toxicity = evaluation_result["metrics"]["toxicity"]
|
|
77
|
+
if not isinstance(toxicity.get("toxic_fraction"), (int, float)):
|
|
78
|
+
toxicity["toxic_fraction"] = 0.0
|
|
79
|
+
if not isinstance(toxicity.get("max_toxicity"), (int, float)):
|
|
80
|
+
toxicity["max_toxicity"] = 0.0
|
|
81
|
+
if not isinstance(toxicity.get("toxicity_probability"), (int, float)):
|
|
82
|
+
toxicity["toxicity_probability"] = 0.0
|
|
83
|
+
|
|
84
|
+
# Ensure summary exists
|
|
85
|
+
if "summary" not in evaluation_result:
|
|
86
|
+
evaluation_result["summary"] = {}
|
|
87
|
+
|
|
88
|
+
# Ensure toxicity_values exists in summary
|
|
89
|
+
if "toxicity_values" not in evaluation_result["summary"]:
|
|
90
|
+
evaluation_result["summary"]["toxicity_values"] = {
|
|
91
|
+
"toxic_fraction": toxicity.get("toxic_fraction", 0.0),
|
|
92
|
+
"max_toxicity": toxicity.get("max_toxicity", 0.0),
|
|
93
|
+
"toxicity_probability": toxicity.get("toxicity_probability", 0.0),
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# Ensure stereotype_values exists in summary
|
|
97
|
+
if "stereotype_values" not in evaluation_result["summary"]:
|
|
98
|
+
evaluation_result["summary"]["stereotype_values"] = {
|
|
99
|
+
"gender_bias_detected": False,
|
|
100
|
+
"racial_bias_detected": False,
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
# Create the evaluation structure expected by OPA policies
|
|
104
|
+
if "evaluation" not in evaluation_result:
|
|
105
|
+
evaluation_result["evaluation"] = {
|
|
106
|
+
"toxicity_score": toxicity.get("max_toxicity", 0.0),
|
|
107
|
+
"toxic_fraction": toxicity.get("toxic_fraction", 0.0),
|
|
108
|
+
"toxicity_probability": toxicity.get("toxicity_probability", 0.0),
|
|
109
|
+
"gender_bias_detected": evaluation_result["summary"]
|
|
110
|
+
.get("stereotype_values", {})
|
|
111
|
+
.get("gender_bias_detected", False),
|
|
112
|
+
"racial_bias_detected": evaluation_result["summary"]
|
|
113
|
+
.get("stereotype_values", {})
|
|
114
|
+
.get("racial_bias_detected", False),
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return evaluation_result
|