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

Update app.py

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