У нас есть готовая вёрстка и дизайн системы. Необходимо реализовать функционал:
• Окно чата с историей сообщений (хранится на сервере, подгружается при входе).
• Поле ввода текста, кнопка отправки.
• Поддержка Markdown (таблицы, списки, жирный/курсив, заголовки, ссылки, код) с обязательной санитизацией (XSS защита).
• Поддержка Mermaid.js (рендеринг диаграмм: последовательности, классов, блок-схем, ER, gantt и т.д.). Диаграммы должны быть интерактивными (зум, панорамирование).
• Стриминг ответов («эффект печати»). Должна быть возможность прервать генерацию (кнопка «Стоп»).
• Контекстная память: в каждом запросе к API отправляются последние N сообщений (N задаётся в админке, по умолчанию 7). Формат хранения – массив объектов { role: "user"/"assistant", content: "..." }.
• Индикатор набора текста (печатает ИИ).
• Регистрация: email, пароль (минимальная длина 8 символов, проверка сложности). Без подтверждания email.
• Вход по email/паролю, восстановление пароля через email.
• Лимит токенов: каждому пользователю назначается лимит в токенах (значение задаётся в админке, по умолчанию 100 000 в день). Подсчёт токенов ведётся суммарно по всем запросам (входные + выходные токены модели) с использованием метода токенизации, совместимого с OpenAI (tiktoken).
o При достижении лимита пользователь получает уведомление и блокируется возможность отправки новых запросов до следующего дня.
o В интерфейсе отображается оставшееся количество токенов (прогресс-бар).
• История чатов: все диалоги сохраняются на сервере, пользователь может просматривать предыдущие диалоги, продолжать любой из них (с сохранением контекста).
• Кнопка «Экспорт в PDF» в текущем диалоге.
• Отдельный вход (или единый с возможностью разграничения прав).
• Роли: администратор (полный доступ), контент-менеджер (доступ к редактированию текстов и промптов, без управления лимитами и просмотра логов пользователей).