diff --git a/src/ai_typewriter/config.py b/src/ai_typewriter/config.py index f661699..55d7e3f 100644 --- a/src/ai_typewriter/config.py +++ b/src/ai_typewriter/config.py @@ -6,6 +6,7 @@ from pathlib import Path from typing import Any, Literal Provider = Literal["ollama", "gemini"] +MathTextFormat = Literal["plain", "unicode", "unicode_math"] @dataclass(frozen=True) @@ -18,6 +19,7 @@ class AppConfig: request_timeout_seconds: float | None = 300.0 copy_wait_seconds: float = 1.0 type_delay_seconds: float = 0.0 + math_text_format: MathTextFormat = "unicode" restore_clipboard: bool = True system_prompt: str = ( "Réponds directement et de manière ultra-concise. " @@ -40,6 +42,13 @@ def _coerce_timeout(value: Any) -> float | None: return timeout +def _coerce_math_text_format(value: Any) -> MathTextFormat: + mode = str(value or "unicode").lower().strip() + if mode not in {"plain", "unicode", "unicode_math"}: + raise ValueError("config.math_text_format doit être 'plain' ou 'unicode'") + return mode # type: ignore[return-value] + + def load_config(path: str | Path = "config.json") -> AppConfig: cfg_path = Path(path) if not cfg_path.exists(): @@ -56,6 +65,7 @@ def load_config(path: str | Path = "config.json") -> AppConfig: request_timeout_seconds=_coerce_timeout(data.get("request_timeout_seconds", 300)), copy_wait_seconds=float(data.get("copy_wait_seconds", 1)), type_delay_seconds=float(data.get("type_delay_seconds", 0)), + math_text_format=_coerce_math_text_format(data.get("math_text_format", "unicode")), restore_clipboard=bool(data.get("restore_clipboard", True)), system_prompt=str(data.get("system_prompt", AppConfig.system_prompt)), )