File size: 4,069 Bytes
82d5003
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 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])