AutoSTAT / workflow /report /report_markdown.py
ElvisWang111's picture
Upload folder using huggingface_hub
342e4c4 verified
import io
import re
import base64
import plotly.io as pio
import streamlit as st
def write_markdown(agents):
report_agent = agents[-1]
report_obj = report_agent.load_report() # Reportcore
# ε›Ύεƒεˆ†ζžεˆ—θ‘¨
analysis_list = agents[2].summary_fig_analysis_list()
md_parts = []
def _process_node(node):
if node.type == "heading":
prefix = "#" * (node.level if node.level > 0 else 1)
md_parts.append(f"{prefix} {node.text}\n")
for ch in node.children:
_process_node(ch)
elif node.type == "paragraph":
parts = re.split(r'(\[FIG:\d+\])', node.text)
for part in parts:
part = part.strip()
if not part:
continue
if part.startswith("[FIG:") and part.endswith("]"):
idx = int(part[5:-1])
if 0 <= idx < len(analysis_list):
fig_obj = analysis_list[idx].get("figure")
try:
buf = io.BytesIO()
pio.write_image(fig_obj, buf, format="png")
data = buf.getvalue()
b64 = base64.b64encode(data).decode("utf-8")
# πŸ”Ή η›΄ζŽ₯ε†…ε΅Œ base64
md_parts.append(
f"![Figure {idx}](data:image/png;base64,{b64})\n"
)
except Exception as e:
md_parts.append(f"> **图像插ε…₯ε€±θ΄₯**: {e}\n")
else:
md_parts.append(f"{part}\n\n")
else: # root
for ch in node.children:
_process_node(ch)
_process_node(report_obj.root)
md_content = "\n".join(md_parts)
report_agent.save_markdown(md_content)
st.success("Markdown ζŠ₯ε‘Šη”ŸζˆζˆεŠŸ βœ…")