| """ |
| Event handlers for connecting UI to backend |
| """ |
|
|
| import logging |
| import uuid |
| from typing import Dict, Any |
|
|
| logger = logging.getLogger(__name__) |
|
|
| class EventHandlers: |
| def __init__(self, components: Dict[str, Any]): |
| self.components = components |
| self.sessions = {} |
| |
| async def handle_message_submit(self, message: str, chat_history: list, |
| session_id: str, show_reasoning: bool, |
| show_agent_trace: bool, request): |
| """Handle user message submission""" |
| try: |
| |
| if session_id not in self.sessions: |
| self.sessions[session_id] = { |
| 'history': [], |
| 'context': {}, |
| 'created_at': uuid.uuid4().hex |
| } |
| |
| |
| chat_history.append((message, None)) |
| |
| |
| if self.components.get('mock_mode'): |
| response = self._generate_mock_response(message) |
| else: |
| response = await self._generate_ai_response(message, session_id) |
| |
| |
| chat_history[-1] = (message, response) |
| |
| |
| reasoning_data = {} |
| performance_data = {} |
| |
| if show_reasoning: |
| reasoning_data = { |
| "chain_of_thought": { |
| "step_1": { |
| "hypothesis": "Mock reasoning for demonstration", |
| "evidence": ["Mock mode active", f"User input: {message[:50]}..."], |
| "confidence": 0.5, |
| "reasoning": "Demonstration mode - enhanced reasoning chain not available" |
| } |
| }, |
| "alternative_paths": [], |
| "uncertainty_areas": [ |
| { |
| "aspect": "System mode", |
| "confidence": 0.5, |
| "mitigation": "Mock mode - full reasoning chain not available" |
| } |
| ], |
| "evidence_sources": [], |
| "confidence_calibration": {"overall_confidence": 0.5, "mock_mode": True} |
| } |
| |
| if show_agent_trace: |
| performance_data = {"agents_used": ["intent", "synthesis", "safety"]} |
| |
| return "", chat_history, reasoning_data, performance_data |
| |
| except Exception as e: |
| logger.error(f"Error handling message: {e}") |
| error_response = "I apologize, but I'm experiencing technical difficulties. Please try again." |
| chat_history.append((message, error_response)) |
| return "", chat_history, {"error": str(e)}, {"status": "error"} |
| |
| def _generate_mock_response(self, message: str) -> str: |
| """Generate mock response for demonstration""" |
| mock_responses = [ |
| f"I understand you're asking about: {message}. This is a mock response while the AI system initializes.", |
| f"Thank you for your question: '{message}'. The research assistant is currently in demonstration mode.", |
| f"Interesting question about {message}. In a full implementation, I would analyze this using multiple AI agents.", |
| f"I've received your query: '{message}'. The system is working properly in mock mode." |
| ] |
| |
| import random |
| return random.choice(mock_responses) |
| |
| async def _generate_ai_response(self, message: str, session_id: str) -> str: |
| """Generate AI response using orchestrator""" |
| try: |
| if 'orchestrator' in self.components: |
| result = await self.components['orchestrator'].process_request( |
| session_id=session_id, |
| user_input=message |
| ) |
| return result.get('final_response', 'No response generated') |
| else: |
| return "Orchestrator not available. Using mock response." |
| except Exception as e: |
| logger.error(f"AI response generation failed: {e}") |
| return f"AI processing error: {str(e)}" |
| |
| def handle_new_session(self): |
| """Handle new session creation""" |
| new_session_id = uuid.uuid4().hex[:8] |
| self.sessions[new_session_id] = { |
| 'history': [], |
| 'context': {}, |
| 'created_at': uuid.uuid4().hex |
| } |
| return new_session_id, [] |
| |
| def handle_settings_toggle(self, current_visibility: bool): |
| """Toggle settings panel visibility""" |
| return not current_visibility |
| |
| def handle_tab_change(self, tab_name: str): |
| """Handle tab changes in mobile interface""" |
| return tab_name, False |
|
|
| |
| def create_event_handlers(components: Dict[str, Any]): |
| return EventHandlers(components) |
|
|