smart-bot-factory 0.2.4__tar.gz → 0.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of smart-bot-factory might be problematic. Click here for more details.

Files changed (102) hide show
  1. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/PKG-INFO +1 -1
  2. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/best-valera.py +10 -1
  3. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/pyproject.toml +1 -1
  4. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/creation/bot_builder.py +24 -0
  5. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/handlers/handlers.py +14 -1
  6. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/supabase/client.py +3 -12
  7. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/uv.lock +1 -1
  8. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.claude/settings.local.json +0 -0
  9. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.env.example +0 -0
  10. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.github/ISSUE_TEMPLATE//342/234/250-/320/267/320/260/320/277/321/200/320/276/321/201-/321/204/321/203/320/275/320/272/321/206/320/270/320/270.md" +0 -0
  11. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.github/ISSUE_TEMPLATE//360/237/220/233-/320/261/320/260/320/263-/321/200/320/265/320/277/320/276/321/200/321/202.md" +0 -0
  12. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.github/workflows/ci.yml +0 -0
  13. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.github/workflows/publish-private.yml +0 -0
  14. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.github/workflows/publish.yml +0 -0
  15. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.gitignore +0 -0
  16. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/.python-version +0 -0
  17. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/CLIENTS_USAGE.md +0 -0
  18. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/Dockerfile +0 -0
  19. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/LICENSE +0 -0
  20. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/README.md +0 -0
  21. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/prompts/1sales_context.txt +0 -0
  22. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/prompts/2product_info.txt +0 -0
  23. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/prompts/3objection_handling.txt +0 -0
  24. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/prompts/final_instructions.txt +0 -0
  25. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/prompts/help_message.txt +0 -0
  26. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/prompts/welcome_message.txt +0 -0
  27. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/tests/quick_scenarios.yaml +0 -0
  28. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/tests/realistic_scenarios.yaml +0 -0
  29. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/tests/scenario_examples.yaml +0 -0
  30. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/welcome_files/welcome_file_msg.txt +0 -0
  31. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/best-valera/welcome_files//320/247/320/265/320/272 /320/273/320/270/321/201/321/202 /320/277/320/276 152/320/244/320/227 /320/270 323/320/244/320/227 /320/264/320/273/321/217 /320/274/320/265/320/264/320/270/321/206/320/270/320/275/321/213.pdf" +0 -0
  32. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/prompts/2product_info.txt +0 -0
  33. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/prompts/3objection_handling.txt +0 -0
  34. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/prompts/final_instructions.txt +0 -0
  35. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/prompts/help_message.txt +0 -0
  36. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/prompts/welcome_message.txt +0 -0
  37. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/tests/quick_scenarios.yaml +0 -0
  38. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/tests/realistic_scenarios.yaml +0 -0
  39. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/tests/scenario_examples.yaml +0 -0
  40. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/welcome_files/welcome_file_msg.txt +0 -0
  41. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/bots/valera/welcome_files//320/247/320/265/320/272 /320/273/320/270/321/201/321/202 /320/277/320/276 152/320/244/320/227 /320/270 323/320/244/320/227 /320/264/320/273/321/217 /320/274/320/265/320/264/320/270/321/206/320/270/320/275/321/213.pdf" +0 -0
  42. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/configs/valera/cats//320/224/320/276/320/263/320/276/320/262/320/276/321/200.pdf" +0 -0
  43. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/configs/valera/cats//320/272/320/276/320/275/320/270.jpg" +0 -0
  44. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/configs/valera/cats//320/272/320/276/321/202.jpg" +0 -0
  45. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/configs/valera/cats//320/273/320/265/321/201.jpg" +0 -0
  46. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/configs/valera/tests/fixes_elina.yaml +0 -0
  47. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/configs/valera/welcome_file//320/247/320/265/320/272 /320/273/320/270/321/201/321/202 /320/277/320/276 152/320/244/320/227 /320/270 323/320/244/320/227 /320/264/320/273/321/217 /320/274/320/265/320/264/320/270/321/206/320/270/320/275/321/213.pdf" +0 -0
  48. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/create_tag.sh +0 -0
  49. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/docker-compose.yml +0 -0
  50. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/env.example +0 -0
  51. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/requirements.txt +0 -0
  52. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/save_backup.sh +0 -0
  53. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/save_fixes.sh +0 -0
  54. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/__init__.py +0 -0
  55. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/admin/__init__.py +0 -0
  56. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/admin/admin_logic.py +0 -0
  57. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/admin/admin_manager.py +0 -0
  58. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/admin/admin_migration.sql +0 -0
  59. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/admin/admin_tester.py +0 -0
  60. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/admin/timeout_checker.py +0 -0
  61. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/analytics/analytics_manager.py +0 -0
  62. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/cli.py +0 -0
  63. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/config.py +0 -0
  64. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/prompts/1sales_context.txt +0 -0
  65. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/prompts/2product_info.txt +0 -0
  66. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/prompts/3objection_handling.txt +0 -0
  67. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/prompts/final_instructions.txt +0 -0
  68. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/prompts/help_message.txt +0 -0
  69. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/prompts/welcome_message.txt +0 -0
  70. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/reports/test_20250924_064229.txt +0 -0
  71. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/reports/test_20250924_064335.txt +0 -0
  72. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/reports/test_20250924_064638.txt +0 -0
  73. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/tests/quick_scenarios.yaml +0 -0
  74. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/tests/realistic_scenarios.yaml +0 -0
  75. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/tests/scenario_examples.yaml +0 -0
  76. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/welcome_file/welcome_file_msg.txt +0 -0
  77. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/configs/growthmed-october-24/welcome_file//320/247/320/265/320/272 /320/273/320/270/321/201/321/202 /320/277/320/276 152/320/244/320/227 /320/270 323/320/244/320/227 /320/264/320/273/321/217 /320/274/320/265/320/264/320/270/321/206/320/270/320/275/321/213.pdf" +0 -0
  78. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/bot_utils.py +0 -0
  79. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/conversation_manager.py +0 -0
  80. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/decorators.py +0 -0
  81. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/message_sender.py +0 -0
  82. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/router.py +0 -0
  83. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/router_manager.py +0 -0
  84. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/states.py +0 -0
  85. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/core/telegram_router.py +0 -0
  86. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/creation/__init__.py +0 -0
  87. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/creation/bot_testing.py +0 -0
  88. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/event/__init__.py +0 -0
  89. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/integrations/openai_client.py +0 -0
  90. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/integrations/supabase_client.py +0 -0
  91. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/message/__init__.py +0 -0
  92. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/router/__init__.py +0 -0
  93. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/setup_checker.py +0 -0
  94. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/supabase/__init__.py +0 -0
  95. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/table/database_structure.sql +0 -0
  96. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/table/schema.sql +0 -0
  97. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/utils/__init__.py +0 -0
  98. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/utils/debug_routing.py +0 -0
  99. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/utils/prompt_loader.py +0 -0
  100. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/smart_bot_factory/utm_link_generator.py +0 -0
  101. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/system_prompt_example.txt +0 -0
  102. {smart_bot_factory-0.2.4 → smart_bot_factory-0.2.5}/valera.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smart-bot-factory
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Библиотека для создания умных чат-ботов
5
5
  Author-email: Kopatych <kopatych@example.com>
