# summary_tab.py """Financial summary panel.""" from __future__ import annotations import gradio as gr from core.bootstrap import get_summarizer_service SUMMARY_TYPES = [ ("Financial", "financial"), ("Executive", "executive"), ("Risk", "risk"), ] TYPE_MAP = {label: value for label, value in SUMMARY_TYPES} def run_summary(document_id: str | None, summary_type: str) -> str: if not document_id: return "Select a document first." result = get_summarizer_service().summarize( document_id=document_id, summary_type=summary_type, ) if "error" in result: return f"**Error:** {result['error']}" return result.get("summary", "") def build_summary_panel() -> dict: with gr.Column(elem_classes=["fs-modal-card", "fs-summary-card"]): gr.HTML( """

Financial Summary

Generate executive, financial, or risk summaries

""", padding=False, ) doc_dropdown = gr.Dropdown(label="Document", choices=[], interactive=True) summary_type = gr.Radio( label=None, show_label=False, choices=[label for label, _ in SUMMARY_TYPES], value=SUMMARY_TYPES[0][0], elem_classes=["fs-pill-radio"], ) run_btn = gr.Button("Generate Summary", elem_classes=["fs-gold-btn", "fs-full-btn"]) output = gr.Markdown(label=None, elem_classes=["fs-summary-output"]) run_btn.click( lambda doc_id, label: run_summary(doc_id, TYPE_MAP.get(label, "financial")), inputs=[doc_dropdown, summary_type], outputs=[output], queue=True, ) return { "doc_dropdown": doc_dropdown, "summary_type": summary_type, "output": output, "run_btn": run_btn, }