GROVE

August 12, 2026 · View on GitHub

GROVE

Growing and Reasoning over Temporally Stratified Memory from Streaming Video Experience

A training-free framework that grows one causal memory from a continuous video stream — and uses it both to answer questions about the past and to decide when the past matters now.

arXiv Paper Python


Overview

A wearable assistant should do two things: answer questions about its visual history, and recognize when that history is useful to the present situation. Existing video-memory systems mostly support question-conditioned recall, while proactive assistants typically bolt on separate memory and control mechanisms.

GROVE supports both behaviors with a single memory grown causally from a continuous stream. It retains fine-grained perceptual evidence and incrementally consolidates it into time-stamped moments, coherent episodes, and recurring cross-day patterns. Each stratum is paired with a scale-native retrieval skill — for locating an observation, replaying an activity, or traversing long-range regularities.

Reactive QA and proactive assistance share this memory and the same access interface. They differ only in whether retrieval is initiated by a user query or by the current situation.

Key properties

  • Training-free. No fine-tuning; the memory is built and read by prompted LLM/VLM calls.
  • Causal by construction. Every retrieval is clamped to the moment it is issued, so no answer can depend on video the system had not yet seen.
  • Incremental. Construction is streaming and checkpointed — memory is queryable at any point, not only after the video ends.
  • One memory, two behaviors. The same strata serve query-driven recall and situation-driven proactive assistance.

Results

GROVE is evaluated on five benchmarks spanning minutes-long clips to month-long recordings. All numbers are accuracy or macro-F1 (higher is better); bold is best, underline second best.

Long-horizon reactive QA — MM-Lifelong

ModelMonthWeekDay
Human80.495.699.2
GPT-514.8715.0015.25
Qwen3-VL-235B-A22B14.3315.6312.44
Video-XL-2-8B9.0712.009.00
VideoMind-7B8.3511.757.50
DeepVideoDiscovery10.579.0210.25
ReMA18.6218.8216.75
GROVE (ours)19.9822.7523.50

Online video understanding — OVO-Bench & StreamingBench

ModelOVO Real-TimeOVO BackwardOVO ForwardOVO OverallSB Real-TimeSB ContextualSB Avg
Human Agents93.2092.3392.9092.8191.4693.5592.51
GPT-4o64.560.853.459.573.338.756.0
Dispider54.636.134.741.867.633.650.6
StreamForest61.252.053.555.677.3
StreamBridge71.368.148.462.677.032.654.8
ViSpeak66.357.554.359.470.443.957.2
TimeChat-Online58.642.036.445.775.435.355.4
GROVE (ours)76.269.956.567.577.053.165.1

Proactive assistance — EgoServe

Ten service sub-types grouped into four response horizons. Macro-F1 over all ten.

ModelInstant
SA / TU
Short-term
NSG / ER / RR
Episodic
MR / TR
Long-term
HC / ML / RO
Overall
Qwen3-VL-Plus5.2 / 1.58.6 / 10.4 / 3.40.0 / 1.84.4 / 0.0 / 0.03.5
GPT-5-mini12.5 / 3.69.5 / 1.0 / 5.20.0 / 9.45.7 / 0.0 / 0.04.7
EgoMemo11.4 / 7.524.7 / 1.7 / 4.73.8 / 5.73.7 / 4.9 / 11.88.0
GROVE (ours)19.7 / 20.221.8 / 23.8 / 6.85.9 / 5.98.6 / 6.5 / 7.112.6

Proactive timing — ESTP-Bench

