notes from ElevenLabs TTS experiment

未关闭
#603 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
35/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
活跃
技术栈
typescript
领域
api, backend, security

调研方向

首先定位 ElevenLabs TTS 渲染路径以及处理响应头的代码,然后跟踪当前如何表示持久工作和清理工作。完成的标准是在返回音频前保留 history-item-id,重试延迟删除,检查两个历史记录端点,在发生终止性失败时发出警报,并使用分离的读写作用域。

由索引模型根据 Issue 内容生成。

描述

enhancement

Alert text is user data. Design for minimizing what ElevenLabs ever holds; deletion is cleanup, not prevention.

enable_logging=false does not work. Measured: a ZRM request returned HTTP
200 and a history-item-id header — it wrote a history entry exactly like the
logging-on request, with no eligibility error. ZRM is gated to eligible
Enterprise accounts; on a normal key the parameter is accepted and silently does
not apply. Never treat a 200 as proof of non-retention.

Deleting the history item does work, but not immediately. Measured at +3 ms
after the audio response completed:

  • DELETE /v1/history/{id}404 history_item_not_found
  • GET /v1/history/{id}/audio200, audio present

The audio is live and fetchable on their servers before the history record is
addressable for deletion. A 404 on DELETE means "not there yet", not "nothing
stored" — never infer deletion from it.

Therefore: a delayed delete queue, not an inline delete.

  • Persist the history-item-id (response header) durably at render time,
    before returning audio to the user. It is the only handle; a crash between
    render and delete orphans data nothing can later remove.
  • Delete after a delay, with backoff retries on the not-found case.
  • Alert on terminal failures. A failed delete is silent and leaves live audio.
  • The delay is unmeasured — a 0/250/750/2000/5000 ms ladder was written but never
    confirmed against the live API. Measure it and set the first attempt past the
    window; don't assume.

Verification must handle inconsistent error shapes. DELETE-missing is 404,
but GET /v1/history/{id} on a missing item is 400 with
detail.status: invalid_id
(not 404). Check both the history item and its
/audio endpoint — in one run the audio outlived the record.

Keys need their own scopes for cleanup: speech_history_write to delete,
speech_history_read to verify. A TTS-only key gets 401 missing_permissions
and the cleanup silently no-ops. Provision this before launch.

Even a verified delete is weaker than ZRM. ElevenLabs states debugging and
moderation logs may retain related data, and backups may persist up to 30 days.
User-facing copy must say "deleted from history" — never "never stored."

主要语言
TypeScript
星标
5
派生
1
平均合并
18 小时 26 分钟
30 天内合并 PR
229

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

diffplug/dormouse 的其他 Issue

查看 diffplug/dormouse 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。