Merge missing keys from get_default_report_config into effective report_config so llm_* switches default on when absent. §5 embeds chart_matrix_prices_reviews per fine category (price + review-volume bars, Y=title) and replaces the wide matrix with a compact table. Matrix chart Y-labels allow longer titles (48 chars).
Made-with: Cursor
Add run_report_llm_chapters_demo.py to exercise matrix/price/sentiment/comment_groups/bridges and report supplement. generate_comment_group_summaries_llm now compacts per-group text in tiers so large multi-group runs stay under context limits with default max_tokens.
Made-with: Cursor
503 was misleading for missing OPENAI_API_KEY/LLM_BASE_URL and prompt-too-large;
log warning with job id. Keep 503 for unexpected ValueError.
Made-with: Cursor
Re-add MATRIX/COMMENT/PRICE_GROUPS_SYSTEM and generate_*_group_summaries_llm
removed in afe2748; align comment-group prompt with shop in attribution
prefix. Default report_config now includes the three llm_*_summaries flags.
Made-with: Cursor
Keep only REPORT_SYSTEM / SENTIMENT prompt tightening; remove dead
matrix/comment/price LLM helpers not referenced by views or jd_runner.
Made-with: Cursor
§8.5 brief lacks per-SKU review text; tighten REPORT_SYSTEM so lexicon
hits are described as cross-SKU substring stats and forbid quoted
fabricated examples. Align sentiment helper: no quoted specifics absent
from samples.
Made-with: Cursor
9cc8de9 accidentally rewrote jd_competitor_report.py and merged an oversized
report_charts.py. Reset both to f19d112 baseline; keep only obsolete cleanup
for removed global bar chart filenames.
Made-with: Cursor
Add suggest_scenario_groups_llm: single call with excerpt corpus + existing
label/triggers, parse scenarios JSON, merge into comment_scenario_groups
(up to 40) before build_competitor_brief. Record in keyword_suggest_llm.json
(schema_version 3). Skip with MA_SKIP_LLM_SCENARIO_SUGGEST. Update tests
and analysis view hint.
Made-with: Cursor
Regenerate-report (llm) used compact_brief_for_llm default 350k chars,
unlike other LLM steps (80k–100k), which can cause gateway timeouts or 5xx
surfacing as 502. chat_completion_text now attaches response body snippet
to HTTPError for easier diagnosis.
Made-with: Cursor