""" backend/agent/router.py — HF Cloud Version Full intelligent routing with NVIDIA fallback, Emergency Replay bypass, and Omni-Memory sync. """ import asyncio import logging from backend.agent.personas import inject_persona from backend.ws.ws_manager import ws_manager class LLMRouter: async def process_transcript(self, transcript: str, active_persona: str, task_type: str = "general"): logging.info(f"Router: Received transcript for {active_persona}: '{transcript[:80]}...'") # ── EMERGENCY REPLAY BYPASS ────────────────────────────────────────── # If the transcript is a direct replay command, bypass LLM entirely. replay_triggers = ["replay", "what did you just say", "repeat that", "say that again"] if any(t in transcript.lower() for t in replay_triggers): await ws_manager.emit("agent:emergency_replay", {"trigger": transcript}) logging.info("Router: Emergency Replay triggered — bypassing LLM.") return # ── PERSONA CONTEXT INJECTION ──────────────────────────────────────── context = inject_persona(active_persona, transcript) # ── OMNI-MEMORY HIVE MIND CONTEXT ──────────────────────────────────── try: from backend.services.memory_service import GlobalOmniMemory omni_context = GlobalOmniMemory.get_global_context_stream() if omni_context: context = omni_context + context except Exception as e: logging.warning(f"Router: OmniMemory unavailable: {e}") # ── INTELLIGENT TASK CLASSIFICATION ────────────────────────────────── transcript_lower = transcript.lower() if any(k in transcript_lower for k in ["code", "debug", "function", "class", "python", "rust", "fix bug"]): task_type = "heavy_compute" elif any(k in transcript_lower for k in ["plan", "research", "schedule", "remind", "analyse"]): task_type = "agentic" elif any(k in transcript_lower for k in ["look at", "see", "image", "camera", "screenshot", "video"]): task_type = "multimodal" elif any(k in transcript_lower for k in ["password", "private", "secure", "pii", "personal"]): task_type = "specialized" # ── TOKEN MANAGER ROUTING (Google Primary → NVIDIA Fallback) ───────── try: from backend.services.token_manager import run_task response_text = await asyncio.to_thread(run_task, context, task_type=task_type) except Exception as e: logging.error(f"Router: Token Manager failed: {e}") response_text = "I encountered an issue processing that request, sir." # ── STREAM RESPONSE TO FRONTEND ────────────────────────────────────── words = response_text.split() for i, word in enumerate(words): token = word + (" " if i < len(words) - 1 else "") await ws_manager.emit("agent:token", {"token": token, "persona": active_persona}) await asyncio.sleep(0.02) await ws_manager.emit("agent:finished", {"full_text": response_text}) # ── TTS SYNTHESIS ───────────────────────────────────────────────────── try: from backend.voice.tts import synthesize await synthesize(response_text) except Exception as e: logging.warning(f"Router: TTS unavailable on HF: {e}") # ── RECORD TO OMNI MEMORY ───────────────────────────────────────────── try: from backend.services.memory_service import GlobalOmniMemory GlobalOmniMemory.record_action("CLOUD_HF", "router", task_type, response_text[:100].replace('\n', ' ') + "...") except Exception as e: logging.warning(f"Router: OmniMemory record failed: {e}") router = LLMRouter()