Files
2026-08-12 11:02:03 +02:00

36 lines
1.1 KiB
Python

"""Exécution des appels IA locale en arrière-plan.
L'inférence llama-cpp-python est bloquante et peut prendre plusieurs
secondes (voire dizaines de secondes pour le premier appel, le temps de
charger le modèle) — elle ne doit jamais tourner sur le thread Qt
principal sous peine de geler toute l'interface.
"""
from __future__ import annotations
from typing import Callable
from PySide6.QtCore import QThread, Signal
class AiTaskThread(QThread):
"""Exécute `fn(*args, **kwargs)` sur un thread dédié et remonte le
résultat (ou l'erreur) via un signal Qt, thread-safe par construction."""
succeeded = Signal(object)
failed = Signal(str)
def __init__(self, fn: Callable, *args, **kwargs) -> None:
super().__init__()
self._fn = fn
self._args = args
self._kwargs = kwargs
def run(self) -> None:
try:
result = self._fn(*self._args, **self._kwargs)
except Exception as exc: # noqa: BLE001 — remonté proprement à l'UI
self.failed.emit(str(exc))
else:
self.succeeded.emit(result)