What happened
A served omnigraph export --type <T> of a table whose rows carry a populated 3072-dim Vector column dies after ~2.5 s with a transport-level stream error and no engine error message, so the CLI cannot say why:
error decoding response body
error reading a body from connection
stream error received: unexpected internal error encountered
The table is TranscriptSegment in our crm graph: 12,139 rows, embedding: Vector(3072)? @embed("text") @index, every row populated (embedded offline). Per-type export of every other type in the same graph works, including small vector-bearing tables (Account, 80 rows with a Vector(3072) profile embedding; Note, 55 rows). The size suggests the server trips a scan budget mid-stream rather than a wire limit: 12,139 × 3072 × 4 B ≈ 149 MB of vector data, right at the 150 MiB ordered_scan_memory_bytes constant that the 0.10 CLI reported as a hard error on the same table (resource limit exceeded for ordered_scan_memory_bytes … limit 157286400, see #705 for the same full-width-scan shape on merge). On 0.11.0 the served path surfaces nothing — the HTTP stream is just reset.
Combined with the fact that a served read cannot project a Vector property at all (return { $s } returns non-Blob/non-Vector properties, and $s.embedding is not projectable), there is no served route to get stored vectors out of a graph. The only ways are a direct --store read of the storage root — which is unsafe against a graph a server is actively writing to, because the CLI's open-time recovery sweep can roll back an in-flight publish — or keeping the offline omnigraph embed artifact that produced them. For a rebuild (export → new root → load) that is a real gap: we recovered the 12,139 vectors only because the embed output file was still on a laptop.
Expected: either the export streams the wide table (paged/chunked scan, like the per-type row count already suggests), or it fails with the engine's resource-limit error so the operator knows to page.
Steps to reproduce
- A graph with a node type carrying
embedding: Vector(3072)? @embed("text") @index and ~12k rows with the vector populated (ours: crm.TranscriptSegment, ~66 KB of JSON per row, ~800 MB total). Any comparable width × row count should do; the 80-row vector table exports fine.
- Serve it with
omnigraph-server --cluster <root> (ours: mr-cluster, 0.11.0, single instance).
omnigraph export --server <name> --graph crm --type TranscriptSegment > out.jsonl
- Observed: exits after ~2.5 s with the stream error above,
out.jsonl empty. Expected: 12,139 rows, or an engine error naming the limit.
Workaround we use: page the rows out through the server one parent at a time (match { $t: MeetingTranscript { slug: … } $g segmentOfTranscript $t } return { $g.slug, $g.text, … }, no vector), then restore embedding by slug from the offline embed artifact before loading the new root.
Version
omnigraph 0.11.0 on both sides (CLI release binary; server image modernrelay/omnigraph-server:v0.11.0)
Environment
Server: Linux x86_64 on EC2, S3 storage root (s3://…/clusters/mr-cluster-v9), internal schema v9. Client: macOS (Darwin 25.5) arm64.
Logs / output
$ time omnigraph export --server modernrelay --graph crm --type TranscriptSegment > TranscriptSegment.jsonl
Error:
0: error decoding response body
1: error reading a body from connection
2: stream error received: unexpected internal error encountered
Location:
crates/omnigraph-cli/src/client.rs:1320
omnigraph export … 0.01s user 0.01s system 0% cpu 2.484 total
$ wc -l TranscriptSegment.jsonl
0
What happened
A served
omnigraph export --type <T>of a table whose rows carry a populated 3072-dimVectorcolumn dies after ~2.5 s with a transport-level stream error and no engine error message, so the CLI cannot say why:The table is
TranscriptSegmentin ourcrmgraph: 12,139 rows,embedding: Vector(3072)? @embed("text") @index, every row populated (embedded offline). Per-type export of every other type in the same graph works, including small vector-bearing tables (Account, 80 rows with aVector(3072)profile embedding;Note, 55 rows). The size suggests the server trips a scan budget mid-stream rather than a wire limit: 12,139 × 3072 × 4 B ≈ 149 MB of vector data, right at the 150 MiBordered_scan_memory_bytesconstant that the 0.10 CLI reported as a hard error on the same table (resource limit exceeded for ordered_scan_memory_bytes … limit 157286400, see #705 for the same full-width-scan shape on merge). On 0.11.0 the served path surfaces nothing — the HTTP stream is just reset.Combined with the fact that a served read cannot project a
Vectorproperty at all (return { $s }returns non-Blob/non-Vector properties, and$s.embeddingis not projectable), there is no served route to get stored vectors out of a graph. The only ways are a direct--storeread of the storage root — which is unsafe against a graph a server is actively writing to, because the CLI's open-time recovery sweep can roll back an in-flight publish — or keeping the offlineomnigraph embedartifact that produced them. For a rebuild (export → new root → load) that is a real gap: we recovered the 12,139 vectors only because the embed output file was still on a laptop.Expected: either the export streams the wide table (paged/chunked scan, like the per-type row count already suggests), or it fails with the engine's resource-limit error so the operator knows to page.
Steps to reproduce
embedding: Vector(3072)? @embed("text") @indexand ~12k rows with the vector populated (ours:crm.TranscriptSegment, ~66 KB of JSON per row, ~800 MB total). Any comparable width × row count should do; the 80-row vector table exports fine.omnigraph-server --cluster <root>(ours: mr-cluster, 0.11.0, single instance).omnigraph export --server <name> --graph crm --type TranscriptSegment > out.jsonlout.jsonlempty. Expected: 12,139 rows, or an engine error naming the limit.Workaround we use: page the rows out through the server one parent at a time (
match { $t: MeetingTranscript { slug: … } $g segmentOfTranscript $t } return { $g.slug, $g.text, … }, no vector), then restoreembeddingby slug from the offline embed artifact before loading the new root.Version
omnigraph 0.11.0 on both sides (CLI release binary; server image
modernrelay/omnigraph-server:v0.11.0)Environment
Server: Linux x86_64 on EC2, S3 storage root (
s3://…/clusters/mr-cluster-v9), internal schema v9. Client: macOS (Darwin 25.5) arm64.Logs / output