Skip to content

Dev to main, 7th Sep, 2026 - #848

Merged
khushalsonawat merged 10 commits into
mainfrom
dev
Sep 7, 2026
Merged

Dev to main, 7th Sep, 2026#848
khushalsonawat merged 10 commits into
mainfrom
dev

Conversation

@abhijaisrivastava15

Copy link
Copy Markdown
Contributor

Summary

Promotion PR. Everything in it is already reviewed and merged to dev in #844; this moves it to main so it deploys to prod.

dev is 8 commits ahead of main and all 8 are that one page, so this ships exactly the voice cookbook and nothing else:

  • cookbook/quickstart/instrument-and-verify-voice and the three captures it embeds
  • public/fi_verify_voice.py, which the page's install block tells the reader to curl
  • the LiveKit integration page's span kind, the voice feature page's provider list, and the sidebar and hub entries for both

Why it needs its own PR

Merging to dev does not publish. Right now docs.futureagi.com/docs/cookbook/quickstart/instrument-and-verify-voice and docs.futureagi.com/fi_verify_voice.py both return 404, so the page is live on dev and invisible in prod, and the checker the page tells you to download does not exist yet.

That checker 404 is the one thing #844 shipped knowing it could not fix from inside itself. This is the PR that fixes it.

Note

The head of this PR is dev, so it carries whatever dev holds when it merges. #847 is a two-line fix to the same checker; if it lands in dev first, this promotion picks it up with no action needed here.

abhijaisrivastava15 and others added 9 commits September 3, 2026 18:21
…its checker

A voice call is selected by six conditions at once, and a span that misses
any one of them is absent from the Voice tab while remaining a perfectly
healthy trace. The text recipe cannot cover it: its gate set opens on
"at least one LLM span", which a pulled provider call never has.

New page, same contract as instrument-and-verify.mdx section for section,
plus public/fi_verify_voice.py: twelve gates, a conversation-shaped
preflight, and a capture that wraps the exporter rather than a span
processor, because traceai-livekit rewrites attributes inside export().
Both listings taught fi_span_kind="agent". The Voice tab lists a
conversation-typed span with no parent, so the page's own example produced
a call that appears in Traces and in no voice surface at all.
…e up the sidebar

The page listed Vapi and Retell. The product also pulls ElevenLabs,
Bland.ai and Twilio, each with its own parser, and the page itself was
unreachable from the sidebar. Adds both sidebar entries: this page under
Observability > Guides, and the new voice recipe beside Instrument and
Verify.
All three are 3024x1890 full-window dark, taken off the same run as the printed
gate output (call ID 1965f5ba, session call_355937e9c818), annotated to the same
house spec as the text recipe's three.

The list shot carries the point the page is really about: the row is the
conversation span itself, so opening it after session.start() costs you the row.
The detail shot says out loud why Duration, Latency, User / AI and Silence are
blank on a text-mode run. The attributes shot is the Attributes tab filtered to
transcript, which is the only place the three transcript keys are visible side
by side.

The old call-detail.png came off an earlier run and showed a different call ID
and a different answer than the transcript printed above it. Replaced.

The last line of the printed read-back is now the assistant's answer verbatim,
punctuation included, so the block and the screenshot say the same thing.
Run end to end against api.futureagi.com by an agent with no context but the
page URL and a key file. It reached GREEN on the first pass, and everything
below is something it had to work out for itself on the way.

- The Install listing never created `observability/__init__.py` or
  `observability/futureagi/__init__.py`, which the tree diagram lists but no
  command produced, so both track listings fail to import until you guess it.
- No virtualenv anywhere, while every command says `python`. System python on
  macOS is 3.9 and a bare `pip install` is refused outright, so the first
  listing on the page cannot run as written. One venv line fixes both.
- Step 6 ran `agent.py` with one ask and the result block below it reports the
  two-ask default: 4 turns, 16 spans, unreachable from the page's own command.
- `LLM_API_KEY` existed only inside `agent.py`. The export block that sets up
  the run never named it, and the prose only said "one model key".
- The example calls Groq by default through a variable named `OPENAI_BASE_URL`,
  which the page never said out loud.
- Two step cross-references were wrong: the conversation span is opened in
  Step 3, not Step 5, and the checker is downloaded in Install, not Step 1.
- `.fi_verify/` is relative to the working directory, so preflight and check
  run from different places fail with a reason that names neither. Now a
  troubleshooting row.
- Said which track the end-to-end walkthrough is, since it is SDK only.
Providers: only Vapi, Retell and Bland.ai are selectable in Connect a
provider. ElevenLabs is commented out of VOICE_CHAT_PROVIDERS and Twilio
never reaches the dropdown, so both come out of the page, the feature page
and its description.

Also: the Colab and GitHub badge row with code-repo-url, the sidebar item
matched to the page title, the card added to the platform hub with the
count bumped to 9, one forward link instead of two, a heading rename, and
the printed transcript trimmed before the dash.
The row read futureagi.preflight, which is not a span name that exists:
the span is futureagi.voice.preflight, and the trace list drops the middle
segment when it renders the name. Same project, same seven calls, probe
trace excluded, so the shot now shows one row per call as its caption says.
…y-voice

docs(cookbook): add the voice-agent instrument-and-verify recipe and its checker
The preflight span carried a hardcoded traceId and spanId, and fi_verify.py
carries the same pair. The span store replaces on
(project_id, observation_type, service_name, hour, trace_id, id), so two
probes in one project and hour collapse to one row: run both checkers
against the same project and only one preflight survives, which is exactly
what the trace-list capture caught. Fresh ids per send.
…ue-ids

fix(checker): give each voice preflight its own trace and span id

@khushalsonawat khushalsonawat left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@khushalsonawat
khushalsonawat merged commit d3beece into main Sep 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants