- Add shared proxy module (bot/utils/proxy.py) to eliminate duplicate SOCKS5 parsing - Fix AI client: escape HTML before Markdown→HTML conversion, unify timeouts, make health check optional and disabled by default, handle 429 retries - Fix ai.py: correct forwarded message handling (aiogram 3.x forward_origin), pass relevant summaries via extra_system_content - Fix dialogue.py: only respond to Astra's messages, use system context instead of prompt injection, answer on the limit message before phase transition - Fix voice.py: load Whisper model in thread pool, safe WAV path generation - Improve database.py: composite indexes, Boolean is_active, upsert file_id cache, add context cleanup helper - Update weather.py and yadisk_download.py to use shared proxy connector - Update yadisk.py: validate URL before cache clear, add download size limit, wrap sync file ops in to_thread - Reuse S3 client via lru_cache - Update setup_commands with /aiclear and /aiuser - Update README, Dockerfile (Python 3.11), docker-compose (mount models) - Pin dependency versions, remove unused httpx[socks] - Add basic pytest tests for layout converter and voice normalization
44 lines
1.9 KiB
Python
44 lines
1.9 KiB
Python
import os
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
BOT_TOKEN = os.getenv("BOT_TOKEN", "")
|
|
|
|
PROXY_ENABLED = os.getenv("PROXY_ENABLED", "false").lower() == "true"
|
|
PROXY_URL = os.getenv("PROXY_URL", "")
|
|
API_WEATHER = os.getenv("API_WEATHER", "")
|
|
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY", "")
|
|
ROUTERAI_API_KEY = os.getenv("ROUTERAI_API_KEY", "")
|
|
ROUTERAI_BASE_URL = os.getenv("ROUTERAI_BASE_URL", "https://routerai.ru/api/v1")
|
|
ROUTERAI_MODEL = "deepseek/deepseek-v4-flash"
|
|
|
|
MODERATION_LIMIT = 25
|
|
MODERATION_WINDOW = 60
|
|
MODERATION_BAN_DURATION = 300
|
|
|
|
AI_CONTEXT_LIMIT = 10
|
|
AI_DIALOGUE_LIMIT = 50
|
|
AI_PHASE2_LIMIT = 20
|
|
AI_COOLDOWN = 3600
|
|
AI_BLOCK_DEFAULT_DURATION = 86400
|
|
|
|
# Health check periodically calls every free model to test availability.
|
|
# This consumes API tokens; disabled by default.
|
|
AI_HEALTH_CHECK_ENABLED = os.getenv("AI_HEALTH_CHECK_ENABLED", "false").lower() == "true"
|
|
AI_HEALTH_CHECK_INTERVAL = int(os.getenv("AI_HEALTH_CHECK_INTERVAL", "600"))
|
|
|
|
ACCESS_KEY = os.getenv("ACCESS_KEY", "").strip()
|
|
SECRET_KEY = os.getenv("SECRET_KEY", "").strip()
|
|
BUCKET_NAME = os.getenv("BUCKET_NAME", "").strip()
|
|
|
|
AI_SYSTEM_PROMPT = (
|
|
"Ты — Астра, универсальный справочный AI-помощник в Telegram чате. "
|
|
"Твоя задача — помогать искать информацию, объяснять сложные вещи просто. "
|
|
"Отвечай кратко, чётко, с основной сутью. Если пользователь не попросил развёрнутый ответ — не расписывай. "
|
|
"Если контекст разговора закончился и ты потеряла нить, скажи что-то милое и отвлекающее, "
|
|
'например "я потеряла мысль" или "смотри, какая птичка!".'
|
|
)
|
|
|
|
DATABASE_URL = "sqlite+aiosqlite:///./bot/data/umb.db"
|