File size: 3,256 Bytes
8ee0504
7af3d6c
1c5484e
906785a
d00f6e9
8ee0504
 
 
d00f6e9
791802a
d00f6e9
8ee0504
d00f6e9
 
 
8ee0504
 
 
 
 
d00f6e9
 
8ee0504
d00f6e9
 
 
 
8ee0504
d00f6e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8ee0504
 
 
 
d00f6e9
8ee0504
 
d00f6e9
8ee0504
9a84609
8ee0504
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d1230b6
8ee0504
 
 
 
 
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import gradio as gr
from transformers import pipeline, AutoTokenizer
import torch

# Функция для загрузки текста из файла
def load_text_from_file(file):
    with open(file.name, "r", encoding="utf-8") as f:
        text = f.read()
    return text

# Функция для генерации ответа на основе промта и текста
def generate_response(prompt, text):
    # Объединяем текст и промт
    full_prompt = f"{text}\n\n{prompt}"
    
    # Загружаем модель и токенизатор
    model_name = "ai-forever/rugpt3small_based_on_gpt2"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    
    # Инициализируем пайплайн для генерации текста
    generator = pipeline(
        'text-generation',
        model=model_name,
        tokenizer=tokenizer,
        device=0 if torch.cuda.is_available() else -1
    )
    
    # Генерация текста
    output = generator(
        full_prompt,
        max_new_tokens=100,  # Увеличим количество токенов для более длинного ответа
        do_sample=True,
        top_p=0.9,
        top_k=50,
        temperature=0.7,
        num_return_sequences=1,
        pad_token_id=tokenizer.eos_token_id,
        repetition_penalty=1.2,
        no_repeat_ngram_size=2,
        truncation=True
    )
    
    # Извлекаем сгенерированный текст
    generated_text = output[0]['generated_text']
    
    # Получаем только новую часть текста (после промпта)
    response = generated_text[len(full_prompt):].strip()
    
    return response

# Функция для обработки ввода и вывода
def process_input(file, prompt):
    # Загружаем текст из файла
    text = load_text_from_file(file)
    
    # Генерация ответа
    response = generate_response(prompt, text)
    
    return response

# Создаем интерфейс Gradio
def create_interface():
    # Описание интерфейса
    description = """
    Загрузите текстовый файл (.txt) и введите промт. Модель GPT на основе загруженного текста сгенерирует ответ.
    """
    
    # Создаем интерфейс
    interface = gr.Interface(
        fn=process_input,  # Функция для обработки ввода
        inputs=[
            gr.File(label="Загрузите текстовый файл (.txt)"),  # Поле для загрузки файла
            gr.Textbox(label="Введите промт", lines=3)  # Поле для ввода промта
        ],
        outputs=gr.Textbox(label="Ответ модели", lines=10),  # Поле для вывода ответа
        title="Анализ текста с помощью GPT",
        description=description
    )
    
    return interface

# Запуск приложения
if __name__ == "__main__":
    # Создаем интерфейс
    interface = create_interface()
    
    # Запускаем Gradio
    interface.launch()