The namespace-per-account architecture worked well when a sales rep asked
questions about a specific deal, but it couldn't answer general questions that
needed to stitch results across accounts — like "what objections came up across
all enterprise prospects evaluating the AI gateway?" Cameron led a refactor to a
small set of shared namespaces with rich filterable attributes, so agents could
query a single account or scan thematically across the entire GTM corpus.
The new architecture has three main namespaces backed by Gong webhooks that
write embeddings to turbopuffer:
╔═ turbopuffer ═══════════════════════════════╗
┌────────────┐ ║ ║░
│ Gong │─┐ ║ ns: doc_summaries (1 per call transcript) ║░
│ API │ │ ║ ┌────┬──────┬──────┬──────┬─────┬───────┐ ║░
└────────────┘ │ ║ │ id │ text │topic │objctn│stage│account│ ║░
│ ┌──────────┐ ║ └────┴──────┴──────┴──────┴─────┴───────┘ ║░
┌────────────┐ │ │ chunk + │ ║ ║░
│ Slack │─┼─▶│ embed + │─▶║ ns: doc_points (~10 per call transcript) ║░
│ API │ │ │ LLM tag │ ║ ┌────┬───────┬───────┬───────┐ ║░
└────────────┘ │ └──────────┘ ║ │ id │ chunk │cluster│account│◀══╗ ║░
│ ║ └────┴───────┴───────┴───────┘ ║ ║░
┌────────────┐ │ ║ ║ ║░
│ Salesforce │─┘ ║ ns: slack (1 row / thread) ║ ║░
│ CRM data │ ║ ┌─────┬──────┬───────┐ ║ ║░
└────────────┘ ║ │ thr │ text │account│ ║ ║░
║ └─────┴──────┴───────┘ ║ ║░
╚═══════════════════════════════════║═════════╝░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║░░░░░░░░░░░
▼
┌─────────────┐
│ nightly │
│ HDBSCAN │
│ clustering │
└─────────────┘
┌─────────────┐
│ Gong API │
│ Slack API │
│ Salesforce │
└───────┬─────┘
│
▼
┌─────────────┐
│ chunk + │
│ embed + tag │
└──────┬──────┘
▼
╔═ turbopuffer ══════════╗
║ ns: doc_summaries ║░
║ ┌──┬───┬─────┬───┬───┐ ║░
║ │id│txt│topic│obj│act│ ║░
║ └──┴───┴─────┴───┴───┘ ║░
║ ║░
║ ns: doc_points ◀═════╗ ║░
║ ┌──┬─────┬─────┬────┐║ ║░
║ │id│chunk│clust│acct│║ ║░
║ └──┴─────┴─────┴────┘║ ║░
║ ║ ║░
║ ns: slack ║ ║░
║ ┌───┬────┬────┐ ║ ║░
║ │thr│text│acct│ ║ ║░
║ └───┴────┴────┘ ║ ║░
╚══════════════════════║═╝░
░░░░░░░░░░░░░░░░░░░░░░║░░░
║
▼
┌─────────────┐
│ nightly │
│ clustering │
└─────────────┘
- Document summaries: An LLM generates a structured summary of each call
and tags it against a fixed taxonomy of topics, objections, products, plans,
deal stages, sentiment, and stakeholders. The summary is upserted to
turbopuffer with
account_id, source, and extracted tags as
filterable attributes so queries can target precise
facets
- Critcal moments: Each call is also analyzed by an LLM for critical
moments (e.g. a pricing objection, a feature request, a competitive
comparison), and the exact quotes from these moments are embedded and
upserted to a turbopuffer namespace
- Slack: Messages from customer and deal-related Slack channels get
upserted into a single namespace with
thread_id and account_id as
filterable attributes, so messages can be grouped into threads or scoped to a
specific account without operating one namespace per channel
A nightly HDBSCAN job clusters the critical
moment embeddings and writes the cluster label back to each point as a
filterable attribute. Themes that emerge from the data itself become first-class
facets agents can filter on, alongside the other LLM-assigned summary tags.
Cameron built a CLI that wraps the turbopuffer API, providing a harness by which
agents can make domain-specific searches to turbopuffer using known filterable
attributes (account_id, topic, objection, cluster, deal stage, etc.). The CLI
handles scope automatically: if a Salesforce account is in context, queries are
filtered on that account, otherwise the agent searches across the entire corpus
to answer thematic questions.
Now we can build queries like 'show me every objection from enterprise customers about the AI gateway' and turbopuffer just spits it out. It's made it way easier to find specifics across all our deals.

Cameron Youngblood, GTM Engineer