Chenhao Yang
Built the ingest pipeline, the embedding store, and the spatial index. Wrote the verifier.
Columbia · M.S. CS[-73.985,40.795,-73.945,40.825]
/
commit 837f98e
/
built May 2026
Palimpsest plans a short walking tour for a bounded slice of Manhattan and narrates it from free public-domain sources — every claim cited back to a retrieved document, verified at generation time.
“LLMs are confident liars about places.”
The fix is not a bigger model. The fix is a retrieval contract that refuses to render a sentence the model can't ground in a real document from a real source — and a UI that shows the user exactly which document.
Palimpsest treats narration the way an academic treats a footnote:
every assertion is anchored to a doc_id, a paragraph offset,
a source feed, and a retrieval score. The verifier rejects any sentence
that fails the contract. The frontend renders the citation as a chip you
can click.
Riverside Church, completed in 1192, was funded by Andrew Carnegie and houses the oldest bell carillon in North America. Martin Luther King Jr. delivered his “Beyond Vietnam” speech here in 1965.
Riverside Church, completed in 1930wiki·p3, was funded by John D. Rockefeller Jr.wiki·p4 and houses the Laura Spelman Rockefeller Memorial Carillonwiki·p7. King delivered “Beyond Vietnam” here in 1967wiki·p11.
3D map on the left, chat pane on the right. React + Vite + TypeScript + MapLibre GL.
apps/webFastAPI service runs Claude in a tool-use loop and streams events back as SSE.
apps/agentTyped Pydantic schemas: search_places, plan_walk, narrate.
928 places — Wikipedia + OSM in v1 — embedded with pgvector, indexed with PostGIS.
data/corpusRejects any sentence missing a complete 5-field citation. Runs at generation time.
apps/agent/verifyA citation must resolve to a real document, a real paragraph inside that document, a real retrieval score above threshold, and a real source feed. No string-matching, no “trust me”.
{
"sentence": "Riverside Church was completed in 1930.",
"citations": [
{
"doc_id": "wp:Riverside_Church",
"source": "wikipedia",
"paragraph": 3,
"score": 0.871,
"retrieved_at":"2026-05-10T14:22:07Z"
}
],
"verified": true ✓ // passes contract
}
Long-form narrative, dates, names. Pulled via Wikidata SPARQL for the bbox.
Geometry, addresses, building footprints. POI tags drive the “type of place” field.
Library of Congress newspaper archive. Periodical mentions, contemporary reporting.
New York Public Library Digital Collections — historical photographs, maps, plates.
Landmark designations, building age, zoning. Authoritative civic record for the city.
Subway and bus geometry. Optional walk leg via transit when the route gets long.
Local forecast at tour-start time. Narrator adjusts diction when it's raining.
Curated additions only — Palimpsest does not crawl. Every feed is licensed, public-domain, and explicit.
Built the ingest pipeline, the embedding store, and the spatial index. Wrote the verifier.
Columbia · M.S. CSDesigned the tool-use loop, the SSE stream, and the typed Pydantic contract for every tool call.
Columbia · M.S. CSMade the map breathe — engine wrapper, marker style, flyTo choreography, and the chat shell.
Columbia · M.S. CSThe codebase is public and the documents are public. Clone it, run it against your own bbox, or open an issue with a feed you'd like us to index.