# app.py — Settings UI patch for sensorium companion # # PATCH v1 — Sensorium Companion Digest: # - Add Settings toggles: "Enable screen awareness", "Enable desktop audio awareness" # - Add audio source selector: auto / loopback / microphone / off # - Add sensorium storage status display # # This file contains the new helper functions and the Settings tab UI patch. # To apply: add these functions to app.py and add the UI elements to the Settings tab. # ================================================================== # NEW SETTINGS HELPERS — Sensorium toggles # ================================================================== def toggle_screen_awareness(enabled): try: result = daemon.set_screen_awareness(bool(enabled)) return f"Screen awareness: {result.get('screen_awareness', '?')}" except Exception as e: return f"Error: {e}" def toggle_audio_awareness(enabled): try: result = daemon.set_audio_awareness(bool(enabled)) # Also start/stop audio capture if result.get("audio_awareness") == "on": if hasattr(daemon, "start_audio_capture"): daemon.start_audio_capture() else: if hasattr(daemon, "stop_audio_capture"): daemon.stop_audio_capture() return f"Audio awareness: {result.get('audio_awareness', '?')}" except Exception as e: return f"Error: {e}" def get_sensorium_status(): try: storage = daemon.tool_sensorium_storage_status() audio = daemon.tool_audio_status() screen_on = getattr(daemon, "_screen_awareness", False) audio_on = getattr(daemon, "_audio_awareness", False) lines = ["**Sensorium Status**\n"] lines.append(f"- Screen awareness: `{'on' if screen_on else 'off'}`") lines.append(f"- Audio awareness: `{'on' if audio_on else 'off'}`") lines.append(f"- Audio capture active: `{'yes' if audio.get('capture_active') else 'no'}`") lines.append(f"- Whisper loaded: `{'yes' if audio.get('whisper_loaded') else 'no'}`") lines.append(f"- Storage: `{storage.get('size_mb', '?')}MB` ({storage.get('file_count', '?')} files)") if audio.get("last_transcript"): lines.append(f"- Last transcript: `{audio['last_transcript'][:80]}...`") return "\n".join(lines) except Exception as e: return f"⚠️ Sensorium status error: {e}" def do_sensorium_cleanup(): try: result = daemon.tool_sensorium_cleanup(max_age_hours=24) return f"Cleaned up {result.get('deleted', 0)} files" except Exception as e: return f"Error: {e}" # ================================================================== # SETTINGS TAB UI ADDITION # Add this block inside the Settings tab in app.py, after the existing # audio source dropdown section: # # with gr.Accordion("Sensorium — Screen & Audio Awareness", open=True): # gr.Markdown("### 🖥️ Screen & Audio Awareness") # sensorium_status_md = gr.Markdown(value=get_sensorium_status()) # refresh_sensorium_btn = gr.Button("⟳ Refresh Sensorium", size="sm") # with gr.Row(): # screen_toggle = gr.Checkbox(label="Enable screen awareness (OCR)", value=False) # apply_screen_btn = gr.Button("Apply", size="sm") # with gr.Row(): # audio_toggle = gr.Checkbox(label="Enable desktop audio awareness (loopback)", value=False) # apply_audio_btn = gr.Button("Apply", size="sm") # with gr.Row(): # sensorium_cleanup_btn = gr.Button("🧹 Cleanup old files", size="sm") # sensorium_result = gr.Textbox(label="Result", interactive=False) # # # Event handlers # apply_screen_btn.click(fn=toggle_screen_awareness, inputs=[screen_toggle], outputs=[sensorium_result]) # apply_audio_btn.click(fn=toggle_audio_awareness, inputs=[audio_toggle], outputs=[sensorium_result]) # refresh_sensorium_btn.click(fn=get_sensorium_status, outputs=[sensorium_status_md]) # sensorium_cleanup_btn.click(fn=do_sensorium_cleanup, outputs=[sensorium_result])