Support evaluation-local configuration and names overrides
This commit is contained in:
1 parent
0bb6f7d97c
commit
d4404e4c27
36 files changed
+409
-184
No files matched your search
+64
-28
@@ -25,32 +25,68 @@ def _load_user_config(path: Path) -> ModuleType:
|
||||
return module
|
||||
|
||||
|
||||
CONFIG_PATH = _user_config_path()
|
||||
if CONFIG_PATH is None:
|
||||
import default_config as _configuration
|
||||
else:
|
||||
_configuration = _load_user_config(CONFIG_PATH)
|
||||
def _settings(path: Path | None) -> dict[str, object]:
|
||||
import default_config
|
||||
|
||||
# Keep new optional settings compatible with older personal configuration files.
|
||||
THINKING_LEVEL_LITE = "low"
|
||||
THINKING_LEVEL_FOR_LABEL = "medium"
|
||||
MODEL_FOR_NAME_ID = getattr(_configuration, "MODEL_FOR_LABEL_ID", "gemini-3.8-flash")
|
||||
THINKING_LEVEL_FOR_NAME = "low"
|
||||
THINKING_LEVEL_FLASH = "medium"
|
||||
THINKING_LEVEL_PRO = "high"
|
||||
ALWAYS_CROP = False
|
||||
ANNOTATION_MARGIN_LEFT = 300
|
||||
ANNOTATION_MARGIN_POINTS = [(10, 450), (20, 400), (35, 300)]
|
||||
ANNOTATION_MAX_HEIGHT_PX = 33000
|
||||
ANNOTATION_MAX_PIXELS = 67_108_864
|
||||
SHOW_PERSONAL_STEPS = False
|
||||
RETURN_JPEG_ENABLED = True
|
||||
RETURN_PDF_ENABLED = True
|
||||
RETURN_ANSWERS_ENABLED = False
|
||||
RETURN_ANSWERS_CONTEXT = False
|
||||
RETURN_ANSWERS_QUESTION = True
|
||||
RETURN_ANSWERS_SOLUTION = False
|
||||
FINAL_SCORE_HISTOGRAM_PATH = Path("histogramme.pdf")
|
||||
for _name in dir(_configuration):
|
||||
if not _name.startswith("_"):
|
||||
globals()[_name] = getattr(_configuration, _name)
|
||||
values = {
|
||||
name: getattr(default_config, name)
|
||||
for name in dir(default_config)
|
||||
if not name.startswith("_")
|
||||
}
|
||||
if path is not None:
|
||||
# Preserve compatibility defaults for older personal configurations.
|
||||
values.update(THINKING_LEVEL_FOR_LABEL="medium", THINKING_LEVEL_PRO="high")
|
||||
module = _load_user_config(path)
|
||||
values.update({
|
||||
name: getattr(module, name)
|
||||
for name in dir(module)
|
||||
if not name.startswith("_")
|
||||
})
|
||||
# Historically the name recognizer inherited the label model when omitted.
|
||||
if not hasattr(module, "MODEL_FOR_NAME_ID"):
|
||||
values["MODEL_FOR_NAME_ID"] = values["MODEL_FOR_LABEL_ID"]
|
||||
values["PAGE_SPLITTER_KB"] = {
|
||||
"reverse_pages": "i",
|
||||
"add_secondary_splitter": "<Insert>",
|
||||
"delete_secondary_splitter": "<Delete>",
|
||||
**values["PAGE_SPLITTER_KB"],
|
||||
}
|
||||
return values
|
||||
|
||||
|
||||
CONFIG_PATH = _user_config_path()
|
||||
_global_settings = _settings(CONFIG_PATH)
|
||||
globals().update(_global_settings)
|
||||
LOCAL_CONFIG_PATH: Path | None = None
|
||||
_evaluation_overrides: set[str] = set()
|
||||
|
||||
|
||||
def use_evaluation(root: str | Path | None) -> None:
|
||||
"""Apply selected evaluation settings, resetting any previous overrides."""
|
||||
global LOCAL_CONFIG_PATH, _evaluation_overrides
|
||||
path = Path(root).expanduser().resolve() / "config.py" if root is not None else None
|
||||
values = dict(_global_settings)
|
||||
overrides = {}
|
||||
if path is not None and path.is_file() and path != CONFIG_PATH:
|
||||
module = _load_user_config(path)
|
||||
overrides = {
|
||||
name: getattr(module, name)
|
||||
for name in dir(module)
|
||||
if name.isupper() and name in _global_settings
|
||||
}
|
||||
values.update(overrides)
|
||||
else:
|
||||
path = None
|
||||
for name in ("ANNOTATION_MAX_HEIGHT_PX", "ANNOTATION_MAX_PIXELS"):
|
||||
if type(values[name]) is not int or values[name] <= 0:
|
||||
raise ValueError(f"{name} must be a positive integer (pixels)")
|
||||
values["PAGE_SPLITTER_KB"] = {
|
||||
"reverse_pages": "i",
|
||||
"add_secondary_splitter": "<Insert>",
|
||||
"delete_secondary_splitter": "<Delete>",
|
||||
**values["PAGE_SPLITTER_KB"],
|
||||
}
|
||||
for name in _evaluation_overrides | overrides.keys():
|
||||
globals()[name] = values[name]
|
||||
_evaluation_overrides = set(overrides)
|
||||
LOCAL_CONFIG_PATH = path
|
||||
Reference in new issue
Block a user