include(matches) selects only the events returned by Deep Search, up to
top_k. A capped query is not exhaustive. If you need all events already
labeled robot_action=grasp, discover that field in
taxonomy_schema(studio.id) and use:
Remove unwanted events or videos
Selections are immutable: each call returns a new selection. Removing one event leaves its sibling events from the same video selected; removing a video ID removes every currently selected event from that video.include(query="...") or exclude(query="..."); the SDK rejects
query resolution if the deep reranker capped its results. Snapshot, caption,
and legacy inline events cannot be exported as MCAP events; include() raises
an error for them. Choose externalized events from the results instead.
What downloads
job.download(path) returns a dictionary containing output_dir, files, and
manifest. The manifest is returned in memory; the downloaded directory has
files such as:
selection lists event and video IDs retained after source
revalidation; skipped_selection lists IDs no longer available. Its coverage
contains a status per video, including failed session builds. events.jsonl
retains normalized event IDs, source video and analysis IDs, timestamps,
descriptions, and structured output when available. The download includes
source media files alongside MCAP sessions for successfully built videos;
source media is not merely a URL in the manifest. The SDK checks downloaded
file sizes and SHA-256 hashes when provided.
Compare selection.count() with the manifest’s selection,
skipped_selection, and coverage before treating the export as complete.
An index row alone is not proof that its video’s MCAP session built: inspect
coverage for status="included".
Limits and recovery
The export request accepts at most 5,000 video IDs and 50,000 event IDs. It requires an eligible paid, sponsored, or enterprise plan, an API key withwrite or datasets:write scope, and an enabled export service. The job may
finish as completed_with_gaps if some selected items were skipped or sessions
failed. Source changes between selection and export can produce such gaps.
If job.wait() times out, keep job.id and call job.refresh() or
job.wait() again; do not start a duplicate job solely because the local wait
timed out. If a job fails, inspect its error, correct the source or selection,
and submit a new export. Signed download URLs expire; use
client.refresh_dataset_export_urls(job.id) before retrying a download with
expired URLs.