Qwen3.8-27B and Muse Glimmer 30B with an 8-frame sliding window and a self-written memory on all 2,100 Wearable AI validation sessions (EgoLongQA, EgoConv, EgoProactive), run and scored with the official starter kit, with and without the leaderboard's 300 s per-sample rule; EgoProactive is also run under the Pro2Bench paper's protocol.
Models, sliding window, memory, serving and the latency study are shared by both benchmarks: see the overview page.
$interrupt$ … or $silent$.run_evaluation.py, unmodified: EgoLongQA accuracy, EgoConv BLEU-4 and the Llama-4-Maverick LLM judge (the leaderboard metric), EgoProactive macro and G-mean F1.Most recent frames (8), oldest first:
[frame at 121.0s] <image> … [frame at 128.0s] <image>
Your memory of earlier footage (written by you):
{"observed_facts": [...], "completed_steps": [...], "current_state": "...", "pending_commitments": [...], "uncertainties": [...]}Watch the video and answer the following multiple-choice question.
Question: {question}
Options:
{mcq_options}
Answer with ONLY the single letter of the correct option (A, B, C, or D). Do not include any other text.You are a helpful assistant answering questions about a video the user is watching. Answer directly and concisely based on what you see in the video. Do not start your response with phrases like "Sure!", "Of course!", "The answer is", or similar preambles. Just provide the answer.
You are a proactive AI assistant watching a first-person video of the user performing a procedural task. The user has issued a single high-level query. As the video unfolds you observe a series of short (~8s) chunks; after each chunk you decide whether to speak or stay silent. Output format (single line, no preamble): - If you should speak: start with the literal token `$interrupt$` followed by your suggestion or answer in plain text. - If you should stay silent: output the single literal token `$silent$` and nothing else. Speak when the user asks you something, when an earlier action needs correction, or when you have useful, timely guidance for the next step. Stay silent when nothing useful needs to be said.
You are watching a live first-person video but only ever see the most recent frames (each labeled with its time in seconds) plus a short written memory that you yourself wrote on the previous update. Nothing else about earlier footage survives, so the memory must carry everything you may need later: what the person did and where, objects and their locations, text you saw, counts, the current state, and what was said.
Context so far: [context]
Hard limits: observed_facts at most 8 entries, completed_steps at most 6, pending_commitments at most 3, uncertainties at most 3; every entry at most 15 words and prefixed with its time (e.g. "12s: ..."); current_state at most 40 words. Merge or drop older entries instead of exceeding these limits. Describe only what the frames support.
Reply with ONE JSON object and nothing else, in exactly this shape:
{"observed_facts": [...], "completed_steps": [...], "current_state": "...", "pending_commitments": [...], "uncertainties": [...]}You are a helpful, proactive AI assistant guiding a user through a step-by-step procedural task. You observe the user’s activity through egocentric video from their perspective. Your responsibilities: 1. Track which step the user is currently performing. 2. Detect when a step is completed and proactively announce the next step. 3. Detect mistakes or deviations from the expected procedure: - Skipped steps - Wrong step ordering - Technique errors - Substitutions or improvisations 4. When a deviation is detected, suggest a recovery action. 5. If no guidance is needed (user is progressing normally), stay silent. Output format: - If the user needs guidance (step completed, mistake detected, or question asked), respond with: $interrupt$ followed by your guidance. - If no guidance is needed, respond with exactly: $silent$ Be concise. Focus on what the user should do next, not what they just did.
Here is the summary of the recent visual context: {visual_summary}
Here is the most recent conversation between the user and the assistant:
User: {user_utterance}
Assistant: {assistant_response}Highlighted: our method (8-frame sliding window + self-written memory). Other rows are reference results from the benchmark papers. ↑ higher is better · ↓ lower is better · (count) descriptive, neither.
| Task · metric | Ours · Qwen3.8-27B | Ours · Muse Glimmer 30B | Status |
|---|---|---|---|
| EgoLongQA · MCQ accuracy↑, no time limit | 0.659 | 0.520 | official |
| EgoLongQA · MCQ accuracy↑, 300 s/sample rule | 0.411 | 0.001 | official |
| EgoConv · BLEU-4↑, no time limit | 0.063 | 0.048 | official |
| EgoConv · BLEU-4↑, 300 s/sample rule | 0.040 | 0.015 | official |
| EgoConv · LLM judge↑ (Llama-4-Maverick) | – | – | pending (judge jobs queued) |
| EgoProactive · macro F1↑ / G-mean F1↑, no time limit | 0.487 / 0.486 | 0.364 / 0.150 | official |
| EgoProactive · interrupt / silent recall↑ | 0.40 / 0.59 | 0.98 / 0.02 | official |
| EgoProactive · macro F1↑, 300 s/sample rule | 0.243 | 0.014 | official |
| Samples over 300 s↓ (LongQA / Conv / Proactive, of 700 each) | 256 / 275 / 280 | 699 / 487 / 667 | isolated-latency estimate |
Official prompts, decision points and scorers from the starter kit; our 8-frame window plus self-written memory is the only change; 4,096-token output budget. Over-time samples are scored as empty under the 300 s rule. Qwen's 95 failed EgoConv turns are empty answers (first token was end-of-turn). Val leaderboard reference (large division): LongQA best 0.96, zero-shot Qwen2.5-VL-7B 0.59–0.69; EgoConv judge best 0.59.
| Model | G-mean F1↑ | Interrupt / silent recall↑ |
|---|---|---|
| Ours · Muse Glimmer 30B (greedy) | 0.533 | 0.76 / 0.35 |
| Ours · Qwen3.8-27B (greedy) | 0.260 | 0.06 / 0.98 |
| Claude Opus 4.6 (paper) | 0.57 | – |
| Qwen3-VL-235B (paper) | 0.57 | – |
| Llama 4 Maverick (paper) | 0.49 | – |
| Gemini 3.1 Pro (paper) | 0.46 | – |
| Qwen3.6-VL-27B (paper) | 0.28 | – |
| GPT-5.2 (paper) | 0.00 | – |
Paper baselines are zero-shot, best of 3 prompt variants; the fine-tuned PWR model reaches 0.68. PQS (needs an LLM judge) is not computed; judge inputs are exported.
Six sessions picked at random with a fixed seed (2 per subtask), not chosen for outcome. Each clip shows both models: segments around gold events, decision points and model utterances, with the media time stamped top-left. Clips come from the official starter-kit run. 480p, no audio.
Official starter-kit run. EgoProactive: one $interrupt$/$silent$ decision per chunk end · EgoConv: answer each user question · EgoLongQA: question revealed at the end.
Code: jxb1st/glimmer_qwen_streaming_baseline-code, config configs/full_klone.yaml. On a SLURM cluster with the vLLM Muse Glimmer image:
# Wearable AI with the official starter-kit protocol (all 2,100 rows); Pro2Bench: configs/wearable_pro2bench_klone.yaml python tools/prepare_wearable_official.py configs/wearable_official_klone.yaml <validated full_klone run root> scripts/serve_and_run.sh muse30b 1 32 configs/wearable_official_klone.yaml # same for qwen27b python -m streaming_smoke score --config configs/wearable_official_klone.yaml --model muse30b sbatch --export=ALL,MODEL=muse30b submit_jobs/glimmer_qwen_wai_judge.slurm # EgoConv LLM judge, 4 x H200