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.
Files changed (156) hide show
  1. aicertify/__init__.py +51 -0
  2. aicertify/api/__init__.py +40 -0
  3. aicertify/api/core.py +117 -0
  4. aicertify/api/evaluators.py +516 -0
  5. aicertify/api/policy.py +322 -0
  6. aicertify/api/reports.py +209 -0
  7. aicertify/api/utils.py +95 -0
  8. aicertify/api.py +39 -0
  9. aicertify/application.py +275 -0
  10. aicertify/assets/aic.png +0 -0
  11. aicertify/assets/aicert.png +0 -0
  12. aicertify/cli.py +183 -0
  13. aicertify/context_helpers.py +328 -0
  14. aicertify/evaluators/__init__.py +90 -0
  15. aicertify/evaluators/accuracy_evaluator.py +221 -0
  16. aicertify/evaluators/api.py +927 -0
  17. aicertify/evaluators/base.py +11 -0
  18. aicertify/evaluators/base_evaluator.py +208 -0
  19. aicertify/evaluators/biometric_categorization_evaluator.py +472 -0
  20. aicertify/evaluators/compliance_evaluator.py +407 -0
  21. aicertify/evaluators/content_safety_evaluator.py +532 -0
  22. aicertify/evaluators/documentation/__init__.py +11 -0
  23. aicertify/evaluators/documentation/model_card_evaluator.py +449 -0
  24. aicertify/evaluators/evaluator_registry.py +537 -0
  25. aicertify/evaluators/fairness_evaluator.py +1035 -0
  26. aicertify/evaluators/prohibited_practices/__init__.py +25 -0
  27. aicertify/evaluators/prohibited_practices/emotion_recognition_evaluator.py +347 -0
  28. aicertify/evaluators/prohibited_practices/manipulation_evaluator.py +326 -0
  29. aicertify/evaluators/prohibited_practices/social_scoring_evaluator.py +280 -0
  30. aicertify/evaluators/prohibited_practices/vulnerability_exploitation_evaluator.py +353 -0
  31. aicertify/evaluators/risk_management_evaluator.py +309 -0
  32. aicertify/evaluators/simple_evaluator.py +111 -0
  33. aicertify/models/README.md +93 -0
  34. aicertify/models/__init__.py +93 -0
  35. aicertify/models/base.py +54 -0
  36. aicertify/models/contract.py +328 -0
  37. aicertify/models/contract_models.py +146 -0
  38. aicertify/models/evaluation.py +264 -0
  39. aicertify/models/evaluation_models.py +45 -0
  40. aicertify/models/langfair_eval.py +80 -0
  41. aicertify/models/model_card.py +229 -0
  42. aicertify/models/opa_results.py +105 -0
  43. aicertify/models/policy_models.py +146 -0
  44. aicertify/models/report.py +203 -0
  45. aicertify/opa_core/__init__.py +26 -0
  46. aicertify/opa_core/compliance_evaluator.py +280 -0
  47. aicertify/opa_core/evaluator.py +1141 -0
  48. aicertify/opa_core/extraction.py +388 -0
  49. aicertify/opa_core/flexible_extractor.py +218 -0
  50. aicertify/opa_core/policy_loader.py +877 -0
  51. aicertify/opa_core/rego_parser.py +126 -0
  52. aicertify/opa_core/simple_policy.py +93 -0
  53. aicertify/opa_policies/.git +1 -0
  54. aicertify/opa_policies/.github/WORKFLOWS.md +40 -0
  55. aicertify/opa_policies/.github/workflows/opa-ci.yaml +40 -0
  56. aicertify/opa_policies/.gitignore +39 -0
  57. aicertify/opa_policies/.pre-commit-config.yaml +24 -0
  58. aicertify/opa_policies/.regal/config.yaml +12 -0
  59. aicertify/opa_policies/COMPATIBILITY.md +27 -0
  60. aicertify/opa_policies/LICENSE +201 -0
  61. aicertify/opa_policies/README.md +99 -0
  62. aicertify/opa_policies/VERSION +1 -0
  63. aicertify/opa_policies/custom/README.md +166 -0
  64. aicertify/opa_policies/custom/example/v1/compliance/basic_compliance.rego.wip +68 -0
  65. aicertify/opa_policies/custom/example/v1/compliance/basic_compliance_test.rego.wip +86 -0
  66. aicertify/opa_policies/global/README.md +34 -0
  67. aicertify/opa_policies/global/v1/accountability/accountability.rego +137 -0
  68. aicertify/opa_policies/global/v1/accountability/accountability_test.rego +188 -0
  69. aicertify/opa_policies/global/v1/common/common_rules.rego +96 -0
  70. aicertify/opa_policies/global/v1/common/common_rules_test.rego +175 -0
  71. aicertify/opa_policies/global/v1/common/compliance.rego +48 -0
  72. aicertify/opa_policies/global/v1/common/compliance_test.rego +89 -0
  73. aicertify/opa_policies/global/v1/common/content_safety.rego +36 -0
  74. aicertify/opa_policies/global/v1/common/fairness.rego +48 -0
  75. aicertify/opa_policies/global/v1/common/risk_management.rego +39 -0
  76. aicertify/opa_policies/global/v1/fairness/fairness.rego +133 -0
  77. aicertify/opa_policies/global/v1/fairness/fairness_test.rego +240 -0
  78. aicertify/opa_policies/global/v1/toxicity/toxicity.rego +53 -0
  79. aicertify/opa_policies/global/v1/toxicity/toxicity_test.rego +80 -0
  80. aicertify/opa_policies/global/v1/transparency/transparency.rego +129 -0
  81. aicertify/opa_policies/global/v1/transparency/transparency_test.rego +172 -0
  82. aicertify/opa_policies/helper_functions/reporting.rego +72 -0
  83. aicertify/opa_policies/helper_functions/reporting_test.rego +147 -0
  84. aicertify/opa_policies/helper_functions/validation.rego +21 -0
  85. aicertify/opa_policies/industry_specific/README.md +40 -0
  86. aicertify/opa_policies/industry_specific/automotive/v1/vehicle_safety/vehicle_safety.rego +48 -0
  87. aicertify/opa_policies/industry_specific/bfs/v1/loan_evaluation/README.md +54 -0
  88. aicertify/opa_policies/industry_specific/bfs/v1/loan_evaluation/fair_lending.rego +150 -0
  89. aicertify/opa_policies/industry_specific/bfs/v1/loan_evaluation/fair_lending_test.rego +144 -0
  90. aicertify/opa_policies/industry_specific/bfs/v1/model_risk/model_risk.rego +60 -0
  91. aicertify/opa_policies/industry_specific/bfs/v1/model_risk/model_risk_test.rego +34 -0
  92. aicertify/opa_policies/industry_specific/healthcare/v1/diagnostic_safety/README.md +53 -0
  93. aicertify/opa_policies/industry_specific/healthcare/v1/diagnostic_safety/diagnostic_safety.rego +158 -0
  94. aicertify/opa_policies/industry_specific/healthcare/v1/diagnostic_safety/diagnostic_safety_test.rego +207 -0
  95. aicertify/opa_policies/industry_specific/healthcare/v1/patient_safety/patient_safety.rego +69 -0
  96. aicertify/opa_policies/industry_specific/healthcare/v1/patient_safety/patient_safety_test.rego +34 -0
  97. aicertify/opa_policies/international/README.md +39 -0
  98. aicertify/opa_policies/international/eu_ai_act/v1/compliance/ce_marking.rego +6 -0
  99. aicertify/opa_policies/international/eu_ai_act/v1/compliance/conformity_assessment.rego +6 -0
  100. aicertify/opa_policies/international/eu_ai_act/v1/compliance/declaration_conformity.rego +6 -0
  101. aicertify/opa_policies/international/eu_ai_act/v1/compliance/registration.rego +6 -0
  102. aicertify/opa_policies/international/eu_ai_act/v1/data_governance/data_quality.rego +6 -0
  103. aicertify/opa_policies/international/eu_ai_act/v1/data_governance/training_data.rego +6 -0
  104. aicertify/opa_policies/international/eu_ai_act/v1/documentation/automated_logs.rego +6 -0
  105. aicertify/opa_policies/international/eu_ai_act/v1/documentation/record_keeping.rego +6 -0
  106. aicertify/opa_policies/international/eu_ai_act/v1/documentation/technical_documentation.rego +125 -0
  107. aicertify/opa_policies/international/eu_ai_act/v1/eu_fairness/eu_fairness.rego +113 -0
  108. aicertify/opa_policies/international/eu_ai_act/v1/eu_fairness/eu_fairness_test.rego +167 -0
  109. aicertify/opa_policies/international/eu_ai_act/v1/eu_fairness/test_input.json +17 -0
  110. aicertify/opa_policies/international/eu_ai_act/v1/gpai/downstream_transparency.rego +6 -0
  111. aicertify/opa_policies/international/eu_ai_act/v1/gpai/systemic_risk_classification.rego +6 -0
  112. aicertify/opa_policies/international/eu_ai_act/v1/gpai/technical_documentation.rego +6 -0
  113. aicertify/opa_policies/international/eu_ai_act/v1/human_oversight/human_oversight.rego +6 -0
  114. aicertify/opa_policies/international/eu_ai_act/v1/obligations/deployer_obligations.rego +6 -0
  115. aicertify/opa_policies/international/eu_ai_act/v1/obligations/distributor_obligations.rego +6 -0
  116. aicertify/opa_policies/international/eu_ai_act/v1/obligations/importer_obligations.rego +6 -0
  117. aicertify/opa_policies/international/eu_ai_act/v1/obligations/provider_obligations.rego +6 -0
  118. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/biometric_categorization.rego +6 -0
  119. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/biometric_identification.rego +6 -0
  120. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/criminal_profiling.rego +6 -0
  121. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/emotion_recognition.rego +111 -0
  122. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/facial_recognition_scraping.rego +6 -0
  123. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/manipulation.rego +56 -0
  124. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/social_scoring.rego +111 -0
  125. aicertify/opa_policies/international/eu_ai_act/v1/prohibited_practices/vulnerability_exploitation.rego +7 -0
  126. aicertify/opa_policies/international/eu_ai_act/v1/risk_management/risk_management.rego +155 -0
  127. aicertify/opa_policies/international/eu_ai_act/v1/technical_robustness/robustness.rego +6 -0
  128. aicertify/opa_policies/international/eu_ai_act/v1/transparency/transparency.rego +127 -0
  129. aicertify/opa_policies/international/india/v1/digital_india_policy/digital_india_policy.rego +42 -0
  130. aicertify/opa_policies/international/nist/v1/ai_600_1/ai_600_1.rego +42 -0
  131. aicertify/opa_policies/operational/README.md +41 -0
  132. aicertify/opa_policies/operational/aiops/v1/scalability/scalability.rego +39 -0
  133. aicertify/opa_policies/operational/corporate/v1/governance/governance.rego +45 -0
  134. aicertify/opa_policies/operational/corporate/v1/infosec/infosec.rego +45 -0
  135. aicertify/opa_policies/operational/cost/v1/resource_efficiency/resource_efficiency.rego +45 -0
  136. aicertify/opa_policies/pyproject.toml +32 -0
  137. aicertify/regulations.py +185 -0
  138. aicertify/report_generation/README.md +157 -0
  139. aicertify/report_generation/__init__.py +0 -0
  140. aicertify/report_generation/config.py +66 -0
  141. aicertify/report_generation/custom_extractors.py +164 -0
  142. aicertify/report_generation/data_extraction.py +557 -0
  143. aicertify/report_generation/flexible_extraction.py +268 -0
  144. aicertify/report_generation/metric_configs.py +350 -0
  145. aicertify/report_generation/policy_metric_extraction.py +325 -0
  146. aicertify/report_generation/report_generator.py +712 -0
  147. aicertify/report_generation/report_models.py +140 -0
  148. aicertify/report_generation/report_template.html +313 -0
  149. aicertify/report_generation/test_policy_metric_extraction.py +191 -0
  150. aicertify/report_generation/test_report_generator.py +214 -0
  151. aicertify/utils/logging_config.py +328 -0
  152. aicertify-0.7.0.dist-info/LICENSE +211 -0
  153. aicertify-0.7.0.dist-info/METADATA +393 -0
  154. aicertify-0.7.0.dist-info/RECORD +156 -0
  155. aicertify-0.7.0.dist-info/WHEEL +4 -0
  156. 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