orgoflu commited on
Commit
e904b23
ยท
verified ยท
1 Parent(s): 68b1f62

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -23
app.py CHANGED
@@ -1,13 +1,16 @@
 
1
  import gradio as gr
 
2
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextGenerationPipeline
3
  import torch
4
- from functools import lru_cache
5
 
6
  MODEL_NAME = "openbmb/MiniCPM-V-4"
7
 
8
  @lru_cache(maxsize=1)
9
  def load_pipeline():
10
- tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True)
 
 
11
  model = AutoModelForCausalLM.from_pretrained(
12
  MODEL_NAME,
13
  torch_dtype=torch.float16,
@@ -20,32 +23,47 @@ def load_pipeline():
20
  device=model.device.index if torch.cuda.is_available() else -1
21
  )
22
 
23
- def generate(prompt: str, max_length: int, top_k: int, top_p: float):
24
- pipe = load_pipeline()
25
- output = pipe(
 
 
 
 
 
 
26
  prompt,
27
- max_length=max_length,
28
  do_sample=True,
29
- top_k=top_k,
30
- top_p=top_p,
31
  num_return_sequences=1
32
- )
33
- return output[0]["generated_text"]
 
 
 
 
34
 
35
  with gr.Blocks() as demo:
36
- gr.Markdown("# MiniCPM-V-4 Text Generation Demo")
37
-
38
- prompt_input = gr.Textbox(label="Prompt", lines=2, placeholder="์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜์„ธ์š”...")
39
- max_len = gr.Slider(10, 512, value=100, step=10, label="Max Length")
40
- topk = gr.Slider(1, 100, value=50, step=1, label="Top-k")
41
- topp = gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="Top-p")
42
- generate_btn = gr.Button("Generate")
43
- output_box = gr.Textbox(label="Generated Text", lines=5)
44
-
45
- generate_btn.click(
46
- fn=generate,
47
- inputs=[prompt_input, max_len, topk, topp],
48
- outputs=output_box
 
 
 
 
 
49
  )
50
 
51
  demo.launch()
 
1
+ import os
2
  import gradio as gr
3
+ from functools import lru_cache
4
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextGenerationPipeline
5
  import torch
 
6
 
7
  MODEL_NAME = "openbmb/MiniCPM-V-4"
8
 
9
  @lru_cache(maxsize=1)
10
  def load_pipeline():
11
+ tokenizer = AutoTokenizer.from_pretrained(
12
+ MODEL_NAME, trust_remote_code=True
13
+ )
14
  model = AutoModelForCausalLM.from_pretrained(
15
  MODEL_NAME,
16
  torch_dtype=torch.float16,
 
23
  device=model.device.index if torch.cuda.is_available() else -1
24
  )
25
 
26
+ def respond(user_message, chat_history):
27
+ # ์ด์ „ ๋Œ€ํ™”์™€ ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ํ•˜๋‚˜์˜ prompt๋กœ ํ•ฉ์นจ
28
+ history_text = ""
29
+ for u, a in chat_history:
30
+ history_text += f"็”จๆˆท๏ผš{u}\nๅŠฉ็†๏ผš{a}\n"
31
+ prompt = history_text + f"็”จๆˆท๏ผš{user_message}\nๅŠฉ็†๏ผš"
32
+
33
+ pipeline = load_pipeline()
34
+ output = pipeline(
35
  prompt,
36
+ max_length=history_text.count("\n") + len(user_message.split()) + 50,
37
  do_sample=True,
38
+ top_k=50,
39
+ top_p=0.95,
40
  num_return_sequences=1
41
+ )[0]["generated_text"]
42
+
43
+ # ๋ชจ๋ธ์ด ๋ฐ˜ํ™˜ํ•œ ์ „์ฒด ํ…์ŠคํŠธ์—์„œ ์–ด์‹œ์Šคํ„ดํŠธ ์‘๋‹ต ๋ถ€๋ถ„๋งŒ ์ถ”์ถœ
44
+ assistant_reply = output.split("ๅŠฉ็†๏ผš", 1)[-1].strip()
45
+ chat_history.append((user_message, assistant_reply))
46
+ return chat_history
47
 
48
  with gr.Blocks() as demo:
49
+ gr.Markdown("## MiniCPM-V-4 Chatbot Demo")
50
+
51
+ chatbot = gr.Chatbot(label="๋Œ€ํ™”")
52
+ user_input = gr.Textbox(
53
+ placeholder="๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”...",
54
+ lines=1
55
+ )
56
+ clear_btn = gr.Button("์ดˆ๊ธฐํ™”")
57
+
58
+ user_input.submit(
59
+ fn=respond,
60
+ inputs=[user_input, chatbot],
61
+ outputs=chatbot
62
+ )
63
+ clear_btn.click(
64
+ lambda: [],
65
+ None,
66
+ chatbot
67
  )
68
 
69
  demo.launch()