ModelEPTIPTCQOverall
EyeWO (benchmark's own model)23.652.543.634.7
Qwen2-VL15.439.310.421.3
MiniCPM-V15.236.526.622.9
LLaVA-NeXT-Video16.534.613.821.3
MMDuet9.134.220.317.8
GROVE (ours)22.734.441.028.6

How it works

Construction proceeds one window at a time. A VLM captions the window and emits a structured perceptual record; a segmenter decides at each window boundary whether the current activity continues or a new episode begins; on a cut, the closed episode is summarized and its moments extracted, and the episode is matched against existing patterns or seeds a new one. All four strata stay queryable throughout.

Retrieval exposes four scale-native skills — perception lookup, moment recall, episode replay, and pattern traversal — over a dual index that fuses BM25 with dense similarity via reciprocal rank fusion. Reactive QA lets the agent choose its own calls across multiple rounds; proactive assistance assembles one evidence block per screening unit.


Installation

git clone https://github.com/SitongGong/GROVE.git
cd GROVE
pip install -r requirements.txt

Set the environment before running anything:

export PYTHONPATH=$(pwd):$PYTHONPATH
export OPENAI_API_KEY=<your key>
export DATA_ROOT=<where benchmark videos and annotations live>

Local VLM captioning expects an OpenAI-compatible endpoint; pass --vllm_base_url to the construction scripts. No API keys are embedded in the code — machine-specific paths are placeholders (${DATA_ROOT}, ${GROVE_ROOT}, ${GROVE_WORK}) that you set or override with the corresponding CLI flags.


Quick start

# 1. build a memory from a video stream
python -m hypervideo.egolife_hyper_processing \
    --video_dir   ${DATA_ROOT}/EgoLife/A1_JAKE \
    --working_dir ./memory/a1_jake \
    --window_seconds 30 --interval_seconds 5

# 2. answer questions against it
python -m hypervideo.sp_agentic_qa_u1 \
    --mode day \
    --working_dir ./memory/a1_jake \
    --gt ${DATA_ROOT}/MM-Lifelong/day/test.json \
    --answer_model gpt-5.2 --max_rounds 8 --max_chapters 46 \
    --out_dir ./predictions/day

Construction writes hypergraph.json, structured_perception.jsonl and the text indices into --working_dir, checkpointing as it goes — rerunning with the same directory resumes rather than restarting.


Datasets

Download each benchmark from its release below, then point DATA_ROOT at the directory holding them (or pass explicit paths on the CLI).

BenchmarkWhat it testsDownload
MM-LifelongDay / week / month-scale reactive QA🤗 MM-Lifelong/MM-Lifelong
OVO-BenchOnline video understanding (real-time / backward / forward)🤗 JoeLeelyf/OVO-Bench
StreamingBenchReal-time and contextual streaming understanding🤗 mjuicem/StreamingBench
ESTP-BenchWhen to speak in an egocentric stream🤗 SitongGong/ESTP-IT
EgoServeProactive service across ten sub-types🤗 SitongGong/EgoServe

EgoServe is built on top of EgoLife, HoloAssist and CaptainCook4D; obtain the source videos from those releases.


Repository layout

hypervideo/                 # construction + retrieval (main package)
├── extractors/             #   moment / episode / pattern extraction stages
├── index/                  #   BM25 + dense indices
├── retrieval/              #   cross-stratum traversal
├── prompts/                #   captioning, segmentation, extraction prompts
├── skills/                 #   retrieval skill definitions
└── modules/                #   async pipeline, entity id, audio cues, profiling
videorag/                   # upstream VideoRAG utilities (third-party)
assets/                     # figures used in this README
Memory construction entry points

One script per source domain. Each consumes a video stream and writes the memory plus text indices to --working_dir.

BenchmarkScript
MM-Lifelong, EgoServe (EgoLife)hypervideo/egolife_hyper_processing.py
EgoServe (HoloAssist)hypervideo/holoassist_hyper_processing.py
EgoServe (CaptainCook4D)hypervideo/captaincook4d_hyper_processing.py
OVO-Benchhypervideo/ovobench_hyper_processing.py
StreamingBenchhypervideo/streamingbench_hyper_processing.py
ESTP-Benchhypervideo/estp_async_processing.py
OVO forward trackhypervideo/forward_hyper_processing.py
Inference entry points
Benchmark / trackScript
MM-Lifelong dayhypervideo/sp_agentic_qa_u1.py
MM-Lifelong weekhypervideo/sp_agentic_qa_u2.py
MM-Lifelong monthhypervideo/sp_agentic_qa_month.py
OVO-Bench real-time & backwardhypervideo/agentic_solver_merge4rt.py
OVO-Bench forwardhypervideo/forward_hyper_retrieval.py
StreamingBench real-timehypervideo/agentic_solver_sb3.py
StreamingBench contextual / SQA / proactivehypervideo/streamingbench_json_eval.py
ESTP-Bench single-queryhypervideo/estp_streaming_inference.py
ESTP-Bench conversationalhypervideo/estp_cq_inference.py
EgoServe (EgoLife)hypervideo/egoserve_service_engine_v4_clean.py
EgoServe (HoloAssist)hypervideo/holoassist_service_inference_v10.py
EgoServe (CaptainCook4D)hypervideo/captaincook4d_service_inference.py

Notes

  • videorag/ is derived from an upstream project and retains its own header.
  • Every LLM call is retried up to three times with exponential backoff, and its output passes through a permissive JSON repair step.
  • Defaults in the scripts match the reported runs unless a flag overrides them.

Citation

If you find GROVE useful, please consider citing:

@article{gong2026grove,
  title   = {GROVE: Growing and Reasoning over Temporally Stratified Memory
             from Streaming Video Experience},
  author  = {Gong, Sitong and Kang, Caixin and Yan, Tianyu and Chen, Guo and
             Zheng, Bo and Zhang, Kaipeng and Zhuge, Yunzhi and Ruan, Xiang and
             Lu, Huchuan and Huang, Yifei},
  journal = {arXiv preprint arXiv:2608.02392},
  year    = {2026}
}