-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
Problem
The current topic summary model generates one TopicSummary per topic-per-meeting during SummarizeMeetingJob. This creates several problems:
- Waste — We pay for N LLM calls per topic but only display the most recent summary. All prior summaries are buried.
- Narrow view — The visible summary only reflects what happened at the last meeting, not the full arc of the topic across months of discussion.
- Staleness — The summary becomes outdated as soon as the next meeting happens. There's no mechanism to refresh it.
- No narrative — A topic discussed across 8 meetings should tell the story of how it evolved. Instead, residents just see a snapshot of meeting Bump turbo-rails from 2.0.20 to 2.0.21 #8.
Current Architecture
SummarizeMeetingJob → for each topic in meeting:
→ Ai::OpenAiService#analyze_topic_summary (reasoning model)
→ Ai::OpenAiService#render_topic_summary (reasoning model)
→ TopicSummary.create!(topic:, meeting:, content:)
Topic show page displays: topic.topic_summaries.order(created_at: :desc).first
Possible Directions
- Rolling summary per topic — One summary record per topic, updated incrementally when new meeting data arrives. Cheaper (update vs. full generation), always reflects the full picture.
- Periodic regeneration — Regenerate the topic summary on a schedule (weekly?) using all available meeting data. Simpler than incremental updates.
- Layered approach — Keep per-meeting summaries for the meeting page, but generate a separate "topic overview" summary that synthesizes across all meetings.
Each has trade-offs around cost, freshness, and complexity. Needs design work before implementation.
Constraints
- Must align with TOPIC_GOVERNANCE.md (fact/framing/sentiment separation in generation, even if not in display)
- Must be cost-conscious — reasoning model calls are expensive
- Must not fabricate continuity that doesn't exist in the source documents
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels