""" InferenceWorker - Thread per esecuzione query LLM senza bloccare UI """ from PyQt6.QtCore import QThread, pyqtSignal class InferenceWorker(QThread): """ Worker thread per eseguire inferenze LLM in background. Emette segnali quando completa o incontra errori. """ # Segnali finished = pyqtSignal(str) # Risposta completata error = pyqtSignal(str) # Errore durante l'inferenza progress = pyqtSignal(str) # Messaggi di progresso (opzionale) def __init__(self, kernel, query, session_id="default"): """ Args: kernel: JarvisKernel instance query: Domanda dell'utente session_id: ID della sessione (per memoria conversazione) """ super().__init__() self.kernel = kernel self.query = query self.session_id = session_id def run(self): """Esegue la query (chiamato automaticamente da start())""" try: # Recupera il CognitiveService dal kernel cognitive_service = self.kernel.get_service("CognitiveService") if not cognitive_service: self.error.emit("CognitiveService non disponibile nel Kernel") return # Esegue la query (CHIAMATA DIRETTA - no HTTP!) answer = cognitive_service.ask(self.query, self.session_id) # Emette la risposta al thread principale (UI) self.finished.emit(answer) except Exception as e: # In caso di errore, notifica l'UI error_msg = f"Errore durante l'inferenza: {str(e)}" self.error.emit(error_msg)