Add post-recording LLM topic extraction #19
Labels
No labels
blocked:children
blocked:needs-decision
blocked:needs-human
blocked:verify-failed
bug
deferred
enhancement
feature-request
in-progress
needs-decompose
needs-triage
quickfix
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/transcriber#19
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent Issue
#6 — No speaker/subject assignment during live recording
#11 — Implementation plan
Description
Per the topic segmentation research (#10), the recommended approach is post-recording LLM topic extraction. After a recording completes, send the full transcript to an LLM to identify topic boundaries and labels, then write them as SessionTag entries for the user to review.
Scope
LLMTopicExtractorthat sends the full transcript to an LLM API (OpenAI/Anthropic/self-hosted, configured in BackendConfig)SubjectentitySessionTag(tagType=TYPE_SUBJECT, referenceId=subject.id, startOffsetMs, endOffsetMs)entriesAcceptance Criteria
Dependencies
⏸ Needs Decision
Blocking factors:
Scope: medium Risk: low Spec: aligned Type: feature
Summary: Adds post-recording LLM topic extraction that sends completed transcripts to an LLM and creates Subject + SessionTag(TYPE_SUBJECT) entries with a user review screen.
Suggestion: Implement as a clean domain layer: an LLMTopicExtractor interface (with an OpenAI-compatible HTTP client impl) injected via Hilt. Add an LLM API key field to the existing BackendConfig screen (or a dedicated LLM section) reusing SharedPreferences. Use a BottomSheet dialog for the topic review to avoid navigation complexity. The existing SubjectRepository and SessionTagRepository already provide all the persistence wiring needed.
Rationale: SCOPE=medium: ~5-7 files (new LLMTopicExtractor, new ViewModel, modified TranscriptDetailScreen, topic review dialog/UI, BackendConfig extension for LLM key) — not trivial but well-bounded. RISK=low: purely additive, no existing transcription/speech paths touched, the SessionTag #13 infrastructure is already in place with TYPE_SUBJECT and time-offset support. SPEC=aligned: the project's self-description as a 'semantic notebook for conversations' and the explicit recommendation in the #10 research doc both point to this approach. The Subject + SessionTag data model already models this perfectly.
Action: Review each blocking factor above. Remove
blocked:needs-decisionlabel to route back to triage.Fixed in commit. Closing.