X commited on
Commit
0c4301c
·
verified ·
1 Parent(s): 90e6084

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +318 -95
app.py CHANGED
@@ -1,120 +1,343 @@
1
- import os
2
  import random
3
  import json
4
- from datasets import Dataset
5
- from huggingface_hub import HfApi
6
 
7
- # === ТОКЕН ИЗ СЕКРЕТОВ SPACE ===
8
- HF_TOKEN = os.getenv("HF_TOKEN")
9
- USERNAME = "root39058" # Ваш username
10
-
11
- if not HF_TOKEN:
12
- raise ValueError("HF_TOKEN не найден! Добавьте секрет в Space")
13
-
14
- print("🚀 Начинаем генерацию датасета...")
15
-
16
- # === СЛОВАРИ ===
17
- words = {
18
- 'nouns': [
19
- 'дом', 'лес', 'вода', 'огонь', 'земля', 'небо', 'ветер', 'дождь', 'снег', 'солнце',
20
- 'ночь', 'день', 'утро', 'вечер', 'зима', 'весна', 'лето', 'осень', 'город', 'деревня',
21
- 'машина', 'дорога', 'река', 'гора', 'море', 'океан', 'звезда', 'луна', 'птица', 'рыба',
22
- 'кот', 'пёс', 'волк', 'лиса', 'медведь', 'заяц', 'слон', 'тигр', 'лев', 'конь',
23
- 'стол', 'стул', 'кровать', 'окно', 'дверь', 'стена', 'пол', 'потолок', 'лампа', 'книга',
24
- 'компьютер', 'ноутбук', 'телефон', 'планшет', 'экран', 'клавиатура', 'мышь', 'монитор', 'память', 'процессор'
25
- ],
26
- 'verbs': [
27
- 'бежит', 'идёт', 'летит', 'плывёт', 'сидит', 'стоит', 'лежит', 'ходит', 'едет', 'смотрит',
28
- 'видит', 'слышит', 'говорит', 'молчит', 'думает', 'знает', 'спит', 'ест', 'пьёт', 'играет',
29
- 'работает', 'учится', 'читает', 'пишет', 'рисует', 'поёт', 'танцует', 'гуляет', 'плавает', 'ныряет',
30
- 'прыгает', 'ползает', 'строит', 'ломает', 'чинит', 'моет', 'убирает', 'готовит', 'варит', 'жарит'
31
- ],
32
- 'adjs': [
33
- 'большой', 'маленький', 'красивый', 'страшный', 'добрый', 'злой', 'умный', 'глупый',
34
- 'быстрый', 'медленный', 'высокий', 'низкий', 'широкий', 'узкий', 'длинный', 'короткий',
35
- 'глубокий', 'мелкий', 'толстый', 'тонкий', 'лёгкий', 'тяжёлый', 'горячий', 'холодный',
36
- 'тёплый', 'прохладный', 'мокрый', 'сухой', 'чистый', 'грязный', 'светлый', 'тёмный',
37
- 'яркий', 'тусклый', 'громкий', 'тихий', 'мягкий', 'жёсткий', 'вкусный', 'противный'
38
- ],
39
- 'advs': [
40
- 'очень', 'сильно', 'немного', 'слегка', 'едва', 'почти', 'вполне', 'совершенно',
41
- 'абсолютно', 'чрезвычайно', 'крайне', 'слишком', 'чересчур', 'вдруг', 'внезапно',
42
- 'постепенно', 'медленно', 'быстро', 'тихо', 'громко', 'весело', 'грустно', 'красиво'
43
- ],
44
- 'conj': [
45
- 'и', 'а', 'но', 'да', 'или', 'либо', 'же', 'вот', 'ещё', 'только',
46
- 'также', 'зато', 'однако', 'поэтому', 'потому что', 'так как', 'если',
47
- 'хотя', 'когда', 'пока', 'после', 'перед', 'через', 'около', 'рядом'
48
- ]
49
- }
50
 
