3
File size: 3,300 Bytes
f469bad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import gradio as gr
from pathlib import Path
import tempfile,datetime, json
from core import generate_report
import shutil

TITLE = "IR/ESG Report Generator(Hugging Face Space)"
DESC = ""
CSV/YAMLをアップロードしてIR/ESGレポート(HTML/PDF/DOCX)を生成します。
""

def run(company_yaml,financials_csv,esg_csv,use_llm,lang):
    if company_yamal is None or financials_csv is None or esg_csv is None:
        return "すべてのファイルをアップロードしてください。"None,None,None,None

    with tempfile.TemporaryDirectory() as td:
        cpath = Path(td)/"company_yaml";cpath.write_bytes(company_yaml.read())
        fpath = Path(td)/"financials_csv";fpath.write_bytes(financials_csv.read())
        epath = Path(td)/"esg_csv";epath.write_bytes(esg_csv.read())

        outdir = Path(td)/"out"
        outdir.mkdir(parents=True, exist_ok=True)

        llm=None
        if use_llm:
            try:
                from llm import OpenAILLM
                llm = OpenAILLM()
            except Exception as e:
                return f"LLM初期化エラー: {e}",None,None,None

        html,pdf,docx,meta_json = generate_report(
            company_yamal=str(cpath),
            financials_csv=str(fpath),
            esg_csv=str(epath),
            templates_dir="templates",
            template_name="report.html.j2",
            out_html=str(outdir/"report.html")
            out_pdf=str(outdir/"report.html")
            lang=lang,
            llm=llm
        )
        repo_tmp=Path("./tmp")
        repo_tmp.mkdir(exit_ok=True)
        ts = detatime.datetime.now().strftime("%Ym%d-%H%M%S")
        html_out=repo_tmp/f"report-{ts}.html"
        pdf_out=repo_tmp/f"report-{ts}.pdf"
        docx_out=repo_tmp/f"report-{ts}.docx"
        meta_out=repo_tmp/f"report-{ts}.json"
        shutil.copy(html,html_out)
        shutil.copy(pdf,pdf_out)
        shutil.copy(docx,docx_out)
        Path(meta_out).write_text(json.dumps(meta_json,ensure_ascii=False,indent=2),encoding="utf-8")

        return"生成が完了しました。",str(html_out),str(pdf_out),str(docx_out),str(meta_out)
    
with gr.Blocks(title=TITLE) as demo:
    gr.Markdown(f"#{TITLE}\n{DESC}")

    with gr.Row():
        company_yaml=gr.File(label="company.yaml(会社情報・年度等)",file_types=[".yaml",".yml"])
        financials_csv=gr.File(label="financials.csv(財務KPI)",file_types=[".csv"])
        esg_csv=gr.File(label="esg_metrics.csv(ESG指標)",file_types=[".csv"])

    with gr.Row():
        use_llm=gr.Chheckbox(label="LLMで要約/翻訳を行う(OPENAI_API_KE2 必須)",value=True)
        lang = gr.Dropdown(choices=["ja","en","zh","ko","de","fr"],value="ja",label="出力言語")

        run_btn=gr.Button("レポート生成")

        status =gr.Textbox(label="ステータス",interactive=False)
        html_file=gr.File(label="HTMLダウンロード")
        pdf_file=gr.File(label="PDFダウンロード")
        docx_file=gr.File(label="DOCXダウンロード")
        meta_file=gr.File(label="メタ情報(JSON)")

        run_btn.click(
            fu=run
            inputs=[company_yamal,finanxials_csv,esg_csv,use_llm,lang],
            outputs=[status,html_file,pdf_file,docx_file,meta_file]
        )

if__name__=="__main__":
    demo.launch()