Skip to content

Add an ElevenLabs conversation importer - #1253

Merged
strickvl merged 2 commits into
developfrom
feat/elevenlabs-importer
Oct 5, 2026
Merged

strickvl merged 2 commits into
developfrom
feat/elevenlabs-importer

Conversation

@strickvl

@strickvl strickvl commented Oct 2, 2026

Copy link
Copy Markdown
Collaborator

What changes

Add kitaru-elevenlabs-importer, a separately packaged, non-default importer for ElevenLabs Agents conversations. It parses full conversation exports, batches, and saved transcription webhook payloads, and fetches existing conversations through the ElevenLabs API. Each conversation becomes one Kitaru session with transcript events, matched tool calls/results, interruptions, source analysis, and reported usage.

Tool execution errors remain failed nodes; a successful lookup returning found: false remains successful. Transcript events are spans rather than invented LLM requests. Audio availability and an authenticated recording endpoint are retained in metadata; this change does not download audio or add playback or a replay runtime.

Reviewer Notes

Five sanitized fixtures come from real voice calls against a fictional test-shop agent. They cover a delivery lookup, two tools in one conversation, a deliberate tool error, interrupted speech, and repeated missing-order lookups. Original provider/account IDs, credentials, and audio are excluded. Inspect the tool joins by request ID, truthful usage accounting, stable deduplication, and bounded API pagination.

The package is wired into the plugin workspace, artifact smoke contract, release inventory, dynamic CI matrix, and the worker's first-party package list. It intentionally remains outside the server-default catalog and quickstart dependencies. Setup and limitations live in the package README until publication; public provider docs can follow the release.

Reproduction

uv sync --project plugins --frozen --all-packages
uv run --project plugins pytest -q -c plugins/pyproject.toml \
  plugins/tests/importers/test_elevenlabs.py
uv run --project plugins python - <<'PY'
from pathlib import Path
from kitaru_elevenlabs_importer import parse

fixture = Path("plugins/tests/importers/fixtures/elevenlabs/tool_error.json")
for session in parse(fixture.read_bytes(), {}):
    print(session.model_dump_json(indent=2))
PY

The error fixture imports as a completed conversation containing a failed get_order node. The package README also provides exact candidate-wheel registration and file/API import commands for a local server and worker.

Validation

  • Full plugin suite and default-catalog regressions: 2,197 passed, 2 skipped.
  • Release-inventory tests: 95 passed; worker process tests: 28 passed.
  • just check, plugin Ruff/ty checks, dependency audit, and full just plugin-artifact-smoke passed.
  • Live API fetching by explicit IDs and a paginated agent/time window returned and parsed all five recorded calls.
  • Isolated candidate server and clean wheel-installed worker: five file imports persisted 48 nodes, including seven tool calls and one failed tool; repeating the import skipped all five duplicates.
  • A worker API import also created all five real conversations using the candidate wheel's [api] extra. Candidate resolution was exercised with a dependency cutoff predating the new package.

Release context

New distribution metadata starts at 0.1.0, with the existing kitaru>=0.27.0 parser/fetch contract. Existing package versions and default pins are unchanged. The importer is intended for the next applicable plugin release; the worker package-inventory update is intended for the next applicable core release. Publication, PyPI Trusted Publisher setup, and any default-catalog inclusion remain separate release work. Local candidate-wheel verification does not claim that an unpublished package resolves from PyPI.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-05T10:57:15.280970Z ceb77d4 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3239ba51f7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

return
since, until = parsed.get_window()
params: dict[str, Any] = {
"call_start_after_unix": math.floor(since.timestamp()),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include conversations exactly at the lower time bound

When since falls on a whole second, this sends that same timestamp to ElevenLabs' strictly-after call_start_after_unix filter. A conversation starting exactly at since can therefore be omitted from the listing and never reach the exact since <= started_at < until check below. Use a coarse lower bound before the requested second (for example, floor(since) - 1) and retain the detail-response filter.

Useful? React with 👍 / 👎.

@strickvl
strickvl merged commit 4dd707e into develop Oct 5, 2026
38 checks passed
@strickvl
strickvl deleted the feat/elevenlabs-importer branch October 5, 2026 11:27
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