nanfangwuyu21's picture
change gradio api base
3e5b539
import gradio as gr
import requests
# API_BASE = "http://localhost:8000"
API_BASE = ""
def get_texts(lang):
if lang == "中文":
return {
"title": "小说生成系统",
"generate_tab": "生成章节",
"change_tab": "修改章节",
"get_all_tab": "查看所有章节",
"get_one_tab": "查阅单章",
"input_text": "请写下你想要写的新章节包含什么样的故事情节?",
"change_text": "请输入修改后的内容",
"chapter_num": "章节编号",
"generate_button": "生成",
"change_button": "修改",
"get_all_button": "查看全部",
"get_one_button": "查阅",
"output": "输出结果",
"lang_label": "选择界面语言",
"view_one_dropdown": "章节编号",
"view_one_output": "章节内容",
"view_one_submit": "提交修改",
"view_one_edit": "编辑",
"view_one_status": "修改状态",
}
else:
return {
"title": "AI Novel Generator",
"generate_tab": "Generate Chapter",
"change_tab": "Edit Chapter",
"get_all_tab": "View All",
"get_one_tab": "View One",
"input_text": "Please write down what kind of storyline you would like the new chapter you are writing to contain?",
"change_text": "Enter new content to replace",
"chapter_num": "Chapter Number",
"generate_button": "Generate",
"change_button": "Update",
"get_all_button": "Get All",
"get_one_button": "Get One",
"output": "Output",
"lang_label": "Select UI language",
"view_one_dropdown": "Chapter Number",
"view_one_output": "Chapter Content",
"view_one_submit": "Submit Change",
"view_one_edit": "Edit chapter",
"view_one_status": "Change Status",
}
# ==== API call functions ====
def generate(text):
response = requests.post(f"{API_BASE}/generate", json={"query": text})
return response.json().get("chapter", "")
def change(chapter_num, new_content):
response = requests.post(f"{API_BASE}/change", json={
"chapter": new_content,
"chapter_num": chapter_num
})
return response.json().get("message", "Success")
def get_all():
response = requests.post(f"{API_BASE}/get_all")
all_chapters = response.json().get("all_chapters", [])
chapter_count = len(all_chapters)
options = [f"{i+1}" for i in range(chapter_count)]
return options, all_chapters
def get_one(chapter_num):
response = requests.post(f"{API_BASE}/get_one", json={"chapter_num": chapter_num})
return response.json().get("content", response.json().get("error", "Chapter not found."))
def get_one_cached(chapter_num, cached_chapters):
try:
print("load_from_cache")
return cached_chapters[int(chapter_num) - 1]["content"]
except (IndexError, ValueError, TypeError):
print("load_from_backend")
return get_one(chapter_num)
def on_generate(prompt):
chapter = generate(prompt)
options, chapters = get_all()
return chapter, gr.update(choices=options, value=options[-1]), chapters
def on_load():
options, chapters = get_all()
return gr.update(choices=options, value=options[-1]), chapters
def on_select_chapter(chapter_num, cached):
chapter = get_one_cached(chapter_num, cached)
return chapter, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
def on_edit():
return gr.update(interactive=True), gr.update(visible=True), gr.update(visible=False)
def on_submit_edit(chapter_num, new_content):
msg = change(chapter_num, new_content)
return gr.update(interactive=False), gr.update(visible=False), gr.update(visible=True), msg
# ==== Gradio UI ====
def build_ui():
with gr.Blocks() as demo:
def update_labels(lang):
txt = get_texts(lang)
return (
gr.update(value=txt["title"]),
gr.update(label=txt["input_text"]), gr.update(label=txt["output"]),
gr.update(value=txt["generate_button"]),
gr.update(label=txt["lang_label"]),
gr.update(label=txt["generate_tab"]),
gr.update(label=txt["view_one_dropdown"]),
gr.update(label=txt["view_one_output"]),
gr.update(value=txt["view_one_submit"]),
gr.update(value=txt["view_one_edit"]),
gr.update(label=txt["view_one_status"]),
gr.update(label=txt["get_one_tab"]),
)
txt = get_texts("English")
title = gr.Markdown(f"# {txt['title']}")
lang_dropdown = gr.Dropdown(choices=["English", "中文"], value="English", label=txt["lang_label"])
cached_chapters = gr.State([])
with gr.Tab(txt["generate_tab"]) as generate_tab:
input_box = gr.Textbox(label=txt["input_text"])
output_box = gr.Textbox(label=txt["output"])
generate_btn = gr.Button(txt["generate_button"])
# generate_btn.click(fn=generate, inputs=input_box, outputs=output_box)
# with gr.Tab(txt["change_tab"]) as change_tab:
# chapter_num = gr.Number(label=txt["chapter_num"])
# new_content = gr.Textbox(label=txt["change_text"])
# result = gr.Textbox(label=txt["output"])
# change_btn = gr.Button(txt["change_button"])
# change_btn.click(fn=change, inputs=[chapter_num, new_content], outputs=result)
# with gr.Tab(txt["get_all_tab"]) as get_all_tab:
# result_all = gr.Textbox(label=txt["output"], lines=20)
# all_btn = gr.Button(txt["get_all_button"])
# all_btn.click(fn=get_all, outputs=result_all)
# with gr.Tab(txt["get_one_tab"]) as get_one_tab:
# one_chapter_num = gr.Number(label=txt["chapter_num"])
# one_result = gr.Textbox(label=txt["output"], lines=10)
# one_btn = gr.Button(txt["get_one_button"])
# one_btn.click(fn=get_one, inputs=one_chapter_num, outputs=one_result)
with gr.Tab("View One") as view_one_tab:
view_one_dropdown = gr.Dropdown(label=txt["view_one_dropdown"], choices=[], visible=True)
view_one_output = gr.Textbox(label=txt["view_one_output"], lines=10, interactive=False)
view_one_submit = gr.Button(txt["view_one_submit"], visible=False)
view_one_edit = gr.Button(txt["view_one_edit"], visible=True)
view_one_status = gr.Textbox(label=txt["view_one_status"], visible=False)
view_one_dropdown.change(on_select_chapter, inputs=[view_one_dropdown, cached_chapters], outputs=[view_one_output, view_one_submit, view_one_edit, view_one_status])
view_one_edit.click(on_edit, outputs=[view_one_output, view_one_submit, view_one_edit])
view_one_submit.click(on_submit_edit, inputs=[view_one_dropdown, view_one_output], outputs=[view_one_output, view_one_submit, view_one_edit, view_one_status])
generate_btn.click(fn=on_generate, inputs=input_box,
outputs=[output_box, view_one_dropdown, cached_chapters])
demo.load(lambda: on_load(), outputs=[view_one_dropdown, cached_chapters])
lang_dropdown.change(
fn=update_labels,
inputs=lang_dropdown,
outputs=[
title,
input_box, output_box, generate_btn,
lang_dropdown,
generate_tab,
view_one_dropdown,
view_one_output,
view_one_submit,
view_one_edit,
view_one_status,
view_one_tab,
]
)
# demo.launch()
return demo
if __name__ == "__main__":
ui = build_ui()
ui.launch()