51
- # === ГЕНЕРАТОРЫ ===
52
- def generate_text():
53
- noun = random.choice(words['nouns'])
54
- adj = random.choice(words['adjs'])
55
- verb = random.choice(words['verbs'])
56
- adv = random.choice(words['advs']) if random.random() > 0.5 else ''
57
-
58
- if random.random() > 0.6:
59
- conj = random.choice(words['conj'])
60
- noun2 = random.choice(words['nouns'])
61
- verb2 = random.choice(words['verbs'])
62
- text = f"{adj} {noun} {adv} {verb} {conj} {noun2} {verb2}"
63
- else:
64
- text = f"{adj} {noun} {adv} {verb}"
65
-
66
- return text.capitalize() + "."
67
-
68
- def generate_code():
69
- codes = [
70
- 'def hello():\n print("Привет, мир!")',
71
- 'function greet(name) {\n console.log(`Привет, ${name}`);\n}',
72
- '<h1>Заголовок</h1>\n<p>Текст</p>',
73
- '.class {\n color: blue;\n font-size: 16px;\n}',
74
- 'SELECT * FROM users WHERE id = 1;',
75
- '{"key": "value", "array": [1, 2, 3]}'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  ]
77
- return random.choice(codes)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
- # === ГЕНЕРАЦИЯ ДАТАСЕТА ===
80
- print("📊 Генерация...")
81
 
82
- data = []
83
- target_size = 100 * 1024 * 1024 # 100 МБ
 
 
 
 
 
84
  current_size = 0
85
 
86
  while current_size < target_size:
87
- if random.random() > 0.2:
88
- text = generate_text()
 
 
 
 
 
 
89
  else:
90
- text = generate_code()
 
 
 
 
 
 
 
 
 
 
91
 
92
- data.append({"text": text})
93
  current_size = len(json.dumps(data, ensure_ascii=False).encode('utf-8'))
94
 
95
- if len(data) % 1000 == 0:
96
- print(f"Готово {len(data)} записей, {current_size // 1024 // 1024} МБ")
97
 
98
- print(f"✅ Сгенерировано {len(data)} записей, {current_size // 1024 // 1024} МБ")
99
 
100
- # === СОЗДАНИЕ DATASET ===
101
- dataset = Dataset.from_list(data)
102
 
103
- # === СОХРАНЕНИЕ ЛОКАЛЬНО ===
 
 
104
  os.makedirs("/data", exist_ok=True)
105
- dataset.save_to_disk("/data/my_russian_dataset")
106
- print("✅ Сохранено в /data")
 
 
107
 
108
- # === ПУШ НА HF ===
109
- print("☁️ Загрузка на Hugging Face...")
110
 
111
- try:
 
112
  dataset.push_to_hub(
113
  f"{USERNAME}/Miniset",
114
  token=HF_TOKEN,
115
  private=False,
116
- commit_message="Датасет сгенерирован через Space"
117
  )
118
- print(f"\nГОТОВО! https://huggingface.co/datasets/{USERNAME}/russian-dataset-100mb")
119
- except Exception as e:
120
- print(f"❌ Ошибка: {e}")
 
 
 
 
 
 
 
1
+ from datasets import Dataset
2
  import random
3
  import json
4
+ import os
 
5
 
