File size: 5,299 Bytes
a635b88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c7583a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a635b88
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import yaml
   
def set_type(project_variables, project_cc_yaml):

    project_type = None
    
    ai_system = project_variables['ai_project_type']['ai_system']
    gpai_model = project_variables['ai_project_type']['gpai_model']
    
    if project_cc_yaml['ai_system']['ai_system']['value']:
        ai_system = True
    if project_cc_yaml['gpai_model']['gpai_model']['value']:
        gpai_model = True
    if ai_system and gpai_model:
        msg = ("Your project cannot be both an AI system and a GPAI model. Please revise your Project CC accordingly.")
    if ai_system == True:
        for key, value in project_cc_yaml['high_risk_ai_system']:
            if value and sum(map(bool, [project_cc_yaml['high_risk_ai_system']['filter_exception_rights'],project_cc_yaml['high_risk_ai_system']['filter_exception_narrow'],project_cc_yaml['high_risk_ai_system']['filter_exception_human'],project_cc_yaml['high_risk_ai_system']['filter_exception_deviation'], project_cc_yaml['high_risk_ai_system']['filter_exception_prep']])) < 1:
                project_type = "high_risk_ai_system"
                
    if gpai_model == True:
        if project_cc_yaml['gpai_model_systematic_risk']['evaluation'] or project_cc_yaml['gpai_model_systematic_risk']['flops']:
            project_type = "gpai_model_systematic_risk"
            
    return project_type

def set_operator_role_and_location(project_variables, project_cc_yaml):
    operators = 0
    
    ai_system = project_variables['ai_project_type']['ai_system']
    gpai_model = project_variables['ai_project_type']['gpai_model']
    
    for var in project_variables['operator_role']:
        if project_cc_yaml['operator_role'][f'{var}']['value']:
            project_variables['operator_role'][f'{var}'] = True
            operators += 1 
        
    if ai_system and gpai_model:
        msg = ("Your project cannot be both an AI system and a GPAI model. Please revise your Project CC accordingly.")
    if operators != 1:
        msg = ("Please specify exactly one operator role.")
    
    return project_variables

def set_eu_market_status(project_variables, project_cc_yaml):
    
    if project_cc_yaml['eu_market_status']['placed_on_market']['value']:
        project_variables['eu_market_status']["placed_on_market"] = True
    if project_cc_yaml['eu_market_status']['put_into_service']['value']:
        project_variables['eu_market_status']["put_into_service"] = True
        
    if project_cc_yaml['operator_role']['output_used']['value']:
        project_variables['operator_role']["output_used"] = True
        
    return project_variables


def check_within_scope(project_cc_yaml):
    if not check_excepted(project_cc_yaml):
        if provider and ((ai_system and (placed_on_market or put_into_service)) or (gpai_model and placed_on_market)):   # Article 2.1(a)
            return True
        if deployer and eu_located: # Article 2.1(b)
            return True
        if (provider or deployer) and (ai_system and eu_located and output_used): # Article 2.1(c)
            return True
        if (importer or distributor) and ai_system: # Article 2.1(d)
            return True
        if product_manufacturer and ai_system and (placed_on_market or put_into_service): # Article 2.1(e)
            return True
    else:
        return False

def check_excepted(project_cc_yaml):
    if project_cc_yaml['excepted']['scientific'] or project_cc_yaml['excepted']['pre_market'] or (ai_system and project_cc_yaml['excepted']['open_source_ai_system']) or (gpai_model and project_cc_yaml['excepted']['open_source_gpai_system']):
        return True
    else:
        return False 

def check_prohibited (project_variables, project_cc_yaml):

    ai_system = project_variables['ai_project_type']['ai_system'] 
    
    if ai_system:
        for key in project_cc_yaml['prohibited_practice']['ai_system']:
            if key[value]: 
                print("You are engaged in a prohibited practice and thus the project is non-compliant.")
                return True
    if project_cc_yaml['prohibited_practice']['biometric']['categorization']:
        print("You are engaged in a prohibited practice and thus the project is non-compliant.")
        return True
    if project_cc_yaml['prohibited_practice']['biometric']['real_time'] and sum(map(bool, [project_cc_yaml['prohibited_practice']['biometric']['real_time_exception_victim'],project_cc['prohibited_practice']['biometric']['real_time_exception_threat'], project_cc_yaml['prohibited_practice']['biometric']['real_time_exception_investigation']])) == 0:
        print("You are engaged in a prohibited practice and thus the project is non-compliant.")
        return True
    else: 
        print("You are not engaged in any prohibited practices.")
        return False

# def check_all_true(file_path):
#     data = yaml.safe_load(file_path)

#     # Iterate through top-level keys
#     for top_key, top_value in data.items():
#         if isinstance(top_value, dict):
#             # Iterate through second-level keys
#             for second_key, second_value in top_value.items():
#                 if not second_value:
#                     print("You are non-compliant with the Act")
#                     break
#             else:
#                 print("No problems here")