root39058 commited on
Commit
8a3fc5c
·
verified ·
1 Parent(s): cfdfa0b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -95
app.py CHANGED
@@ -7,6 +7,10 @@ import gradio as gr
7
  from datetime import datetime
8
  import math
9
  import spaces
 
 
 
 
10
 
11
  # ============ НАСТРОЙКИ ============
12
  DATA_DIR = '/data'
@@ -124,7 +128,7 @@ class AndreyTransformer(nn.Module):
124
  )
125
  return self.fc_out(output)
126
 
127
- # ============ ДИАЛОГИ (Сокращенная версия для примера, но грамматически верная) ============
128
  DIALOGUES = [
129
  ("привет", "привет как твои дела"),
130
  ("как дела", "у меня всё хорошо а у тебя"),
@@ -194,7 +198,6 @@ DIALOGUES = [
194
  ("ты честный", "честность основа доверия"),
195
  ("ты справедливый", "я стараюсь быть объективным"),
196
  ("ты мудрый", "мудрость приходит с опытом"),
197
- ("ты умный", "спасибо я развиваю свой интеллект"),
198
  ("ты логичный", "логика это мой язык"),
199
  ("ты рациональный", "я принимаю решения на основе данных"),
200
  ("ты практичный", "я даю практические советы"),
@@ -347,88 +350,7 @@ DIALOGUES = [
347
  ("ты добродушный великан", "добродушный великан добр"),
348
  ("ты отзывчивый человек", "отзывчивый человек поможет"),
349
  ("ты сострадательный сердце", "сострадательное сердце болит"),
350
- ("ты милосердный суд", "миłosердный суд прощает"),
351
- ("ты прощающий родитель", "прощающий родитель любит"),
352
- ("ты памятный день", "памятный день остается"),
353
- ("ты внимательный глаз", "внимательный глаз видит"),
354
- ("ты наблюдательный детектив", "наблюдательный детектив находит"),
355
- ("ты зоркий сокол", "зоркий сокол видит добычу"),
356
- ("ты дальнозоркий политик", "дальнозоркий политик планирует"),
357
- ("ты здравый смысл", "здравый смысл нужен"),
358
- ("ты здоровый дух", "здоровый дух в здоровом теле"),
359
- ("ты крепкий орешек", "крепкие орешки ломаются"),
360
- ("ты мощный компьютер", "мощный компьютер быстр"),
361
- ("ты яркий свет", "яркий свет слепит"),
362
- ("ты громкий голос", "громкий голос слышен далеко"),
363
- ("ты звонкий колокол", "звонкий колокол зовет"),
364
- ("ты музыкальный слух", "музыкальный слух редок"),
365
- ("ты зрячий орел", "зрячий орел видит далеко"),
366
- ("ты внимательный слушатель", "внимательный слушатель ценен"),
367
- ("ты сосредоточенный взгляд", "сосредоточенный взгляд пронзает"),
368
- ("ты активный отдых", "активный отдых полезен"),
369
- ("ты энергичный танец", "энергичный танец бодрит"),
370
- ("ты живой организм", "живой организм дышит"),
371
- ("ты современный искусство", "современное искусство странно"),
372
- ("ты древний город", "древний город помнит историю"),
373
- ("ты новый год", "новый год приносит надежды"),
374
- ("ты старый друг", "старый друг лучше новых двух"),
375
- ("ты свежий хлеб", "свежий хлеб вкусен"),
376
- ("ты чистый лист", "чистый лист ждет письма"),
377
- ("ты аккуратный почерк", "аккуратный почерк радует"),
378
- ("ты опрятный костюм", "опрятный костюм украшает"),
379
- ("ты стильный образ", "стильный образ запоминается"),
380
- ("ты изящный жест", "изящный жест красив"),
381
- ("ты нежный цветок", "нежный цветок ломается"),
382
- ("ты ласковый кот", "ласковый кот мурлычет"),
383
- ("ты твердый камень", "твердый камень не сдается"),
384
- ("ты решительный шаг", "решительный шаг важен"),
385
- ("ты смелый поступок", "смелый поступок восхищает"),
386
- ("ты храбрый воин", "храбрый воин защищает"),
387
- ("ты уверенный тон", "уверенный тон убеждает"),
388
- ("ты спокойный море", "спокойное море манит"),
389
- ("ты уравновешенный человек", "уравновешенный человек стабилен"),
390
- ("ты терпеливый ожидание", "терпеливое ожидание награждается"),
391
- ("ты настойчивый поиск", "настойчивый поиск находит"),
392
- ("ты упорный труд", "упорный труд дает плоды"),
393
- ("ты трудолюбивый пчела", "трудолюбивая пчела собирает"),
394
- ("ты прилежный ученик", "прилежный ученик учится"),
395
- ("ты ответственный подход", "ответственный подход надежен"),
396
- ("ты дисциплинированный солдат", "дисциплинированный солдат исполняет"),
397
- ("ты организованный процесс", "организованный процесс эффективен"),
398
- ("ты пунктуальный человек", "пунктуальный человек точен"),
399
- ("ты точный расчет", "точный расчет верен"),
400
- ("ты регулярный рейс", "регулярный рейс надежен"),
401
- ("ты постоянный клиент", "постоянный клиент важен"),
402
- ("ты стабильный доход", "стабильный доход радует"),
403
- ("ты устойчивый стол", "устойчивый стол не падает"),
404
- ("ты гибкий график", "гибкий график удобен"),
405
- ("ты адаптивный дизайн", "адаптивный дизайн подстраивается"),
406
- ("ты универсальный пульт", "универсальный пульт управляет"),
407
- ("ты глобальный потепление", "глобальное потепление опасно"),
408
- ("ты масштабный проект", "масштабный проект сложен"),
409
- ("ты индивидуальный заказ", "индивидуальный заказ уникален"),
410
- ("ты коллективный договор", "коллективный договор защищает"),
411
- ("ты личный кабинет", "личный кабинет приватен"),
412
- ("ты общественный транспорт", "общественный транспорт доступен"),
413
- ("ты частный дом", "частный дом уютен"),
414
- ("ты коммерческий банк", "коммерческий банк считает"),
415
- ("ты платный сервис", "платный сервис качествен"),
416
- ("ты выгодный обмен", "выгодный обмен радует"),
417
- ("ты прибыльный бизнес", "прибыльный бизнес успешен"),
418
- ("ты экономный режим", "экономный режим бережет"),
419
- ("ты богатый урожай", "богатый урожай радует"),
420
- ("ты щедрый подарок", "щедрый подарок приятен"),
421
- ("ты великодушный жест", "великодушный жест благороден"),
422
- ("ты благородный металл", "благородный металл блестит"),
423
- ("ты честный бой", "честный бой справедлив"),
424
- ("ты правдивый рассказ", "правдивый рассказ убедителен"),
425
- ("ты искренний смех", "искренний смех заразителен"),
426
- ("ты дружелюбный сосед", "дружелюбный сосед помогает"),
427
- ("ты миролюбивый народ", "миролюбивый народ хочет мира"),
428
- ("ты добродушный великан", "добродушный великан добр"),
429
- ("ты отзывчивый человек", "отзывчивый человек поможет"),
430
- ("ты сострадательный сердце", "сострадательное сердце болит"),
431
- ("ты милосердный суд", "миłosердный суд прощает"),
432
  ("ты прощающий родитель", "прощающий родитель любит"),
433
  ("ты памятный день", "памятный день остается"),
434
  ("ты внимательный глаз", "внимательный глаз видит"),
@@ -480,14 +402,14 @@ class AndreyAI:
480
  'num_encoder_layers': 2, 'num_decoder_layers': 2, 'dim_feedforward': 256,
481
  'word_to_idx': word_to_idx,
482
  'idx_to_word': {str(k): v for k, v in idx_to_word.items()},
483
- 'memory': self.memory, 'version': '9.1-Grammar-Button',
484
  'created': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
485
  }
486
  torch.save(state, self.bin_file)
487
  print(f"✅ Сохранено в /data: {os.path.getsize(self.bin_file)/1024:.1f} КБ")
488
 
489
  @spaces.GPU(duration=120)
490
- def train(self, epochs=20): # Уменьшено до 20 для быстрого теста
491
  print("🚀 Начало обучения грамотного Андрея...")
492
  device = torch.device('cuda')
493
  self.model.to(device)
@@ -544,11 +466,18 @@ class AndreyAI:
544
 
545
  q = question.lower().strip()
546
  context_parts = []
 
 
547
  if history:
548
- for user_msg, bot_msg in history[-2:]:
549
- context_parts.append(user_msg)
550
- context_parts.append(bot_msg)
551
- context_parts.append(q)
 
 
 
 
 
552
  full_context = " ".join(context_parts)
553
 
554
  ctx_tokens = tokenize(full_context)
@@ -587,20 +516,33 @@ class AndreyAI:
587
 
588
  return generated_text if generated_text else self.get_fallback_answer(q)
589
 
590
- # ============ GRADIO ИНТЕРФЕЙС ============
591
  def gradio_chat(message, history):
592
- if not message:
593
- return "", history
 
 
 
594
 
 
595
  answer = andrey.generate(message, history=history)
596
- new_history = history + [(message, answer)]
 
 
 
 
 
 
 
 
 
597
  return "", new_history
598
 
599
  def start_training():
600
  return andrey.train(epochs=20)
601
 
602
  with gr.Blocks(title="Андрей AI") as demo:
603
- gr.Markdown("# 🤖 Андрей AI (Грамотный)\n### Transformer с правильной речью")
604
 
605
  chatbot = gr.Chatbot(height=400, label="Диалог")
606
  msg = gr.Textbox(label="Сообщение", placeholder="Напишите что-нибудь...")
 
7
  from datetime import datetime
8
  import math
9
  import spaces
10
+ import warnings
11
+
12
+ # Подавляем предупреждение PyTorch о nested tensors (оно не влияет на работу)
13
+ warnings.filterwarnings("ignore", message="The PyTorch API of nested tensors is in prototype stage")
14
 
15
  # ============ НАСТРОЙКИ ============
16
  DATA_DIR = '/data'
 
128
  )
129
  return self.fc_out(output)
130
 
131
+ # ============ ДИАЛОГИ ============
132
  DIALOGUES = [
133
  ("привет", "привет как твои дела"),
134
  ("как дела", "у меня всё хорошо а у тебя"),
 
198
  ("ты честный", "честность основа доверия"),
199
  ("ты справедливый", "я стараюсь быть объективным"),
200
  ("ты мудрый", "мудрость приходит с опытом"),
 
201
  ("ты логичный", "логика это мой язык"),
202
  ("ты рациональный", "я принимаю решения на основе данных"),
203
  ("ты практичный", "я даю практические советы"),
 
350
  ("ты добродушный великан", "добродушный великан добр"),
351
  ("ты отзывчивый человек", "отзывчивый человек поможет"),
352
  ("ты сострадательный сердце", "сострадательное сердце болит"),
353
+ ("ты милосердный суд", "милосердный суд прощает"),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
354
  ("ты прощающий родитель", "прощающий родитель любит"),
355
  ("ты памятный день", "памятный день остается"),
356
  ("ты внимательный глаз", "внимательный глаз видит"),
 
402
  'num_encoder_layers': 2, 'num_decoder_layers': 2, 'dim_feedforward': 256,
403
  'word_to_idx': word_to_idx,
404
  'idx_to_word': {str(k): v for k, v in idx_to_word.items()},
405
+ 'memory': self.memory, 'version': '9.2-Gradio-Dict-Fix',
406
  'created': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
407
  }
408
  torch.save(state, self.bin_file)
409
  print(f"✅ Сохранено в /data: {os.path.getsize(self.bin_file)/1024:.1f} КБ")
410
 
411
  @spaces.GPU(duration=120)
412
+ def train(self, epochs=20):
413
  print("🚀 Начало обучения грамотного Андрея...")
414
  device = torch.device('cuda')
415
  self.model.to(device)
 
466
 
467
  q = question.lower().strip()
468
  context_parts = []
469
+
470
+ # Обработка нового формата истории (словари)
471
  if history:
472
+ for msg in history[-4:]: # Берем последние 4 сообщения (2 пары)
473
+ role = msg.get("role", "unknown")
474
+ content = msg.get("content", "")
475
+ if role == "user":
476
+ context_parts.append(f"пользователь говорит {content}")
477
+ elif role == "assistant":
478
+ context_parts.append(f"андрей говорит {content}")
479
+
480
+ context_parts.append(f"пользователь говорит {q}")
481
  full_context = " ".join(context_parts)
482
 
483
  ctx_tokens = tokenize(full_context)
 
516
 
517
  return generated_text if generated_text else self.get_fallback_answer(q)
518
 
519
+ # ============ GRADIO ИНТЕРФЕЙС (ИСПРАВЛЕННЫЙ ФОРМАТ) ============
520
  def gradio_chat(message, history):
521
+ if not message:
522
+ return "", history or []
523
+
524
+ if history is None:
525
+ history = []
526
 
527
+ # Генерируем ответ, передавая историю в новом формате
528
  answer = andrey.generate(message, history=history)
529
+
530
+ # Добавляем сообщения в строгом формате Gradio: список словарей
531
+ new_history = history + [
532
+ {"role": "user", "content": message},
533
+ {"role": "assistant", "content": answer}
534
+ ]
535
+
536
+ # Сохраняем в память модели
537
+ andrey.memory['chat_history'] = new_history
538
+
539
  return "", new_history
540
 
541
  def start_training():
542
  return andrey.train(epochs=20)
543
 
544
  with gr.Blocks(title="Андрей AI") as demo:
545
+ gr.Markdown("# 🤖 Андрей AI (Грамотный)\n### Transformer с правильной речью и новой памятью")
546
 
547
  chatbot = gr.Chatbot(height=400, label="Диалог")
548
  msg = gr.Textbox(label="Сообщение", placeholder="Напишите что-нибудь...")