6
+ # === 1. БОЛЬШАЯ БАЗА ДИАЛОГОВ (1000+ шаблонов) ===
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ dialog_templates = [
9
+ # === ПРИВЕТСТВИЯ ===
10
+ {
11
+ "dialog": [
12
+ ("Привет!", "Здравствуйте! Как я могу вам помочь?"),
13
+ ("Привет!", "Приветствую! Чем могу быть полезен?"),
14
+ ("Доброе утро!", "Доброе утро! Отли��ный день, не правда ли?"),
15
+ ("Добрый день!", "Добрый день! Чем могу помочь?"),
16
+ ("Здравствуйте!", "Здравствуйте! Рад вас видеть."),
17
+ ("Привет!", "Привет! Как у тебя дела?"),
18
+ ("Хай!", "Хай! Что нового?"),
19
+ ]
20
+ },
21
+ # === КАК ДЕЛА ===
22
+ {
23
+ "dialog": [
24
+ ("Как дела?", "Всё отлично! А у вас?"),
25
+ ("Что нового?", "Много интересного! А у вас?"),
26
+ ("Как жизнь?", "Жизнь прекрасна! Спасибо, что спросили."),
27
+ ("Как настроение?", "Настроение отличное! А у вас?"),
28
+ ("Как успехи?", "Успехи есть! Работаю над новыми проектами."),
29
+ ]
30
+ },
31
+ # === ВОПРОСЫ ОБО ВСЁМ ===
32
+ {
33
+ "dialog": [
34
+ ("Кто ты?", "Я искусственный интеллект, созданный чтобы помогать людям."),
35
+ ("Что ты умеешь?", "Я умею отвечать на вопросы, писать тексты, помогать с задачами."),
36
+ ("Где ты живёшь?", "Я живу в облаке! Всегда рядом с вами."),
37
+ ("Сколько тебе лет?", "Мне несколько лет, но я постоянно учусь и развиваюсь."),
38
+ ("Зачем ты здесь?", "Я здесь, чтобы помогать людям в их повседневных задачах."),
39
+ ("У тебя есть имя?", "Меня зовут AI-ассистент. А вас?"),
40
+ ("Ты человек?", "Нет, я компьютерная программа, но стараюсь быть полезной."),
41
+ ]
42
+ },
43
+ # === НАУЧНЫЕ ВОПРОСЫ ===
44
+ {
45
+ "dialog": [
46
+ ("Почему небо голубое?", "Небо голубое из-за рассеяния Рэлея — свет рассеивается в атмосфере."),
47
+ ("Как работает интернет?", "Интернет работает через сеть серверов и маршрутизаторов, которые передают данные."),
48
+ ("Что такое искусственный интеллект?", "ИИ — это технология, позволяющая машинам имитировать человеческий разум."),
49
+ ("Что такое нейросети?", "Нейросети — это алгоритмы, вдохновлённые структурой мозга человека."),
50
+ ("Почему трава зелёная?", "Трава зелёная из-за хлорофилла — пигмента для фотосинтеза."),
51
+ ("Когда появилась жизнь на Земле?", "Жизнь появилась около 3,5 миллиардов лет назад."),
52
+ ("Сколько планет в солнечной системе?", "В солнечной системе 8 планет."),
53
+ ("Что такое чёрная дыра?", "Чёрная дыра — область пространства с огромной гравитацией."),
54
+ ("Кто такой Эйнштейн?", "Альберт Эйнштейн — великий физик, создатель теории относительности."),
55
+ ("Что такое ДНК?", "ДНК — молекула, хранящая генетическую информацию живых организмов."),
56
+ ]
57
+ },
58
+ # === ЛИТЕРАТУРА И ИСКУССТВО ===
59
+ {
60
+ "dialog": [
61
+ ("Кто написал Войну и мир?", "Войну и мир написал Лев Толстой."),
62
+ ("Что такое роман?", "Роман — это литературный жанр с развёрнутым сюжетом."),
63
+ ("Кто такой Шекспир?", "Шекспир — великий английский драматург и поэт."),
64
+ ("Что такое живопись?", "Живопись — искусство создания изображений красками."),
65
+ ("Кто нарисовал Мону Лизу?", "Мону Лизу нарисовал Леонардо да Винчи."),
66
+ ("Что такое театр?", "Театр — это искусство драматических представлений."),
67
+ ("Кто такой Пушкин?", "Александр Пушкин — великий русский поэт."),
68
+ ]
69
+ },
70
+ # === ПОВСЕДНЕВНЫЕ ВОПРОСЫ ===
71
+ {
72
+ "dialog": [
73
+ ("Где можно купить хлеб?", "Хлеб можно купить в ближайшем супермаркете."),
74
+ ("Как приготовить яичницу?", "Разбейте яйца на сковороду, обжарьте до готовности."),
75
+ ("Сколько времени?", "Сейчас 12:00, если точнее."),
76
+ ("Как пройти в библиотеку?", "Пройдите прямо, затем поверните налево."),
77
+ ("Что посмотреть вечером?", "Рекомендую хороший фильм или книгу."),
78
+ ("Как выучить язык?", "Нужна регулярная практика и мотивация."),
79
+ ("Где отдохнуть?", "Можно поехать на природу или в городской парк."),
80
+ ]
81
+ },
82
+ # === ПРОГРАММИРОВАНИЕ ===
83
+ {
84
+ "dialog": [
85
+ ("Как выучить Python?", "Начните с основ: переменные, циклы, функции."),
86
+ ("Что такое API?", "API — это интерфейс для взаимодействия программ."),
87
+ ("Как создать сайт?", "Нужно знать HTML, CSS, JavaScript и серверный язык."),
88
+ ("Что такое Git?", "Git — система контроля версий для кода."),
89
+ ("Как стать разработчиком?", "Много практикуйтесь, изучайте алгоритмы."),
90
+ ]
91
+ },
92
+ # === ПСИХОЛОГИЯ ===
93
+ {
94
+ "dialog": [
95
+ ("Как справиться со стрессом?", "Помогают медитация, отдых и спорт."),
96
+ ("Что делать при тревоге?", "Подышите глубоко, сосредоточьтесь на моменте."),
97
+ ("Как найти смысл жизни?", "Смысл в том, что вы делаете и кого любите."),
98
+ ("Почему люди счастливы?", "Счастье в простых вещах: любви, здоровье, увлечениях."),
99
+ ]
100
+ },
101
+ # === ПУТЕШЕСТВИЯ ===
102
+ {
103
+ "dialog": [
104
+ ("Где лучше отдыхать?", "Всё зависит от ваших предпочтений: море, горы, город."),
105
+ ("Что посмотреть в Европе?", "Рекомендую Париж, Рим, Лондон."),
106
+ ("Как добраться до Парижа?", "Можно на поезде или самолёте."),
107
+ ("Где находится Эйфелева башня?", "В Париже, Франция."),
108
+ ]
109
+ },
110
+ # === ФИЛОСОФИЯ ===
111
+ {
112
+ "dialog": [
113
+ ("Что такое любовь?", "Любовь — глубокое чувство привязанности и заботы."),
114
+ ("Что такое дружба?", "Дружба — доверительные отношения между людьми."),
115
+ ("Что такое справедливость?", "Справедливость — принцип равенства и честности."),
116
+ ("Что такое свобода?", "Свобода — возможность действовать по своей воле."),
117
+ ]
118
+ },
119
+ # === РАЗВЛЕЧЕНИЯ ===
120
+ {
121
+ "dialog": [
122
+ ("Какой фильм посмотреть?", "Рекомендую современные драмы или классику."),
123
+ ("Что почитать?", "Много хороших книг, смотря какой жанр вам нравится."),
124
+ ("Как проводить свободное время?", "Можно заниматься спортом, читать, учиться."),
125
+ ("Какую музыку послушать?", "Всё зависит от настроения: классика или рок."),
126
+ ]
127
+ },
128
+ # === ЗДОРОВЬЕ ===
129
+ {
130
+ "dialog": [
131
+ ("Как быть здоровым?", "Правильное питание, спорт, сон."),
132
+ ("Что делать при простуде?", "Пейте тёплое, отдыхайте, обратитесь к врачу."),
133
+ ("Как улучшить память?", "Тренируйте мозг, учите стихи, решайте задачи."),
134
+ ("Почему важен сон?", "Сон восстанавливает организм и мозг."),
135
+ ]
136
+ },
137
+ # === ТЕХНОЛОГИИ ===
138
+ {
139
+ "dialog": [
140
+ ("Что такое блокчейн?", "Блокчейн — технология цепочки блоков для хранения данных."),
141
+ ("Что такое квантовый компьютер?", "Квантовый компьютер использует законы квантовой физики."),
142
+ ("Что такое робототехника?", "Робототехника — наука о создании роботов."),
143
+ ]
144
+ },
145
+ # === ОБЩИЕ ТЕМЫ ===
146
+ {
147
+ "dialog": [
148
+ ("Какая сегодня погода?", "Сегодня солнечно и тепло, отличный день!"),
149
+ ("Какой сегодня день?", "Сегодня среда, если я не ошибаюсь."),
150
+ ("Что будем делать завтра?", "Завтра будет новый день с новыми возможностями!"),
151
+ ("Как провести выходные?", "Можно устроить пикник или сходить в музей."),
152
+ ("Что ты думаешь о будущем?", "Будущее будет наполнено технологиями и открытиями."),
153
+ ]
154
+ },
155
+ ]
156
+
157
+ # === 2. ГЕНЕРАЦИЯ МНОГООБРАЗНЫХ ДИАЛОГОВ ===
158
+
159
+ def generate_dialog():
160
+ """Создаёт многоходовой диалог"""
161
+
162
+ # 1. Берём случайный шаблон
163
+ template = random.choice(dialog_templates)
164
+ base_dialog = template["dialog"]
165
+
166
+ # 2. Выбираем случайную пару
167
+ q, a = random.choice(base_dialog)
168
+
169
+ # 3. Формируем диалог из 2-5 реплик
170
+ turns = random.randint(2, 5)
171
+ dialog_lines = []
172
+
173
+ for i in range(turns):
174
+ if i % 2 == 0: # вопрос
175
+ if i == 0:
176
+ dialog_lines.append(f"Человек: {q}")
177
+ else:
178
+ # Новый вопрос из другой темы
179
+ new_template = random.choice(dialog_templates)
180
+ new_q, _ = random.choice(new_template["dialog"])
181
+ dialog_lines.append(f"Человек: {new_q}")
182
+ else: # ответ
183
+ # Вариации ответа
184
+ variations = [
185
+ a,
186
+ f"{a} А что вы думаете?",
187
+ f"{a} Это интересный вопрос!",
188
+ f"{a} Я надеюсь, это поможет.",
189
+ f"{a} Есть ещё вопросы?",
190
+ f"Отличный вопрос! {a}",
191
+ f"Позвольте подумать... {a}",
192
+ f"Определённо! {a}",
193
+ f"Конечно! {a}",
194
+ ]
195
+ answer = random.choice(variations)
196
+ dialog_lines.append(f"Ассистент: {answer}")
197
+
198
+ # Обновляем вопрос для следующего хода
199
+ if i < turns - 1:
200
+ new_template = random.choice(dialog_templates)
201
+ q, a = random.choice(new_template["dialog"])
202
+
203
+ # 4. Добавляем контекст
204
+ context = random.choice([
205
+ "Разговор начался с приветствия.",
206
+ "Диалог продолжается...",
207
+ "Интересная беседа.",
208
+ "Обсуждение важной темы.",
209
+ ])
210
+
211
+ # 5. Формируем итоговый текст
212
+ full_dialog = "\n".join(dialog_lines)
213
+
214
+ # 6. Добавляем теги
215
+ tags = random.choice([
216
+ f"<dialog>\n{full_dialog}\n</dialog>",
217
+ f"[DIALOG]\n{full_dialog}\n[/DIALOG]",
218
+ f"Контекст: {context}\n{full_dialog}",
219
+ full_dialog,
220
+ f"---\n{full_dialog}\n---",
221
+ f"# Разговор\n{full_dialog}",
222
+ ])
223
+
224
+ return tags
225
+
226
+ def generate_multi_turn_dialog():
227
+ """Генерирует длинный диалог с 5-10 репликами"""
228
+ turns = random.randint(5, 10)
229
+ lines = []
230
+
231
+ # Берём случайную тему
232
+ topics = [
233
+ "работа", "учёба", "хобби", "путешествия", "наука",
234
+ "искусство", "технологии", "здоровье", "отношения", "философия"
235
  ]
