Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BBD6 v2.6 - актуальная спецификация
- версия на 23.07.2026
- Документ обновлен после ревью и фиксирует не только фичи, но и контракт,
- типы, ошибки, зависимости и архитектурные причины решений.
- Кратко о версии
- v2.6 сохраняет AI-пайплайн v2.5 и вводит переключаемый Discord backend:
- - selenium (стабильный, полный)
- - playwright (новый, совместимый, расширяемый)
- AI-слой не зависит от драйвера браузера: смена backend не требует правок
- в ai/, memory/, emotion/, persona/.
- Структура проекта v2.6
- V2.6[2-mind]-Undetect/
- bbd6-v2.6.py Основной цикл
- config.py Настройки окружения и путей
- activity.py
- detection.py
- text_helpers.py
- ai/ Граф, генерация, validation и tool-команды
- memory/ ChatLog, recall, индексы и память
- emotion/ appraise и состояние эмоций
- persona/ профили, факты, режимы и эффективность
- prompts/ промпты и стилевые профили
- content/ инструменты и контентные банки
- runtime/
- discord_init.py Выбор backend и инициализация сессии
- message_routing.py Маршрутизация Chat vs Reply
- idle.py idle cycle, life post, GIF
- reaction_tool.py Реакции и favourite emoji logic
- startup.py начальная инициализация памяти/кэшей
- tool_handlers.py служебные tool handlers
- creator_discipline.py правила creator mode
- Discord-Tools/
- Discord_Tools/ Selenium backend
- Discord_Tools_Playwright/ Playwright backend
- cache/
- data/ chatlog, индексы, persona/user state
- logs/ debug файлы runtime
- settings/runtime/.env
- documentation/
- Discord Backend Contract
- Версия контракта: Discord Backend Contract 1.0
- Цель: стабилизировать API между AI-слоем и браузерными реализациями, чтобы
- добавлять новые функции без разлома вызывающего кода.
- Интерфейс (Contract 1.0):
- class DiscordBackend:
- # Messaging
- send_chat(text: str) -> SendResult
- send_reply(message_id: str, text: str) -> SendResult
- react(message_id: str, emoji_name: str | None = None) -> ReactResult
- edit(message_id: str, text: str) -> EditResult
- delete(message_id: str) -> DeleteResult
- typing(duration_s: float | None = None) -> None
- # Navigation and session
- navigate(guild: str, channel: str) -> NavigateResult
- validate_session() -> bool
- restore_session() -> bool
- # Read model
- get_messages_in_view() -> list[Message]
- Примечание по совместимости текущего кода:
- - Текущие публичные имена в проекте: Chat, ReplyToMessage, NavigateChannel,
- GetMessagesInView, IsMessageReplyToUser.
- - Они считаются legacy-compatible facade для Contract 1.0.
- - Новые backends должны реализовывать Contract 1.0 полностью или возвращать
- NotImplementedResult для неподдерживаемых операций.
- Реализация статуса методов (на 23.07.2026)
- Selenium backend (Discord_Tools/main.py):
- - send_chat: supported (через Chat)
- - send_reply: supported (через ReplyToMessage)
- - react: supported
- - edit: not implemented
- - delete: not implemented
- - typing: partial (эмуляция через human typing)
- - navigate: supported (через NavigateChannel)
- - validate_session: supported
- - restore_session: supported
- Playwright backend (Discord_Tools_Playwright/main.py):
- - send_chat: supported (через Chat)
- - send_reply: supported (через ReplyToMessage)
- - react: stub (совместимая заглушка)
- - edit: not implemented
- - delete: not implemented
- - typing: partial (через keyboard typing delays)
- - navigate: supported (через NavigateChannel)
- - validate_session: supported
- - restore_session: supported
- Типы данных (Contract 1.0)
- Текущий runtime всё еще потребляет тройки (timestamp, author, text), но
- нормативная модель для расширения контракта фиксируется уже сейчас.
- Message:
- - id: str
- - timestamp: str
- - author: str
- - text: str
- - reply_to: str | None
- - attachments: list[Attachment]
- - raw: dict | None
- Attachment:
- - id: str | None
- - kind: str # image, video, file, embed, sticker, other
- - url: str | None
- - filename: str | None
- - size_bytes: int | None
- SendResult:
- - ok: bool
- - message_id: str | None
- - error_code: str | None
- - details: str | None
- NavigateResult:
- - ok: bool
- - guild: str
- - channel: str
- - error_code: str | None
- - details: str | None
- Ошибки и исключения
- В Contract 1.0 backend должен либо бросить backend-исключение, либо вернуть
- Result с error_code. Смешивание допустимо только на границе legacy API.
- Базовые ошибки:
- - BackendError
- - DOMChangedError
- - ChannelNotFoundError
- - SessionExpiredError
- - RateLimitedError
- - PermissionDeniedError
- - TransportError
- - NotImplementedBackendError
- Правила поведения по основным операциям:
- get_messages_in_view():
- - DOM изменился: DOMChangedError или [] (если включен soft mode)
- - сессия истекла: SessionExpiredError
- - канал недоступен/не открыт: ChannelNotFoundError
- - временный рейтлимит: RateLimitedError
- navigate():
- - канал/сервер не найден: ChannelNotFoundError
- - редирект на login: SessionExpiredError
- send_chat()/send_reply():
- - нет прав отправки: PermissionDeniedError
- - рейтлимит: RateLimitedError
- - target message отсутствует (reply): ChannelNotFoundError или TransportError
- react()/edit()/delete():
- - не реализовано backend-ом: NotImplementedBackendError
- AI pipeline (подробнее)
- route:
- - Классифицирует тип входа (упоминание, reply-to-bot, обычная активность).
- - Выделяет сигнал важности и предварительный режим реакции.
- decide:
- - Принимает решение, отвечать или пропустить.
- - Учитывает вероятностные фильтры, creator mode, anti-bait и ignore-шансы.
- retrieve:
- - Достает релевантный контекст автора и темы из chatlog/памяти.
- - Добавляет recalled history и связанные факты для текущего turn.
- reason:
- - Генерирует кандидат ответа через LLM с учетом mood/emotion/style.
- - Применяет активные цели, mode hints и ограничения длины.
- validate:
- - Проверяет повторы, low-quality паттерны, anchoredness и уместность.
- - Отсекает слабые ответы или переводит в fallback стиль.
- Производительность
- Важно: значения зависят от latency Discord DOM и LLM API.
- Оценочные диапазоны v2.6:
- - Runtime цикл без генерации ответа: ~120-450 ms
- - Runtime цикл с генерацией ответа: ~0.9-3.5 s (обычно API-bound)
- - Навигация в канал при активной сессии: ~1.5-6 s
- - Первая инициализация нового профиля: до ручного логина пользователя
- Данные и индексы:
- - Инициализация chatlog/index при старте: O(n)
- - Поиск по индексам/ключам: около O(log n) при корректной структуре индекса
- - Dedupe на видимых сообщениях: O(k), где k = количество видимых сообщений
- Факторы просадки:
- - Частые DOM-изменения Discord
- - Слишком агрессивные тайминги polling
- - Медленные API-ответы модели
- - Рост chatlog без плановой ротации
- Зависимости
- Базовые Python (см. pyproject.toml):
- - Python >= 3.11
- - openai
- - together
- - pydantic, pydantic-settings
- - python-dotenv
- - requests
- - pillow
- - faiss-cpu
- - sentence-transformers
- - numpy
- Runtime/browser:
- - Selenium backend: selenium + chromedriver + Chrome/Chromium
- - Playwright backend: playwright + chromium (playwright install chromium)
- Локальные компоненты:
- - Discord_Tools (внутрипроектный модуль)
- - Discord_Tools_Playwright (внутрипроектный модуль)
- Конфигурация backend
- Ключевые переменные:
- - DT_ENGINE=selenium|playwright|pw
- - HEADLESS=true|false
- - PW_PROFILE_PATH=<path>
- - CHROME_BINARY_PATH=<path>
- - CHROMEDRIVER_PATH=<path> # Selenium only
- Значения по умолчанию:
- - DT_ENGINE -> selenium
- - HEADLESS -> false
- - PW_PROFILE_PATH -> V2.6[2-mind]-Undetect/sessions/discord_profile_pw
- Логи и диагностика
- Текущее состояние (реально существующие файлы):
- - cache/logs/debug_last_request.md
- - cache/logs/debug_discussion.md
- - cache/logs/debug_answer.md
- - cache/logs/seen_message_keys.txt
- Рекомендуемая целевая схема логов (следующий этап):
- - cache/logs/runtime.log общий runtime-цикл и state transitions
- - cache/logs/errors.log исключения и stack traces
- - cache/logs/backend.log действия backend (navigate/send/read)
- - cache/logs/llm.log latency и параметры LLM-запросов
- Важно: целевая схема выше пока частично не реализована отдельными файлами.
- Почему архитектура сделана так
- Почему Playwright отдельным backend:
- - Selenium остается стабильным и уже покрывает существующие сценарии.
- - Playwright развивается параллельно без риска регрессий в production-потоке.
- Почему persistent profile:
- - Сессия Discord сохраняется между рестартами.
- - Меньше ручной авторизации и меньше риск лишних login-flow коллизий.
- Почему контракт backend:
- - AI-слой не должен знать о DOM-селекторах и браузерных деталях.
- - Упрощается замена/добавление backend без переписывания main loop.
- Почему legacy facade сохраняется:
- - Позволяет мигрировать поэтапно, не ломая bbd6-v2.6.py одним коммитом.
- Ограничения текущей версии
- - В Playwright backend react/edit/delete пока не завершены.
- - Контракт 1.0 частично представлен через legacy-методы; полная миграция на
- send_* naming запланирована как отдельный refactor.
- - При изменениях DOM Discord селекторы требуют актуализации в backend-коде.
- Roadmap (архитектурный)
- Если проект масштабируется дальше, целевая декомпозиция:
- - interfaces/
- - backends/selenium
- - backends/playwright
- - models/
- - services/
- - repositories/
- - events/
- Смысл: отделить runtime orchestration, backend adapters и доменные модели.
- Итог
- v2.6 теперь документирован как система с versioned backend-контрактом,
- формальными типами и ошибками. Это снижает риск разлома интерфейса при
- добавлении новых операций (edit/delete/attachments) и готовит основу для
- Contract 2.0 без хаотичных миграций.
Add Comment
Please, Sign In to add comment