Files
2026-09-09 15:59:41 +02:00

68 lines
2.3 KiB
Python

"""Configuration de l'IA locale, persistée via QSettings (registre Windows
/ fichier ini selon l'OS — mécanisme standard Qt, pas de fichier à gérer
nous-mêmes).
Le modèle (fichier .gguf) n'est jamais embarqué dans le dépôt : trop
volumineux, et le choix dépend du matériel de chacun. L'utilisateur pointe
vers son propre fichier via la fenêtre de configuration (voir
ai_settings_dialog.py).
"""
from __future__ import annotations
import os
from dataclasses import dataclass
from PySide6.QtCore import QSettings
# Publiques : réutilisées par project_io.py pour le pointeur de dernière
# session (même mécanisme QSettings, un seul groupe d'organisation/appli).
ORG_NAME = "PdfScrapper"
APP_NAME = "PdfScrapper"
@dataclass
class AiConfig:
model_path: str = ""
n_ctx: int = 4096
n_threads: int = 0 # 0 = auto (os.cpu_count())
max_tokens: int = 800
# Vide = utilise le prompt intégré par défaut (voir
# local_ai.DEFAULT_NEXT_LINK_PROMPT) ; sinon remplace entièrement le
# prompt système envoyé au modèle pour le choix du "lien suivant" —
# réglable depuis ai_settings_dialog.py.
next_link_prompt: str = ""
@property
def is_configured(self) -> bool:
return bool(self.model_path) and os.path.isfile(self.model_path)
def load_ai_config() -> AiConfig:
settings = QSettings(ORG_NAME, APP_NAME)
settings.beginGroup("local_ai")
try:
config = AiConfig(
model_path=settings.value("model_path", "", type=str),
n_ctx=settings.value("n_ctx", 4096, type=int),
n_threads=settings.value("n_threads", 0, type=int),
max_tokens=settings.value("max_tokens", 800, type=int),
next_link_prompt=settings.value("next_link_prompt", "", type=str),
)
finally:
settings.endGroup()
return config
def save_ai_config(config: AiConfig) -> None:
settings = QSettings(ORG_NAME, APP_NAME)
settings.beginGroup("local_ai")
try:
settings.setValue("model_path", config.model_path)
settings.setValue("n_ctx", config.n_ctx)
settings.setValue("n_threads", config.n_threads)
settings.setValue("max_tokens", config.max_tokens)
settings.setValue("next_link_prompt", config.next_link_prompt)
finally:
settings.endGroup()