File size: 6,609 Bytes
8ef7e05 1f95e3f 8ef7e05 1f95e3f 8ef7e05 1f95e3f |
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
import gradio as gr
import utils
from api import AutoAPI, get_openai_api_key
import os, shutil
import json
FILE_DIR = os.path.dirname(os.path.abspath(__file__))
OUTPUT_DIR = os.path.join(os.path.dirname(FILE_DIR), "auto_gpt_workspace")
if not os.path.exists(OUTPUT_DIR):
os.mkdir(OUTPUT_DIR)
CSS = """
#chatbot {font-family: monospace;}
#files .generating {display: none;}
#files .min {min-height: 0px;}
"""
with gr.Blocks(css=CSS) as app:
with gr.Column() as setup_pane:
gr.Markdown(f""" # <center>🥳💬💕 - TalktoAI,随时随地,谈天说地!</center>
### <center>🤖 - 让有人文关怀的AI造福每一个人!AI向善,文明璀璨!TalktoAI - Enable the future!</center>
1. Duplicate this Space: <a href="https://huggingface.co/spaces/{os.getenv('SPACE_ID')}?duplicate=true"><img style="display: inline; margin-top: 0em; margin-bottom: 0em" src="https://bit.ly/3gLdBN6" alt="Duplicate Space" /></a> This will **NOT** work without duplication!
2. Enter your <a href="https://platform.openai.com/account/api-keys">OpenAI API Key</a> below.
3. Powered by [Auto-GPT](https://github.com/Significant-Gravitas/Auto-GPT). Thanks to [SigGravitas](https://github.com/Significant-Gravitas) and [Ali Abid](https://huggingface.co/aliabid94).
""")
with gr.Row():
open_ai_key = gr.Textbox(
value=get_openai_api_key(),
label="OpenAI API Key",
type="password",
)
gr.Markdown(
"3. Fill the values below, then click 'Start'. There are example values you can load at the bottom of this page."
)
with gr.Row():
ai_name = gr.Textbox(label="AI Name", placeholder="e.g. Entrepreneur-GPT")
ai_role = gr.Textbox(
label="AI Role",
placeholder="e.g. an AI designed to autonomously develop and run businesses with the sole goal of increasing your net worth.",
)
top_5_goals = gr.Dataframe(
row_count=(5, "fixed"),
col_count=(1, "fixed"),
headers=["AI Goals - Enter up to 5"],
type="array"
)
start_btn = gr.Button("Start", variant="primary")
with open(os.path.join(FILE_DIR, "examples.json"), "r") as f:
example_values = json.load(f)
gr.Examples(
example_values,
[ai_name, ai_role, top_5_goals],
)
with gr.Column(visible=False) as main_pane:
with gr.Row():
with gr.Column(scale=2):
chatbot = gr.Chatbot(elem_id="chatbot")
with gr.Row():
yes_btn = gr.Button("Yes", variant="primary", interactive=False)
consecutive_yes = gr.Slider(
1, 10, 1, step=1, label="Consecutive Yes", interactive=False
)
custom_response = gr.Textbox(
label="Custom Response",
placeholder="Press 'Enter' to Submit.",
interactive=False,
)
with gr.Column(scale=1):
gr.HTML(
lambda: f"""
Generated Files
<pre><code style='overflow-x: auto'>{utils.format_directory(OUTPUT_DIR)}</pre></code>
""", every=3, elem_id="files"
)
download_btn = gr.Button("Download All Files")
chat_history = gr.State([[None, None]])
api = gr.State(None)
def start(open_ai_key, ai_name, ai_role, top_5_goals):
auto_api = AutoAPI(open_ai_key, ai_name, ai_role, top_5_goals)
return gr.Column.update(visible=False), gr.Column.update(visible=True), auto_api
def bot_response(chat, api):
messages = []
for message in api.get_chatbot_response():
messages.append(message)
chat[-1][1] = "\n".join(messages) + "..."
yield chat
chat[-1][1] = "\n".join(messages)
yield chat
def send_message(count, chat, api, message="Y"):
if message != "Y":
count = 1
for i in range(count):
chat.append([message, None])
yield chat, count - i
api.send_message(message)
for updated_chat in bot_response(chat, api):
yield updated_chat, count - i
def activate_inputs():
return {
yes_btn: gr.Button.update(interactive=True),
consecutive_yes: gr.Slider.update(interactive=True),
custom_response: gr.Textbox.update(interactive=True),
}
def deactivate_inputs():
return {
yes_btn: gr.Button.update(interactive=False),
consecutive_yes: gr.Slider.update(interactive=False),
custom_response: gr.Textbox.update(interactive=False),
}
start_btn.click(
start,
[open_ai_key, ai_name, ai_role, top_5_goals],
[setup_pane, main_pane, api],
).then(bot_response, [chat_history, api], chatbot).then(
activate_inputs, None, [yes_btn, consecutive_yes, custom_response]
)
yes_btn.click(
deactivate_inputs, None, [yes_btn, consecutive_yes, custom_response]
).then(
send_message, [consecutive_yes, chat_history, api], [chatbot, consecutive_yes]
).then(
activate_inputs, None, [yes_btn, consecutive_yes, custom_response]
)
custom_response.submit(
deactivate_inputs, None, [yes_btn, consecutive_yes, custom_response]
).then(
send_message,
[consecutive_yes, chat_history, api, custom_response],
[chatbot, consecutive_yes],
).then(
activate_inputs, None, [yes_btn, consecutive_yes, custom_response]
)
def download_all_files():
shutil.make_archive("outputs", "zip", OUTPUT_DIR)
download_btn.click(download_all_files).then(None, _js=utils.DOWNLOAD_OUTPUTS_JS)
gr.Markdown(
""" ### <center>注意❗:请不要输入或生成会对个人以及组织造成侵害的内容,此程序仅供科研、学习使用。用户输入或生成的内容与程序开发者无关,请自觉合法合规使用,违反者一切后果自负。</center>
"""
)
gr.HTML('''
<div class="footer">
<p>🎶🖼️🎡 - It’s the intersection of technology and liberal arts that makes our hearts sing. - Steve Jobs
</p>
</div>
''')
app.queue(concurrency_count=20).launch(file_directories=[OUTPUT_DIR], show_error=True)
|