6
6
  License: MIT
@@ -114,7 +114,16 @@ async def add_external_api_data(messages, user_id, session_id):
114
114
  # })
115
115
  return messages
116
116
 
117
- # ХУК 4: Фильтр отправки
117
+ # ХУК 4: Обработка ответа AI
118
+ @bot_builder.process_response
119
+ async def add_promo_to_price_response(response_text, ai_metadata, user_id):
120
+ """Добавляем промо-код к ответам о ценах"""
121
+ if "цен" in response_text.lower() or "стоимост" in response_text.lower():
122
+ response_text += "\n\n🎁 Промокод FIRST10 для скидки 10% на первый визит!"
123
+
124
+ return response_text, ai_metadata
125
+
126
+ # ХУК 5: Фильтр отправки
118
127
  @bot_builder.filter_send
119
128
  async def allow_all_messages(user_id, response_text):
120
129
  """Разрешаем все сообщения (можно добавить блокировку по условию)"""
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "smart-bot-factory"
3
- version = "0.2.4"
3
+ version = "0.2.5"
4
4
  description = "Библиотека для создания умных чат-ботов"
5
5
  authors = [
6
6
  {name = "Kopatych", email = "kopatych@example.com"}
@@ -52,6 +52,7 @@ class BotBuilder:
52
52
  self._message_validators: List = [] # Валидация ДО обработки
53
53
  self._prompt_enrichers: List = [] # Обогащение системного промпта
54
54
  self._context_enrichers: List = [] # Обогащение контекста для AI
55
+ self._response_processors: List = [] # Обработка ответа AI
55
56
  self._send_filters: List = [] # Фильтры перед отправкой пользователю
56
57
 
57
58
  # Флаги инициализации
@@ -437,6 +438,28 @@ class BotBuilder:
437
438
  logger.info(f"✅ Зарегистрирован обогатитель контекста: {handler.__name__}")
438
439
  return handler
439
440
 
441
+ def process_response(self, handler):
442
+ """
443
+ Регистрирует обработчик ответа AI (ПОСЛЕ получения ответа)
444
+
445
+ Args:
446
+ handler: async def(response_text: str, ai_metadata: dict, user_id: int) -> tuple[str, dict]
447
+
448
+ Example:
449
+ @bot_builder.process_response
450
+ async def modify_response(response_text, ai_metadata, user_id):
451
+ # Модифицируем ответ
452
+ if "цена" in response_text.lower():
453
+ response_text += "\\n\\n💰 Актуальные цены на сайте"
454
+ return response_text, ai_metadata
455
+ """
456
+ if not callable(handler):
457
+ raise TypeError(f"Обработчик должен быть callable, получен {type(handler)}")
458
+
459
+ self._response_processors.append(handler)
460
+ logger.info(f"✅ Зарегистрирован обработчик ответа: {handler.__name__}")
461
+ return handler
462
+
440
463
  def filter_send(self, handler):
441
464
  """
442
465
  Регистрирует фильтр отправки (может блокировать отправку пользователю)
@@ -466,6 +489,7 @@ class BotBuilder:
466
489
  'validators': self._message_validators.copy(),
467
490
  'prompt_enrichers': self._prompt_enrichers.copy(),
468
491
  'context_enrichers': self._context_enrichers.copy(),
492
+ 'response_processors': self._response_processors.copy(),
469
493
  'send_filters': self._send_filters.copy()
470
494
  }
471
495
 
@@ -624,6 +624,19 @@ async def process_user_message(message: Message, state: FSMContext, session_id:
624
624
 
625
625
  logger.info(f"✅ Финальный текст для отправки: {len(response_text)} символов")
626
626
 
627
+ # ============ ХУК 4: ОБРАБОТКА ОТВЕТА ============
628
+ response_processors = message_hooks.get('response_processors', [])
629
+ for processor in response_processors:
630
+ try:
631
+ response_text, ai_metadata = await processor(
632
+ response_text,
633
+ ai_metadata,
634
+ message.from_user.id
635
+ )
636
+ logger.info(f"✅ Ответ обработан '{processor.__name__}'")
637
+ except Exception as e:
638
+ logger.error(f"❌ Ошибка в обработчике ответа '{processor.__name__}': {e}")
639
+
627
640
  # Обновляем этап сессии и качество лида
628
641
  if ai_metadata:
629
642
  logger.info("🔍 Анализ метаданных от ИИ:")
@@ -732,7 +745,7 @@ async def process_user_message(message: Message, state: FSMContext, session_id:
732
745
 
733
746
  logger.info(f"📱 Отправляем пользователю: {len(final_response)} символов")
734
747
 
735
- # ============ ХУК 4: ФИЛЬТРЫ ОТПРАВКИ ============
748
+ # ============ ХУК 5: ФИЛЬТРЫ ОТПРАВКИ ============
736
749
  send_filters = message_hooks.get('send_filters', [])
737
750
  for filter_func in send_filters:
738
751
  try:
@@ -32,10 +32,10 @@ class SupabaseClient:
32
32
  # Автоматически загружаем настройки из .env
33
33
  self._load_env_config()
34
34
 
35
- # Инициализируем клиент
36
- self.client: Optional[Client] = None
35
+ # Инициализируем клиент СИНХРОННО прямо в __init__
36
+ self.client = create_client(self.url, self.key)
37
37
 
38
- logger.info(f"🚀 Инициализация SupabaseClient для bot_id: {self.bot_id}")
38
+ logger.info(f" SupabaseClient инициализирован для bot_id: {self.bot_id}")
39
39
 
40
40
  def _load_env_config(self):
41
41
  """Загружает конфигурацию из .env файла"""
@@ -80,15 +80,6 @@ class SupabaseClient:
80
80
  logger.error(f" Искали в: {bot_env_path}")
81
81
  return None
82
82
 
83
- async def initialize(self):
84
- """Инициализация клиента Supabase"""
85
- try:
86
- self.client = create_client(self.url, self.key)
87
- logger.info(f"✅ Supabase client инициализирован{f' для bot_id: {self.bot_id}' if self.bot_id else ''}")
88
- except Exception as e:
89
- logger.error(f"❌ Ошибка инициализации Supabase client: {e}")
90
- raise
91
-
92
83
  # =============================================================================
93
84
  # МЕТОДЫ ДЛЯ РАБОТЫ С ПОЛЬЗОВАТЕЛЯМИ
94
85
  # =============================================================================
@@ -1259,7 +1259,7 @@ wheels = [
1259
1259
 
1260
1260
  [[package]]
1261
1261
  name = "smart-bot-factory"
1262
- version = "0.2.3"
1262
+ version = "0.2.4"
1263
1263
  source = { editable = "." }
1264
1264
  dependencies = [
1265
1265
  { name = "aiofiles" },