Spaces:
Sleeping
Sleeping
File size: 8,048 Bytes
687bbdc 3e5b539 687bbdc |
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 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
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() |