FinSightAI / backend /gradio_ui /summary_tab.py
Aniket2003333333's picture
start
7248d39
Raw
History Blame Contribute Delete
1.95 kB
# 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(
"""
<div class="fs-modal-header">
<div>
<h2>Financial Summary</h2>
<p>Generate executive, financial, or risk summaries</p>
</div>
</div>
""",
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,
}