back to gradio 4.21 and fix chat

Former-commit-id: 4b920f24d35c73814b83d56373dd5c913bb57e49
This commit is contained in:
hiyouga 2024-04-04 02:07:20 +08:00
parent 54a4a8217a
commit f334b89616
5 changed files with 27 additions and 19 deletions

View File

@ -4,7 +4,7 @@ datasets>=2.14.3
accelerate>=0.27.2 accelerate>=0.27.2
peft>=0.10.0 peft>=0.10.0
trl>=0.8.1 trl>=0.8.1
gradio>=4.0.0 gradio>=4.0.0,<=4.21.0
scipy scipy
einops einops
sentencepiece sentencepiece

View File

@ -66,7 +66,7 @@ def check_dependencies() -> None:
require_version("accelerate>=0.27.2", "To fix: pip install accelerate>=0.27.2") require_version("accelerate>=0.27.2", "To fix: pip install accelerate>=0.27.2")
require_version("peft>=0.10.0", "To fix: pip install peft>=0.10.0") require_version("peft>=0.10.0", "To fix: pip install peft>=0.10.0")
require_version("trl>=0.8.1", "To fix: pip install trl>=0.8.1") require_version("trl>=0.8.1", "To fix: pip install trl>=0.8.1")
require_version("gradio>=4.0.0", "To fix: pip install gradio>=4.0.0") require_version("gradio>=4.0.0,<=4.21.0", "To fix: pip install gradio==4.21.0")
def count_parameters(model: torch.nn.Module) -> Tuple[int, int]: def count_parameters(model: torch.nn.Module) -> Tuple[int, int]:

View File

@ -92,23 +92,29 @@ class WebChatModel(ChatModel):
torch_gc() torch_gc()
yield ALERTS["info_unloaded"][lang] yield ALERTS["info_unloaded"][lang]
def predict( def append(
self, self,
chatbot: List[Tuple[str, str]], chatbot: List[List[Optional[str]]],
messages: Sequence[Dict[str, str]],
role: str, role: str,
query: str, query: str,
) -> Tuple[List[List[Optional[str]]], List[Dict[str, str]], str]:
return chatbot + [[query, None]], messages + [{"role": role, "content": query}], ""
def stream(
self,
chatbot: List[List[Optional[str]]],
messages: Sequence[Dict[str, str]], messages: Sequence[Dict[str, str]],
system: str, system: str,
tools: str, tools: str,
max_new_tokens: int, max_new_tokens: int,
top_p: float, top_p: float,
temperature: float, temperature: float,
) -> Generator[Tuple[List[Tuple[str, str]], List[Dict[str, str]]], None, None]: ) -> Generator[Tuple[List[List[Optional[str]]], List[Dict[str, str]]], None, None]:
chatbot.append([query, ""]) chatbot[-1][1] = ""
query_messages = messages + [{"role": role, "content": query}]
response = "" response = ""
for new_text in self.stream_chat( for new_text in self.stream_chat(
query_messages, system, tools, max_new_tokens=max_new_tokens, top_p=top_p, temperature=temperature messages, system, tools, max_new_tokens=max_new_tokens, top_p=top_p, temperature=temperature
): ):
response += new_text response += new_text
if tools: if tools:
@ -120,11 +126,11 @@ class WebChatModel(ChatModel):
name, arguments = result name, arguments = result
arguments = json.loads(arguments) arguments = json.loads(arguments)
tool_call = json.dumps({"name": name, "arguments": arguments}, ensure_ascii=False) tool_call = json.dumps({"name": name, "arguments": arguments}, ensure_ascii=False)
output_messages = query_messages + [{"role": Role.FUNCTION.value, "content": tool_call}] output_messages = messages + [{"role": Role.FUNCTION.value, "content": tool_call}]
bot_text = "```json\n" + tool_call + "\n```" bot_text = "```json\n" + tool_call + "\n```"
else: else:
output_messages = query_messages + [{"role": Role.ASSISTANT.value, "content": result}] output_messages = messages + [{"role": Role.ASSISTANT.value, "content": result}]
bot_text = result bot_text = result
chatbot[-1] = [query, bot_text] chatbot[-1][1] = bot_text
yield chatbot, output_messages yield chatbot, output_messages

View File

@ -35,13 +35,15 @@ def create_chat_box(
tools.input(check_json_schema, inputs=[tools, engine.manager.get_elem_by_id("top.lang")]) tools.input(check_json_schema, inputs=[tools, engine.manager.get_elem_by_id("top.lang")])
submit_btn.click( submit_btn.click(
engine.chatter.predict, engine.chatter.append,
[chatbot, role, query, messages, system, tools, max_new_tokens, top_p, temperature], [chatbot, messages, role, query],
[chatbot, messages, query],
).then(
engine.chatter.stream,
[chatbot, messages, system, tools, max_new_tokens, top_p, temperature],
[chatbot, messages], [chatbot, messages],
show_progress=True, )
).then(lambda: "", outputs=[query]) clear_btn.click(lambda: ([], []), outputs=[chatbot, messages])
clear_btn.click(lambda: ([], []), outputs=[chatbot, messages], show_progress=True)
return ( return (
chat_box, chat_box,

View File

@ -25,7 +25,7 @@ def create_infer_tab(engine: "Engine") -> Dict[str, "Component"]:
input_elems.update({infer_backend}) input_elems.update({infer_backend})
elem_dict.update(dict(infer_backend=infer_backend, load_btn=load_btn, unload_btn=unload_btn, info_box=info_box)) elem_dict.update(dict(infer_backend=infer_backend, load_btn=load_btn, unload_btn=unload_btn, info_box=info_box))
chat_box, chatbot, history, chat_elems = create_chat_box(engine, visible=False) chat_box, chatbot, messages, chat_elems = create_chat_box(engine, visible=False)
elem_dict.update(dict(chat_box=chat_box, **chat_elems)) elem_dict.update(dict(chat_box=chat_box, **chat_elems))
load_btn.click(engine.chatter.load_model, input_elems, [info_box]).then( load_btn.click(engine.chatter.load_model, input_elems, [info_box]).then(
@ -33,7 +33,7 @@ def create_infer_tab(engine: "Engine") -> Dict[str, "Component"]:
) )
unload_btn.click(engine.chatter.unload_model, input_elems, [info_box]).then( unload_btn.click(engine.chatter.unload_model, input_elems, [info_box]).then(
lambda: ([], []), outputs=[chatbot, history] lambda: ([], []), outputs=[chatbot, messages]
).then(lambda: gr.Column(visible=engine.chatter.loaded), outputs=[chat_box]) ).then(lambda: gr.Column(visible=engine.chatter.loaded), outputs=[chat_box])
return elem_dict return elem_dict