import json import os import tempfile import gradio as gr from utils import evaluate, report def scoring(tasks: list[dict]): return tasks def process_jsonl_file(jsonl_file_path: str, api_key: str): try: content = open(jsonl_file_path, "r", encoding="utf-8").readlines() json_data = [json.loads(line) for line in content] if api_key is not None and api_key != "": json_data = evaluate(json_data, api_key) html_content = report(tasks=json_data) file_name_with_ext = os.path.basename(jsonl_file_path) file_name, _ = os.path.splitext(file_name_with_ext) with tempfile.NamedTemporaryFile( delete=False, prefix=f"{file_name}-report-", suffix=".html", mode="w", encoding="utf-8" ) as temp_file: temp_file.write(html_content) output_file = temp_file.name return output_file, "" except Exception as e: return None, e # Gradioデモ with gr.Blocks() as demo: gr.Markdown("## ELYZA-tasks-100(-TV) セルフ評価ページ") jsonl_input = gr.File(label="JSONLファイルをアップロード") api_key_input = gr.Textbox(label="GeminiのAPIキー(スコアのセルフ評価を行う場合)", type="password") gr.Markdown("APIキーの発行は[こちら](https://aistudio.google.com/app/apikey)") process_button = gr.Button("レポートを作成") output_file = gr.File(label="セルフ評価レポート") output_text = gr.Textbox(label="システムメッセージ") process_button.click( process_jsonl_file, inputs=[jsonl_input, api_key_input], outputs=[output_file, output_text] ) demo.launch() if __name__ == "__main__": demo.launch()