68 lines
2.3 KiB
Python
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()
|