mirror of
https://github.com/open-compass/opencompass.git
synced 2025-05-30 16:03:24 +08:00
51 lines
2.3 KiB
Python
51 lines
2.3 KiB
Python
![]() |
import yaml
|
||
|
import uuid
|
||
|
|
||
|
class ConfigWrapper:
|
||
|
def __init__(self, config_path):
|
||
|
self._config = {}
|
||
|
with open(config_path, 'r') as file:
|
||
|
self._config = yaml.safe_load(file)
|
||
|
for key, value in self._config.items():
|
||
|
setattr(self, key, value)
|
||
|
|
||
|
def __setattr__(self, key, value):
|
||
|
if key.startswith('_'):
|
||
|
super().__setattr__(key, value)
|
||
|
else:
|
||
|
self._config[key] = value
|
||
|
super().__setattr__(key, value)
|
||
|
|
||
|
def __getattr__(self, key):
|
||
|
if key in self._config:
|
||
|
return self._config[key]
|
||
|
raise AttributeError(f"'ConfigWrapper' object has no attribute '{key}'")
|
||
|
|
||
|
def get_id(self, data):
|
||
|
if isinstance(self._config.get('id_key'), str):
|
||
|
return data.get(self._config.get('id_key'), None)
|
||
|
elif isinstance(self._config.get('id_key'), list):
|
||
|
return '_'.join([str(data[key]) for key in self._config.get('id_key') if key in data])
|
||
|
|
||
|
def print_all_keys(self):
|
||
|
print("config keys:")
|
||
|
for key, value in self._config.items():
|
||
|
print(f" - {key}: {value}")
|
||
|
|
||
|
config_wrapper = None
|
||
|
|
||
|
def initialize_config(config_path):
|
||
|
global config_wrapper
|
||
|
config_wrapper = ConfigWrapper(config_path)
|
||
|
|
||
|
def get_config_wrapper():
|
||
|
global config_wrapper
|
||
|
if config_wrapper is None:
|
||
|
raise RuntimeError("ConfigWrapper not initialized. Call initialize_config first.")
|
||
|
return config_wrapper
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
config_path = 'config/config.yaml'
|
||
|
initialize_config(config_path)
|
||
|
data = {'idx': '50', 'step':21, 'question': 'Ciphertext: "17,156,4,54,213,17,23,84,228,54,281"\n\nPlease provide the decrypted answer, encapsulated in double square brackets. For example, the format should be: [[decrypted answer]].', 'answer': '[[P]]', 'category': 'Decryption', 'rule_id': '23', 'input': 'Ciphertext: "17,156,4,54,213,17,23,84,228,54,281"', 'steps_num': 23, 'description': 'For a number c=228 in the ciphertext:\nCalculate z = c^e mod n. Here ^ means multiplication.\nz is 80.\nBased on the decimal number represented by z, use the ascii code to find the corresponding letter as the plaintext letter p.\nPlease give the letter p in [[...]] format.\n', 'atom': 80}
|
||
|
print(config_wrapper.get_id(data))
|