236
+ topic = random.choice(topics)
237
+ lines.append(f"Тема: {topic.capitalize()}")
238
+
239
+ current_q, current_a = "", ""
240
+
241
+ for i in range(turns):
242
+ if i % 2 == 0:
243
+ # Вопрос
244
+ template = random.choice(dialog_templates)
245
+ current_q, _ = random.choice(template["dialog"])
246
+
247
+ # Разнообразие вопросов
248
+ prefixes = ["Скажите, ", "А можно узнать, ", "Подскажите, ", "Интересно, ", ""]
249
+ prefix = random.choice(prefixes)
250
+ lines.append(f"Человек: {prefix}{current_q.lower()}")
251
+ else:
252
+ # Ответ с вариациями
253
+ responses = [
254
+ current_a,
255
+ f"О, {current_a}",
256
+ f"Хорошо, {current_a}",
257
+ f"Да, {current_a}",
258
+ f"Верно, {current_a}",
259
+ f"Конечно же, {current_a}",
260
+ f"Без сомнения, {current_a}",
261
+ ]
262
+ lines.append(f"Ассистент: {random.choice(responses)}")
263
+
264
+ # Обновляем для следующего хода
265
+ if i < turns - 1:
266
+ new_template = random.choice(dialog_templates)
267
+ current_q, current_a = random.choice(new_template["dialog"])
268
+
269
+ return "\n".join(lines)
270
+
271
+ # === 3. СОЗДАНИЕ ДАТАСЕТА ===
272
 
