mechtnet commited on
Commit
d00f6e9
·
verified ·
1 Parent(s): 8501667

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -82
app.py CHANGED
@@ -1,91 +1,86 @@
 
1
  from transformers import pipeline, AutoTokenizer
2
  import torch
3
 
4
- def test_gpt_simple():
5
- try:
6
- print("Starting simple GPT test...")
7
-
8
- # Инициализируем пайплайн для генерации текста
9
- print("Initializing text generation pipeline...")
10
- generator = pipeline(
11
- 'text-generation',
12
- model='ai-forever/rugpt3small_based_on_gpt2',
13
- device=0 if torch.cuda.is_available() else -1
14
- )
15
-
16
- # Загружаем токенизатор
17
- tokenizer = AutoTokenizer.from_pretrained('ai-forever/rugpt3small_based_on_gpt2')
18
-
19
- test_prompt = """Текст:
20
- [Текст песни "Имя моей тоски"]
21
- [Куплет 1]
22
- Она жжёт как удар хлыста
23
- Вся здесь, но недостижима
24
- Отраженье в стекле, огонь по ту сторону реки
25
- И, если хочешь, иди по воде, или стань другим, но
26
- Он шепчет: "Господи свят, научи меня
27
- Имени моей тоски"
28
- [Куплет 2]
29
- Между мной и тобой каждое моё слово
30
- О том, как медленен снег
31
- О том, как небеса высоки
32
- Господи, если ты не в силах
33
- Выпустить меня из клетки этой крови
34
- Научи меня
35
- Имени моей тоски
36
- [Куплет 3]
37
- Ты слишком далеко от меня
38
- Слишком далеко от меня
39
- Как воздух от огня, вода от волны, сердце от крови
40
- И вот я падаю вниз, уже в двух шагах от земли
41
- Господи, смотри
42
 
43
- Разбей этот текст на эмоциоанальные цитаты. Они могут быть от одной до четырех строк. Каждой цитате подпиши эмоцию:"""
44
-
45
- print(f"\nUsing prompt:\n{test_prompt}\n")
46
- print("Generating response...")
47
-
48
- # Генерация текста
49
- output = generator(
50
- test_prompt,
51
- max_new_tokens=50,
52
- do_sample=True,
53
- top_p=0.9,
54
- top_k=50,
55
- temperature=0.7,
56
- num_return_sequences=1,
57
- pad_token_id=tokenizer.eos_token_id,
58
- repetition_penalty=1.2,
59
- no_repeat_ngram_size=2,
60
- truncation=True # Включаем усечение
61
- )
62
-
63
- # Извлекаем сгенерированный текст
64
- generated_text = output[0]['generated_text']
65
-
66
- # Получаем только новую часть текста (после промпта)
67
- response = generated_text[len(test_prompt):].strip()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
- print(f"\nGenerated analysis:\n{response}")
 
 
70
 
71
- return True
 
 
72
 
73
- except Exception as e:
74
- print(f"Error during test: {str(e)}")
75
- print(f"Error type: {type(e)}")
76
- import traceback
77
- traceback.print_exc()
78
- return False
 
 
 
 
 
 
 
 
 
 
 
 
79
 
80
  if __name__ == "__main__":
81
- # Проверяем доступность CUDA
82
- print(f"CUDA available: {torch.cuda.is_available()}")
83
- if torch.cuda.is_available():
84
- print(f"CUDA device: {torch.cuda.get_device_name(0)}")
85
-
86
- # Проверяем версии библиотек
87
- import transformers
88
- print(f"PyTorch version: {torch.__version__}")
89
- print(f"Transformers version: {transformers.__version__}")
90
-
91
- test_gpt_simple()
 
1
+ import streamlit as st
2
  from transformers import pipeline, AutoTokenizer
3
  import torch
4
 
5
+ # Функция для загрузки текста из файла
6
+ def load_text_from_file(uploaded_file):
7
+ text = uploaded_file.read().decode("utf-8")
8
+ return text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
+ # Функция для генерации ответа на основе промта и текста
11
+ def generate_response(prompt, text, model, tokenizer):
12
+ # Объединяем текст и промт
13
+ full_prompt = f"{text}\n\n{prompt}"
14
+
15
+ # Генерация текста
16
+ generator = pipeline(
17
+ 'text-generation',
18
+ model=model,
19
+ tokenizer=tokenizer,
20
+ device=0 if torch.cuda.is_available() else -1
21
+ )
22
+
23
+ output = generator(
24
+ full_prompt,
25
+ max_new_tokens=100, # Увеличим количество токенов для более длинного ответа
26
+ do_sample=True,
27
+ top_p=0.9,
28
+ top_k=50,
29
+ temperature=0.7,
30
+ num_return_sequences=1,
31
+ pad_token_id=tokenizer.eos_token_id,
32
+ repetition_penalty=1.2,
33
+ no_repeat_ngram_size=2,
34
+ truncation=True
35
+ )
36
+
37
+ # Извлекаем сгенерированный текст
38
+ generated_text = output[0]['generated_text']
39
+
40
+ # Получаем только новую часть текста (после промпта)
41
+ response = generated_text[len(full_prompt):].strip()
42
+
43
+ return response
44
+
45
+ # Основная функция
46
+ def main():
47
+ st.title("Анализ текста с помощью GPT")
48
+
49
+ # Загрузка текстового файла
50
+ st.sidebar.header("Загрузите текстовый файл")
51
+ uploaded_file = st.sidebar.file_uploader("Выберите .txt файл", type="txt")
52
+
53
+ if uploaded_file is not None:
54
+ # Загружаем текст из файла
55
+ text = load_text_from_file(uploaded_file)
56
+ st.sidebar.success("Файл успешно загружен!")
57
 
58
+ # Показываем загруженный текст
59
+ st.subheader("Загруженный текст:")
60
+ st.text_area("Текст", text, height=300)
61
 
62
+ # Ввод промта
63
+ st.subheader("Введите промт:")
64
+ prompt = st.text_area("Промт", height=100)
65
 
66
+ # Кнопка для генерации ответа
67
+ if st.button("Сгенерировать ответ"):
68
+ if prompt.strip() == "":
69
+ st.warning("Пожалуйста, введите промт.")
70
+ else:
71
+ # Загружаем модель и токенизатор
72
+ model_name = "ai-forever/rugpt3small_based_on_gpt2"
73
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
74
+
75
+ # Генерация ответа
76
+ with st.spinner("Генерация ответа..."):
77
+ response = generate_response(prompt, text, model_name, tokenizer)
78
+
79
+ # Показываем ответ
80
+ st.subheader("Ответ модели:")
81
+ st.text_area("Ответ", response, height=300)
82
+ else:
83
+ st.sidebar.warning("Пожалуйста, загрузите текстовый файл.")
84
 
85
  if __name__ == "__main__":
86
+ main()