File size: 1,830 Bytes
2e03cda
c440868
80ceb8c
e474e6b
d334b30
b10ba12
80ceb8c
d334b30
9c601ea
 
9d9c29a
d334b30
 
 
 
af5c917
d334b30
b10ba12
 
7cd7e31
d334b30
 
 
 
 
 
12dd231
9c601ea
c263659
 
 
 
d334b30
c440868
d334b30
 
c263659
9d9c29a
d334b30
 
 
80ceb8c
d334b30
 
80ceb8c
d334b30
 
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
import torch
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "openai-community/gpt2"  # если нужен GPT-2 community версия
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)

device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)

context = """
Университет Иннополис был основан в 2012 году. Это современный вуз в России, 
специализирующийся на IT и робототехнике, расположенный в городе Иннополис, Татарстан.
"""

def respond(message, history=None):
    if history is None:
        history = []

    # Формируем промпт — контекст + вопрос + "Ответ:"
    prompt = (
        f"Контекст: {context}\n"
        f"Вопрос: {message}\n"
        "Ответ:"
    )

    inputs = tokenizer(prompt, return_tensors="pt").to(device)

    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_new_tokens=100,
            do_sample=False,
            eos_token_id=tokenizer.eos_token_id,  # Может отсутствовать у GPT-2, можно убрать
            pad_token_id=tokenizer.eos_token_id,  # Чтобы избежать warning
        )

    # Декодируем срез outputs после длины входа — берем только сгенерированное продолжение
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    answer = generated_text[len(prompt):].strip()

    history.append((message, answer))
    return history

iface = gr.ChatInterface(fn=respond, title="Innopolis Q&A (GPT-2)")
iface.launch()