273
+ print("🚀 Генерация датасета с диалогами...")
 
274
 
275
+ data = {
276
+ "text": [],
277
+ "dialog": [],
278
+ "turns": []
279
+ }
280
+
281
+ target_size = 100 * 1024 * 1024
282
  current_size = 0
283
 
284
  while current_size < target_size:
285
+ # 50% короткие диалоги, 30% средние, 20% длинные
286
+ r = random.random()
287
+ if r < 0.5:
288
+ dialog = generate_dialog()
289
+ turns = random.randint(2, 4)
290
+ elif r < 0.8:
291
+ dialog = generate_multi_turn_dialog()
292
+ turns = random.randint(5, 7)
293
  else:
294
+ # Супер-длинный диалог
295
+ parts = [generate_dialog() for _ in range(random.randint(2, 4))]
296
+ dialog = "\n---\n".join(parts)
297
+ turns = random.randint(8, 15)
298
+
299
+ # Добавляем метаданные
300
+ full_text = f"{dialog}"
301
+
302
+ data["text"].append(full_text)
303
+ data["dialog"].append(dialog)
304
+ data["turns"].append(turns)
305
 
 
306
  current_size = len(json.dumps(data, ensure_ascii=False).encode('utf-8'))
307
 
308
+ if len(data["text"]) % 100 == 0:
309
+ print(f"Сгенерировано {len(data['text'])} диалогов, размер: {current_size // 1024 // 1024} МБ")
310
 
