Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
6773fe3
feat: implement node assembler for page memory hierarchy to support s…
EricNGOntos Jun 22, 2026
0035b4a
feat: implement page asset integration into node assembly and chunk c…
EricNGOntos Jun 23, 2026
6d7042c
feat: enhance document profiling and page memory integration with ski…
EricNGOntos Jun 23, 2026
a0ab8ca
feat: enhance retrieval and document ingestion with new chunk types a…
EricNGOntos Jun 24, 2026
c8f88ce
refactor: decouple page memory from image URIs and simplify node meta…
EricNGOntos Jun 25, 2026
3bf5d69
feat: integrate summary engine for enhanced document parsing and asse…
EricNGOntos Jun 25, 2026
eea74df
feat: implement concurrent page tagging and enrich image and table as…
EricNGOntos Jun 25, 2026
dfc10f1
feat: standardize page_memory track for PDF/PPTX, implement page-coun…
EricNGOntos Jun 25, 2026
5dbd084
chore: align parser env defaults
EricNGOntos Jun 26, 2026
3531581
refactor: replace legacy data_type integer with flexible chunk_types …
EricNGOntos Jun 26, 2026
10e6ba8
feat: implement intermediate node chain collapse and add utilities fo…
EricNGOntos Jun 29, 2026
e11a41f
Add thread-safe trace logging, remove unused heading dataframes, and …
EricNGOntos Jun 29, 2026
ab73cc7
refactor: remove budget tracking dependency from page memory services
EricNGOntos Jun 29, 2026
48ce6ea
chore: fix lint and type errors caught by ruff and pyright
EricNGOntos Jun 29, 2026
dd0a25a
fix: resolve alembic revision ID conflict causing cycle detection fai…
EricNGOntos Jun 29, 2026
81fe498
test: fix failing tests from page-memory native hierarchy branch
EricNGOntos Jun 29, 2026
24b50ad
refactor: remove page_memory_work_summary_20260624.md file and stream…
EricNGOntos Jul 1, 2026
fd12be7
Merge remote-tracking branch 'origin/feat/wuchengke/page-memory-nativ…
EricNGOntos Jul 1, 2026
c340924
feat: enhance skeleton extractor with native hierarchy support and ag…
EricNGOntos Jul 2, 2026
dcf0fec
Merge remote-tracking branch 'origin/main' into feat/wuchengke/page-m…
EricNGOntos Jul 2, 2026
ac82c1a
fix: remove dead commented code and propagate PageLocateConfig to pen…
EricNGOntos Jul 2, 2026
e28f57c
refactor: remove PageLocateResidualAgent fallback from skeleton extra…
EricNGOntos Jul 2, 2026
a42b189
fix: resolve PR #200 lint and typecheck failures
EricNGOntos Jul 3, 2026
411c115
feat: add toc_page_offset to PageAnatomyMap and AgentBlackboard
EricNGOntos Jul 3, 2026
625bd9a
feat: prune out-of-scope TOC nodes before offset-guided anchoring
EricNGOntos Jul 3, 2026
f870572
feat: add chapter boundary detection and toc_chapter_boundary anchor …
EricNGOntos Jul 3, 2026
8a72bb7
Merge remote-tracking branch 'origin/main' into feat/wuchengke/remove…
EricNGOntos Jul 3, 2026
f583eaf
fix: use private _calibrate_offset_via_vlm import after merge rename
EricNGOntos Jul 3, 2026
00d944f
feat: restore use_agentic switch with classic top-K retrieval route
EricNGOntos Jul 7, 2026
5af9c63
fix: update contract test to expect classic_topk when use_agentic=False
EricNGOntos Jul 7, 2026
f2f2ba1
chore: remove dead RETRIEVAL pydantic config fields
EricNGOntos Jul 7, 2026
b5e5bf5
feat: implement position-aware spatial constraints and boundary detec…
EricNGOntos Jul 8, 2026
7d5849e
refactor: simplify spatial orientation instructions and scope boundar…
EricNGOntos Jul 8, 2026
bf619f5
Merge remote-tracking branch 'origin/main' into feat/wuchengke/remove…
EricNGOntos Jul 8, 2026
43b7014
fix: resolve lint errors after merging origin/main (remove unused var…
EricNGOntos Jul 8, 2026
a72e84a
fix: accept title_ctx in page tagger contract test mocks
EricNGOntos Jul 9, 2026
b6a56d6
Merge remote-tracking branch 'origin/main' into feat/wuchengke/remove…
EricNGOntos Jul 20, 2026
b8bf418
refactor: update document path formatting and improve chunk handling
EricNGOntos Jul 20, 2026
ee7ae3e
fix: resolve path-escape lint/type issues before PR sync
EricNGOntos Jul 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 36 additions & 36 deletions apps/api/app/data/demo_documents/tsla-q4-2025/chunks.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions apps/api/app/services/demo/source_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class DemoSourceDefinition:
),
citations=(
DemoCitationDefinition(
section_path=("TSLA-Q4-2025-Update.pdf-->OTHER UPDATES"),
section_path=("TSLA-Q4-2025-Update.pdf/OTHER UPDATES"),
description="xAI investment",
content=(
"On January 16, 2026, Tesla entered into an agreement "
Expand All @@ -92,7 +92,7 @@ class DemoSourceDefinition:
citations=(
DemoCitationDefinition(
section_path=(
"TSLA-Q4-2025-Update.pdf-->SUMMARY-->"
"TSLA-Q4-2025-Update.pdf/SUMMARY/"
"Energy generation and storage"
),
description="Storage deployment growth",
Expand All @@ -115,7 +115,7 @@ class DemoSourceDefinition:
),
citations=(
DemoCitationDefinition(
section_path=("TSLA-Q4-2025-Update.pdf-->OUTLOOK-->Product"),
section_path=("TSLA-Q4-2025-Update.pdf/OUTLOOK/Product"),
description="2026 production plans",
content=(
"Cybercab, Tesla Semi and Megapack 3 are on schedule "
Expand Down
17 changes: 9 additions & 8 deletions apps/api/app/services/demo/source_projection.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
from typing import Any, Protocol
from urllib.parse import quote

from shared.services.chunks.path_segments import (
join_document_path,
split_escaped_document_path,
)

_SOURCE_FILE_EXTENSIONS = (
".csv",
".doc",
Expand Down Expand Up @@ -241,22 +246,18 @@ def _publication_path(
if not raw:
return prefix

if "-->" in raw:
sections = [part.strip() for part in raw.split("-->")[1:] if part.strip()]
return "/".join([prefix, *sections]) if sections else prefix

if raw.startswith("images/") or raw.startswith("tables/"):
return f"{prefix}/Assets/{raw}"

parts = [part.strip() for part in raw.split("/") if part.strip()]
parts = split_escaped_document_path(raw)
if parts and parts[0] == source.title:
return raw
return join_document_path(parts)
if len(parts) >= 2 and parts[0] == "Default_Root":
section_parts = parts[2:] if parts[1] == source.title else parts[1:]
return "/".join([prefix, *section_parts]) if section_parts else prefix
return join_document_path([prefix, *section_parts]) if section_parts else prefix
if parts and _is_source_file_root(parts[0]):
section_parts = parts[1:]
return "/".join([prefix, *section_parts]) if section_parts else prefix
return join_document_path([prefix, *section_parts]) if section_parts else prefix
return prefix


Expand Down
32 changes: 0 additions & 32 deletions apps/api/tests/contract/test_chunk_document_path_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,38 +89,6 @@ def test_should_not_treat_dotted_section_titles_as_legacy_document_files() -> No
assert children[0]["path"] == chunk_path


def test_should_read_arrow_delimited_document_paths_as_section_paths() -> None:
chunk_path = "report.pdf-->Intro-->Subsection"

doc_nav = ZipResultSchemaBuilder().build_doc_nav(
[
{
"chunk_id": "chunk_arrow_delimited_path",
"type": "text",
"content": "arrow delimited content",
"path": chunk_path,
"metadata": {"summary": "arrow delimited summary"},
}
],
"report.pdf",
)

sections = cast(list[dict[str, object]], doc_nav["sections"])
children = cast(list[dict[str, object]], sections[0]["children"])

assert (
section_path_from_chunk_path(
chunk_path,
source_file_name="report.pdf",
)
== "Intro / Subsection"
)
assert sections[0]["title"] == "Intro"
assert sections[0]["path"] == "report.pdf/Intro"
assert children[0]["title"] == "Subsection"
assert children[0]["path"] == "report.pdf/Intro/Subsection"


def test_should_preserve_literal_arrow_text_in_slash_paths() -> None:
chunk_path = "report.pdf/Inputs --> Outputs/Details"

Expand Down
Loading
Loading