cody82 commited on
Commit
80ceb8c
·
verified ·
1 Parent(s): b950826

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -21
app.py CHANGED
@@ -1,42 +1,48 @@
1
  import torch
2
  import gradio as gr
3
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
4
 
5
- model_id = "google/flan-t5-base" # можно flan-t5-large, если хватает памяти
6
  tokenizer = AutoTokenizer.from_pretrained(model_id)
7
- model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
8
  device = "cuda" if torch.cuda.is_available() else "cpu"
9
  model.to(device)
10
 
11
- context = """
12
- Университет Иннополис был основан в 2012 году. Это современный вуз в России,
13
- специализирующийся на IT и робототехнике, расположенный в городе Иннополис, Татарстан.
14
- """
15
 
16
- def respond(message, history=None):
17
  if history is None:
18
  history = []
19
 
20
- prompt = (
21
- "Используя следующий контекст, ответь на вопрос четко и кратко.\n"
22
- f"Контекст: {context}\n"
23
- f"Вопрос: {message}\n"
24
- "Ответ:"
25
- )
26
 
27
  inputs = tokenizer(prompt, return_tensors="pt").to(device)
28
 
29
  with torch.no_grad():
30
  outputs = model.generate(
31
  **inputs,
32
- max_new_tokens=100,
 
 
33
  do_sample=False,
34
- eos_token_id=tokenizer.eos_token_id
35
  )
36
- answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
37
 
38
- history.append((message, answer))
39
- return history
40
 
41
- iface = gr.ChatInterface(fn=respond, title="Innopolis Q&A")
42
- iface.launch()
 
 
 
 
 
 
 
 
 
 
 
1
  import torch
2
  import gradio as gr
3
+ from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
5
+ model_id = "openai-community/gpt2"
6
  tokenizer = AutoTokenizer.from_pretrained(model_id)
7
+ model = AutoModelForCausalLM.from_pretrained(model_id)
8
  device = "cuda" if torch.cuda.is_available() else "cpu"
9
  model.to(device)
10
 
11
+ system_message = "Ты — умный помощник по Университету Иннополис."
 
 
 
12
 
13
+ def respond(user_message, history=None):
14
  if history is None:
15
  history = []
16
 
17
+ # Формируем контекст для диалога
18
+ prompt = system_message + "\n"
19
+ for user_text, bot_text in history:
20
+ prompt += f"User: {user_text}\nAssistant: {bot_text}\n"
21
+ prompt += f"User: {user_message}\nAssistant:"
 
22
 
23
  inputs = tokenizer(prompt, return_tensors="pt").to(device)
24
 
25
  with torch.no_grad():
26
  outputs = model.generate(
27
  **inputs,
28
+ max_new_tokens=150,
29
+ pad_token_id=tokenizer.eos_token_id,
30
+ eos_token_id=tokenizer.eos_token_id,
31
  do_sample=False,
 
32
  )
 
33
 
34
+ # Отсекание входной части prompt, оставляем только сгенерированный ответ
35
+ generated_text = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True).strip()
36
 
37
+ history.append((user_message, generated_text))
38
+ return history, history
39
+
40
+ with gr.Blocks() as demo:
41
+ chatbot = gr.Chatbot()
42
+ message = gr.Textbox(placeholder="Введите вопрос...")
43
+ state = gr.State([])
44
+
45
+ message.submit(respond, inputs=[message, state], outputs=[chatbot, state])
46
+ message.submit(lambda: "", None, message) # очистка поля ввода
47
+
48
+ demo.launch()