Support evaluation-local configuration and names overrides

This commit is contained in:
sebastien committed 2026-11-03 18:44:56 +01:00
1 parent 0bb6f7d97c
commit d4404e4c27
36 files changed
+409 -184

No files matched your search

+64 -28
View File
@@ -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