3.2 KiB
Design: Configurable Summary Length
Date: 2026-03-26 Scope: Add a user setting to control summary detail level (court/moyen/detaille)
Context
Currently, article summaries are fixed at 4-5 lines based on 500 chars of article body. Users want longer summaries to avoid opening articles when the summary is sufficient.
1. New setting: summary_length
Column: summary_length INTEGER NOT NULL DEFAULT 3 in the settings table.
Values and their effect on the classify prompt:
| Value | Label | Summary instruction | Body snippet size |
|---|---|---|---|
| 1 | Court | "un resume de 3 a 4 lignes" | 500 chars |
| 2 | Moyen | "un resume de 6 a 8 lignes" | 2000 chars |
| 3 | Detaille | "un resume de 12 a 15 lignes" | 4000 chars (full scrape) |
Default: 3 (Detaille) — generates comprehensive summaries by default.
Validation: value must be 1, 2, or 3.
2. Prompt change
build_article_classify_prompt receives summary_length: i32 as a new parameter. It adjusts the prompt instruction:
- Current:
"Genere un titre clair et un resume de 4 a 5 lignes." - New: dynamically selects the line count based on
summary_length
The body snippet parameter (body_snippet) is already passed by the caller — the caller controls the truncation length.
3. Pipeline change
In synthesis.rs, the body snippet truncation in both Phase 1 and Phase 2 Brave classify loops changes from:
let body_snippet: String = body_text.chars().take(500).collect();
To a dynamic value based on settings.summary_length:
let snippet_size = match settings.summary_length {
1 => 500,
2 => 2000,
_ => 4000,
};
let body_snippet: String = body_text.chars().take(snippet_size).collect();
4. Frontend
A slider in Settings with 3 positions labeled "Court", "Moyen", "Detaille". Default position: "Detaille" (rightmost).
Placed in the generation settings section, near max_items_per_category.
5. Files to modify
- Create:
backend/migrations/20260326000023_add_summary_length.sql - Modify:
backend/src/models/settings.rs— addsummary_lengthtoUserSettings,UpdateSettingsRequest,Default, validation (1-3) - Modify:
backend/src/db/settings.rs— addsummary_lengthtoSettingsRow, queries, binds - Modify:
backend/src/services/prompts.rs—build_article_classify_prompttakessummary_length, adjusts instruction - Modify:
backend/src/services/synthesis.rs— dynamic snippet size based onsettings.summary_length - Modify:
frontend/src/types.ts— addsummary_length: numbertoUserSettingsandDEFAULT_SETTINGS - Modify:
frontend/src/pages/Settings.tsx— add slider component - Modify:
frontend/src/i18n/fr.ts— labels for slider - Modify:
CLAUDE.md— migration count - Modify:
backend/src/services/prompts.rstests — updatetest_settings()fixture, add test for summary_length - Modify:
backend/tests/api_syntheses_test.rs— addsummary_lengthto settings payload - Modify:
backend/tests/pipeline_test.rs— addsummary_lengthto settings payload - Modify:
e2e/tests/generation-live.spec.ts— addsummary_lengthto settings payload