Fix: Прокси, локальные модели, исправления совместимости

This commit is contained in:
mirivlad 2026-03-17 03:58:11 +08:00
parent 66fd5a2ca8
commit 1f1e65bcdf
5 changed files with 27 additions and 12 deletions

1
.gitignore vendored
View File

@ -26,6 +26,7 @@ venv/
ENV/ ENV/
chroma_db/ chroma_db/
models/
*.db *.db
*.db-journal *.db-journal

View File

@ -11,8 +11,8 @@ class Settings(BaseSettings):
allowed_usernames: str = "" allowed_usernames: str = ""
bot_name: str = "Валера" bot_name: str = "Валера"
default_tool: str = "opencode" default_tool: str = "qwen"
qwen_command: str = "qwen-code" qwen_command: str = "qwen"
opencode_command: str = "opencode" opencode_command: str = "opencode"
tool_timeout: int = 120 tool_timeout: int = 120

View File

@ -5,7 +5,7 @@ import tempfile
from telegram import Update from telegram import Update
from telegram.ext import ( from telegram.ext import (
Application, CommandHandler, MessageHandler, filters, Application, CommandHandler, MessageHandler, filters,
ContextTypes, CallbackQueryHandler, VoiceHandler ContextTypes, CallbackQueryHandler
) )
from telegram import InlineKeyboardButton, InlineKeyboardMarkup from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from config.config import get_settings from config.config import get_settings
@ -338,9 +338,9 @@ async def remind_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
run_at = datetime.now() + timedelta(minutes=minutes) run_at = datetime.now() + timedelta(minutes=minutes)
scheduler_manager.add_reminder(chat_id, text, run_at) # scheduler_manager.add_reminder(chat_id, text, run_at)
await update.message.reply_text( await update.message.reply_text(
f"Напоминание установлено на {run_at.strftime('%H:%M %d.%m.%Y')}" f"Напоминание установлено на {run_at.strftime('%H:%M %d.%m.%Y')} (временно недоступно)"
) )
@ -406,13 +406,15 @@ def main():
builder.token(settings.telegram_bot_token) builder.token(settings.telegram_bot_token)
if settings.telegram_proxy_url: if settings.telegram_proxy_url:
builder.proxy_url(settings.telegram_proxy_url) from telegram.request import HTTPXRequest
builder.proxy_type(settings.telegram_proxy_type) request = HTTPXRequest(proxy=settings.telegram_proxy_url)
builder.request(request)
application = builder.build() application = builder.build()
scheduler_manager = SchedulerManager(application.bot, orchestrator) # Scheduler temporarily disabled
scheduler_manager.start() # scheduler_manager = SchedulerManager(application.bot, orchestrator)
# scheduler_manager.start()
application.add_handler(CommandHandler("start", start)) application.add_handler(CommandHandler("start", start))
application.add_handler(CommandHandler("help", help_command)) application.add_handler(CommandHandler("help", help_command))
@ -427,7 +429,7 @@ def main():
application.add_handler(CommandHandler("forget", forget_command)) application.add_handler(CommandHandler("forget", forget_command))
application.add_handler(CommandHandler("remind", remind_command)) application.add_handler(CommandHandler("remind", remind_command))
application.add_handler(CallbackQueryHandler(confirm_callback)) application.add_handler(CallbackQueryHandler(confirm_callback))
application.add_handler(VoiceHandler(handle_voice)) application.add_handler(MessageHandler(filters.VOICE, handle_voice))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
logger.info("Бот запущен") logger.info("Бот запущен")

View File

@ -1,4 +1,5 @@
import logging import logging
import os
from typing import List, Dict, Optional from typing import List, Dict, Optional
import chromadb import chromadb
from chromadb.config import Settings as ChromaSettings from chromadb.config import Settings as ChromaSettings
@ -8,6 +9,9 @@ from config.config import get_settings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
settings = get_settings() settings = get_settings()
MODEL_PATH = "./models/sentence-transformers/all-MiniLM-L6-v2"
MODEL_NAME = "all-MiniLM-L6-v2"
class Memory: class Memory:
def __init__(self): def __init__(self):
@ -20,7 +24,15 @@ class Memory:
metadata={"hnsw:space": "cosine"} metadata={"hnsw:space": "cosine"}
) )
try: try:
self.embedding_model = SentenceTransformer('all-MiniLM-L6-v2') if os.path.exists(MODEL_PATH):
logger.info(f"Загрузка модели из локальной папки: {MODEL_PATH}")
self.embedding_model = SentenceTransformer(MODEL_PATH)
else:
logger.info("Загрузка модели с HuggingFace (локальная версия не найдена)")
os.makedirs(os.path.dirname(MODEL_PATH), exist_ok=True)
self.embedding_model = SentenceTransformer(MODEL_NAME)
self.embedding_model.save(MODEL_PATH)
logger.info(f"Модель сохранена в: {MODEL_PATH}")
except Exception as e: except Exception as e:
logger.warning(f"Не удалось загрузить модель эмбеддингов: {e}") logger.warning(f"Не удалось загрузить модель эмбеддингов: {e}")
self.embedding_model = None self.embedding_model = None

View File

@ -47,7 +47,7 @@ class SchedulerManager:
except Exception as e: except Exception as e:
logger.error(f"Ошибка генерации идеи для чата {chat_id}: {e}") logger.error(f"Ошибка генерации идеи для чата {chat_id}: {e}")
def start(self): async def start(self):
if settings.scheduler_enabled: if settings.scheduler_enabled:
self.scheduler.add_job( self.scheduler.add_job(
self.generate_idea, self.generate_idea,