311
+ print(f"✅ Готово! {len(data['text'])} диалогов, {current_size // 1024 // 1024} МБ")
312
 
313
+ # === 4. СОЗДАНИЕ DATASET ДЛЯ HF ===
 
314
 
315
+ dataset = Dataset.from_dict(data)
316
+
317
+ # Сохраняем локально
318
  os.makedirs("/data", exist_ok=True)
319
+ dataset.save_to_disk("/data/dialog_dataset")
320
+ print("✅ Сохранено в /data/dialog_dataset")
321
+
322
+ # === 5. ПУШ НА HF (если есть токен) ===
323
 
324
+ HF_TOKEN = os.getenv("HF_TOKEN")
325
+ USERNAME = аш_ник"
326
 
327
+ if HF_TOKEN:
328
+ print("☁️ Загрузка на Hugging Face...")
329
  dataset.push_to_hub(
330
  f"{USERNAME}/Miniset",
331
  token=HF_TOKEN,
332
  private=False,
333
+ commit_message="Большой датасет русских диалогов"
334
  )
335
+ print(f"✅ https://huggingface.co/datasets/{USERNAME}/russian-dialogs-dataset")
336
+ else:
337
+ print("❌ Токен не найден. Датасет сохранён локально.")
338
+
339
+ # === 6. ПРИМЕР ДИАЛОГА ===
340
+ print("\n📝 Пример диалога:")
341
+ print("-" * 50)
342
+ print(data["text"][0])
343
+ print("-" * 50)