Spaces:
Runtime error
Runtime error
import os | |
import gradio as gr | |
from datetime import datetime, timezone | |
from config import check_openai_api_key | |
from agent.research_agent import ResearchAgent | |
from agent.toolkits import english_polishing | |
from agent import prompts | |
from statics.style import * | |
check_openai_api_key() | |
report_history_buffer = "" | |
report_history_tasks = [] | |
polish_history_buffer = "" | |
REPORT_HISTORY_FILE_PATH = "./statics/report_history_buffer.md" | |
def load_report_history(): | |
global report_history_buffer | |
if os.path.exists(REPORT_HISTORY_FILE_PATH): | |
with open(REPORT_HISTORY_FILE_PATH, "r") as f: | |
report_history_buffer = f.read() | |
else: | |
open(REPORT_HISTORY_FILE_PATH, "w").close() | |
return report_history_buffer | |
def run_agent(task, agent_type, report_type, system_prompt, extra_prompt): | |
global report_history_tasks | |
report_history_tasks.append(task) | |
assistant = ResearchAgent(task, agent_type, system_prompt) | |
yield from assistant.write_report(report_type, extra_prompt) | |
with gr.Blocks(theme=gr.themes.Base(), | |
title="AI Research Assistant", | |
css=css) as demo: | |
gr.HTML(top_bar) | |
with gr.Tab(label="🔦Report"): | |
with gr.Column(): | |
gr.HTML(report_html) | |
report = gr.Markdown(value=" Report will appear here...", | |
elem_classes="output") | |
with gr.Row(): | |
agent_type = gr.Dropdown(label="# Agent Type", | |
value="Default Agent", | |
interactive=True, | |
allow_custom_value=False, | |
choices=["Default Agent", | |
"Business Analyst Agent", | |
"Finance Agent", | |
"Travel Agent", | |
"Academic Research Agent", | |
"Computer Security Analyst Agent", | |
"Clinical Medicine Agent", | |
"Basic Medicine Agent", | |
"Social Science Research Agent"]) | |
report_type = gr.Dropdown(label="# Report Type", | |
value="Research Report", | |
interactive=True, | |
allow_custom_value=False, | |
choices=["Research Report", | |
"Resource Report", | |
"Outline Report"]) | |
input_box = gr.Textbox(label="# What would you like to research next?", placeholder="Enter your question here") | |
with gr.Accordion("# Advanced Settings", open=False): | |
system_prompt = gr.TextArea(label="Agent Prompt", | |
value=prompts.generate_agent_role_prompt(agent_type.value), | |
interactive=True, | |
show_copy_button=True) | |
report_type_prompt = gr.TextArea(label="Report Prompt (not editable)", | |
value=prompts.generate_report_prompt(f'{input_box.value}', report_type.value), | |
interactive=False, | |
show_copy_button=True) | |
extra_prompt = gr.TextArea(label="Extra Prompt", interactive=True, show_copy_button=True) | |
def on_select_agent(evt: gr.SelectData): | |
return f"{prompts.generate_agent_role_prompt(evt.value)}" | |
def on_select_input_box(input, report_type): | |
return f"{prompts.generate_report_prompt(f'{input}', report_type)}" | |
def on_select_report_type(evt: gr.SelectData, input_box): | |
return f"{prompts.generate_report_prompt(f'{input_box}', evt.value)}" | |
agent_type.select(on_select_agent, None, system_prompt) | |
input_box.input(on_select_input_box, inputs=[input_box, report_type], outputs=report_type_prompt) | |
report_type.select(on_select_report_type, inputs=[input_box], outputs=report_type_prompt) | |
submit_btn = gr.Button("Generate Report", elem_id="primary-btn") | |
gr.Examples(["Should I invest in the Large Language Model industry in 2023?", | |
"Is it advisable to make investments in the electric car industry during the year 2023?", | |
"What constitutes the optimal approach for investing in the Bitcoin industry during the year 2023?", | |
"What are the most recent advancements in the domain of superconductors as of 2023?"], | |
inputs=input_box) | |
with gr.Accordion(label="# Report History", elem_id="history", open=False): | |
report_history = gr.Markdown(value=load_report_history) | |
def store_report(content): | |
global report_history_tasks, report_history_buffer | |
report_task = report_history_tasks[-1][:min(100, len(report_history_tasks[-1]))] | |
time_stamp = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S %p") | |
new_report = f'<details> \ | |
<summary>UTC {time_stamp}: \ | |
<i>{report_task}</i></summary> \ | |
<div id="history_box">{content}</div> \ | |
</details>' | |
report_history_buffer += new_report | |
with open("./statics/report_history_buffer.md", "a+") as f: | |
f.write(new_report) | |
return report_history_buffer | |
submit_btn.click(run_agent, inputs=[input_box, agent_type, report_type, system_prompt, extra_prompt], outputs=report)\ | |
.then(store_report, inputs=[report], outputs=report_history) | |
with gr.Tab("✒️English Polishing"): | |
gr.HTML(english_polishing_html) | |
polished_result = gr.Markdown(" Polished result will appear here...", elem_classes="output") | |
sentences = gr.Textbox(label="# What would you like to polish?", placeholder="Enter your sentence here") | |
with gr.Row(): | |
polish_btn = gr.Button("Polish", elem_id="primary-btn") | |
with gr.Accordion(label="# Polishing History", elem_id="history", open=False): | |
polish_history = gr.Markdown() | |
def store_polished_result(origin, result): | |
global polish_history_buffer | |
polish_history_buffer += f'<details> \ | |
<summary><i>{origin}</i></summary> \ | |
<div id="history_box">{result}</div> \ | |
</details>' | |
return polish_history_buffer | |
polish_btn.click(english_polishing, inputs=[sentences], outputs=polished_result) \ | |
.then(store_polished_result, inputs=[sentences, polished_result], outputs=polish_history) | |
with gr.Tab("📑Literature Review"): | |
gr.HTML(literature_review_html) | |
demo.queue().launch() |