Copyright and licensing
© 2026 Scott L. All rights reserved except as stated below.
Except where otherwise noted, original website text, catalog descriptions, metadata compilation, and editorial materials created for the Don P Archive are licensed under the Creative Commons Attribution 4.0 International License.
This license does not apply to audio recordings, transcripts of Don P’s talks, Alcoholics Anonymous literature, trademarks, photographs, or other third-party materials. Rights in those materials remain with their respective rights holders, including Don’s estate where applicable.
Recordings individually verified as public domain will be identified with the Creative Commons Public Domain Mark 1.0. No public-domain status should be inferred when that mark is absent.
When reusing licensed site materials, attribute “Don P Archive,” link to this website, and include the CC BY 4.0 license link.
From recordings to retrieval
The archive was transcribed with Python and faster-whisper, using the Whisper base.en model to produce timestamped Markdown drafts. Transcripts are indexed with SQLite FTS5 for keyword search and 768-dimensional Cloudflare Workers AI embeddings stored in Vectorize for semantic retrieval. “Ask Don” combines these results and normally uses OpenAI’s Responses API to generate transcript-grounded answers, with Cloudflare Workers AI available as an automatic fallback; AI supports transcription, retrieval, and interpretation, while the original recordings and transcripts remain the archival sources.
A hybrid retrieval pipeline
Ask Don is a server-side retrieval-augmented generation system. The latest question drives retrieval, while up to 12 recent user and assistant messages supply conversational context for the answer.
How the persona was created
Ask Don was created as an AI interpretation, not through voice cloning or model fine-tuning. Recurring themes, stories, language, and recovery principles from the 82 recordings were distilled into a written persona guide and 20 tagged context summaries. Together they define the voice, Big Book framing, response style, attribution, and safety boundaries. At answer time, these curated materials are paired with question-specific timestamped excerpts so interpretation remains separate from the archival evidence.
How each answer is produced
-
Index the transcript corpus
Timestamped transcript segments and recording metadata live in D1. Their text is mirrored into a SQLite FTS5 virtual table, while 768-dimensional
clsembeddings from Workers AI’s@cf/baai/bge-base-en-v1.5model are stored in Vectorize. -
Search in parallel
The Worker embeds the question and requests the 12 closest Vectorize matches. At the same time, normalized query terms run against FTS5, which returns up to 12 passages ordered by BM25 relevance.
-
Fuse and diversify
Reciprocal-rank fusion combines semantic and keyword positions, with a small weighting adjustment for the FTS5 results. Neighboring passages from the same recording are de-duplicated before the five strongest excerpts are selected. Either retrieval path can fail independently without preventing the other from supplying context.
-
Build grounded instructions
Each selected excerpt carries its recording ID and timestamp into the prompt. The Worker combines those raw passages with up to five curated cross-transcript context cards and explicit persona, attribution, recovery, medical-safety, crisis, privacy, and copyright boundaries.
-
Generate the answer
The Worker calls OpenAI’s
POST /v1/responsesendpoint withgpt-5.6-luna, the grounded instructions, recent conversation messages, a 750-token output ceiling, reasoning effort set tonone, and the session UUID as a safety identifier. API-side response storage is disabled withstore: false. If that request fails or times out, the Worker automatically retries generation with a Cloudflare Workers AI model. -
Retain an auditable record
After a successful answer, the site writes the session ID, question, answer, grounding references, model name, and timestamp to a private D1 table. That archive has no public read route and omits IP addresses, browser headers, and geographic metadata. A storage failure does not withhold an otherwise successful answer.
Built for the archive
The private repository is hosted on GitHub and supports GitHub Codespaces and Cloudflare Workers Builds. The TypeScript site is deployed with Wrangler to a single production Cloudflare Worker, using D1 for structured data, R2 for audio, Vectorize for semantic search, and Cloudflare’s global network for hosting.
Site credit
Scott L architected and built the site.