fix: офлайн-режим для векторной памяти и исправление меню ИИ-чата
Исправления: - Убран state_manager.reset() в menu_command — сохраняет ai_chat_mode - Добавлен callback 'toggle_ai_chat' в обработчик кнопки ИИ - Исправлено условие в get_keyboard для кнопок _on/_off - Отключена проверка HuggingFace при загрузке модели (offline режим) - Подавлены логи sentence_transformers, huggingface_hub, httpx - Добавлен .cache/ в .gitignore Теперь: - Модель all-MiniLM-L6-v2 загружается из кэша (~88MB) - Никаких запросов к HF при запуске - Кнопка ИИ-чата корректно переключается - Состояние ai_chat_mode сохраняется при вызове меню Version: 0.3.1 Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
77879e75a6
commit
b90b4ed77d
|
|
@ -23,6 +23,10 @@ bot_config.json
|
|||
# Logs
|
||||
*.log
|
||||
|
||||
# Cache
|
||||
.cache/
|
||||
huggingface_cache/
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
|
|
|||
17
bot.py
17
bot.py
|
|
@ -28,6 +28,13 @@ MAX_MESSAGE_LENGTH = 4096 # Максимальная длина сообщен
|
|||
import pexpect
|
||||
import asyncssh
|
||||
from qwen_integration import qwen_manager, QwenSessionState
|
||||
|
||||
# Подавляем логи sentence-transformers и huggingface
|
||||
import logging
|
||||
logging.getLogger("sentence_transformers").setLevel(logging.WARNING)
|
||||
logging.getLogger("huggingface_hub").setLevel(logging.WARNING)
|
||||
logging.getLogger("httpx").setLevel(logging.WARNING)
|
||||
|
||||
from vector_memory import (
|
||||
hybrid_memory_manager,
|
||||
save_message,
|
||||
|
|
@ -863,7 +870,10 @@ class MenuBuilder:
|
|||
logger.info(f"get_keyboard: user_id={user_id}, ai_chat_mode={state.ai_chat_mode}")
|
||||
|
||||
for item in items:
|
||||
if item.callback == "toggle_ai_chat":
|
||||
# Проверяем базовый callback и его варианты с _on/_off
|
||||
is_ai_toggle = item.callback in ["toggle_ai_chat", "toggle_ai_chat_on", "toggle_ai_chat_off"]
|
||||
|
||||
if is_ai_toggle:
|
||||
# Меняем текст кнопки и callback_data в зависимости от статуса
|
||||
if state.ai_chat_mode:
|
||||
label = f"✅ Выключить чат с ИИ"
|
||||
|
|
@ -1078,8 +1088,7 @@ async def menu_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|||
user = update.effective_user
|
||||
state = state_manager.get(user.id)
|
||||
|
||||
# Сброс состояния и возврат к главному меню
|
||||
state_manager.reset(user.id)
|
||||
# Не сбрасываем состояние - сохраняем ai_chat_mode и другие настройки
|
||||
state.current_menu = "main"
|
||||
|
||||
# Показать текущую директорию и сервер
|
||||
|
|
@ -1536,7 +1545,7 @@ async def menu_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|||
)
|
||||
state.current_menu = "main"
|
||||
|
||||
elif callback in ["toggle_ai_chat_on", "toggle_ai_chat_off"]:
|
||||
elif callback in ["toggle_ai_chat", "toggle_ai_chat_on", "toggle_ai_chat_off"]:
|
||||
# Переключаем режим чата с ИИ
|
||||
state.ai_chat_mode = not state.ai_chat_mode
|
||||
logger.info(f"toggle_ai_chat: user_id={user_id}, new_mode={state.ai_chat_mode}")
|
||||
|
|
|
|||
|
|
@ -75,8 +75,17 @@ class VectorMemoryStorage:
|
|||
def _get_embedding_model(self):
|
||||
"""Ленивая загрузка модели эмбеддингов."""
|
||||
if self._embedding_model is None:
|
||||
import os
|
||||
# Отключаем проверку обновлений на HuggingFace
|
||||
os.environ["TRANSFORMERS_OFFLINE"] = "1"
|
||||
os.environ["HF_HUB_OFFLINE"] = "1"
|
||||
|
||||
from sentence_transformers import SentenceTransformer
|
||||
self._embedding_model = SentenceTransformer(self.model_name)
|
||||
# local_files_only=True — загружать только из кэша
|
||||
self._embedding_model = SentenceTransformer(
|
||||
self.model_name,
|
||||
local_files_only=True
|
||||
)
|
||||
logger.info(f"Модель эмбеддингов загружена: {self.model_name}")
|
||||
return self._embedding_model
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue