Add PeggyPad phase 3: summaries (minutes) via a user-chosen LLM #5

Merged
florian merged 1 commit from phase-3-summaries into main 2026-10-05 13:47:34 +02:00
Owner

Settings gain a Summaries section for an OpenAI-compatible
chat-completions endpoint (Mistral, OpenAI, Groq, OpenRouter, Ollama,
LM Studio, vLLM), a model, an editable system prompt and a length limit.
The default prompt (res/raw/default_summary_prompt.md) is a professional
minute-taker; it is only stored once the user changes it.

The speech-to-text key is reused when the summary endpoint has the same
origin; a separate key can override it and is bound to its own origin.
Key binding moves into a shared OriginBoundKey, and all requests go
through one Http helper that refuses redirects and closes on cancel.

Recordings get a Participants field (Room v3, auto-migrated) that is
passed to the model with title, date, duration and notes. Summarize runs
in the background service at temperature 0.2; transcripts longer than
the limit are summarised in parts by time and then merged. The result is
saved as .summary.md next to the transcript with a provenance
comment, rendered in the app (headings, lists, tables), shareable, and
covered by the delete dialog.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

Settings gain a Summaries section for an OpenAI-compatible chat-completions endpoint (Mistral, OpenAI, Groq, OpenRouter, Ollama, LM Studio, vLLM), a model, an editable system prompt and a length limit. The default prompt (res/raw/default_summary_prompt.md) is a professional minute-taker; it is only stored once the user changes it. The speech-to-text key is reused when the summary endpoint has the same origin; a separate key can override it and is bound to its own origin. Key binding moves into a shared OriginBoundKey, and all requests go through one Http helper that refuses redirects and closes on cancel. Recordings get a Participants field (Room v3, auto-migrated) that is passed to the model with title, date, duration and notes. Summarize runs in the background service at temperature 0.2; transcripts longer than the limit are summarised in parts by time and then merged. The result is saved as <audio>.summary.md next to the transcript with a provenance comment, rendered in the app (headings, lists, tables), shareable, and covered by the delete dialog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Settings gain a Summaries section for an OpenAI-compatible
chat-completions endpoint (Mistral, OpenAI, Groq, OpenRouter, Ollama,
LM Studio, vLLM), a model, an editable system prompt and a length limit.
The default prompt (res/raw/default_summary_prompt.md) is a professional
minute-taker; it is only stored once the user changes it.

The speech-to-text key is reused when the summary endpoint has the same
origin; a separate key can override it and is bound to its own origin.
Key binding moves into a shared OriginBoundKey, and all requests go
through one Http helper that refuses redirects and closes on cancel.

Recordings get a Participants field (Room v3, auto-migrated) that is
passed to the model with title, date, duration and notes. Summarize runs
in the background service at temperature 0.2; transcripts longer than
the limit are summarised in parts by time and then merged. The result is
saved as <audio>.summary.md next to the transcript with a provenance
comment, rendered in the app (headings, lists, tables), shareable, and
covered by the delete dialog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
florian deleted branch phase-3-summaries 2026-10-05 13:47:34 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
florian/peggypad!5
No description provided.