AAYMA
RU
Войти

RedRed

Витрина каталога ЕКТ со встроенным AI-консультантом (RU, KK, EN).

Доведённый продукт
Команда «RedRed» 21💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: RedRed
Кейс HackAlem.ai: Торговля — Электрокомплект · ekt.kz
Стадия: Доведённый продукт

Задача кейса: AI-консультант по каталогу ekt.kz: товары, аналоги, цены, остатки, корзина

Суть

Витрина каталога ЕКТ со встроенным AI-консультантом (RU, KK, EN). Консультант ищет товары, характеристики и аналоги, разбирает вложения и готовит предложение в корзину с подтверждением. Есть React-админка для синхронизации каталога и выбора модели.

Как устроено

FastAPI передаёт запрос и ограниченный контекст в OpenAI Responses API (gpt-6-sol) с вызовом серверных инструментов: поиск, карточки, аналоги, условия покупки, история. Ответ идёт потоком по WebSocket. Бэкенд проверяет структуру ответа и ссылки на товары. После явного подтверждения цена и остаток перезапрашиваются в API ЕКТ, и позиции записываются в корзину одной транзакцией в PostgreSQL. Фоновая синхронизация обходит каталог ЕКТ. При сбое основного ключа используется резервный.

Ключевые решения

  • function/tool calling
  • streaming ответов (WebSocket)
  • структурированный вывод
  • резервный API-ключ (failover)
  • синхронизация каталога по расписанию
  • замер TTFT и оценка диалогов

Особенности

Полноценная витрина с фильтрами и учётом кратности продажи. В админке можно проверить и переключить модель, смотреть диалоги и управлять синхронизацией каталога. В каталоге ai/ лежат скрипты замера TTFT и оценки мультиязычных диалогов с сохранёнными отчётами. Гостевая корзина при входе объединяется с корзиной аккаунта.

Стек

Python · FastAPI · PostgreSQL 17 · SQLAlchemy 2 · asyncpg · React 19 · TypeScript · Vite 8 · Tailwind CSS 4 · shadcn/ui · Docker Compose · nginx

Модели

gpt-6-sol (OpenAI)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-63e62cb7-redred.

README

README.md

RedRed — AI-консультант для каталога ЕКТ

1. Название проекта

RedRed — веб-приложение с AI-консультантом для покупателей электротехнической продукции ЕКТ.

Репозиторий: BAITC-Hacks/hack-63e62cb7-redred.

2. Какую проблему решает проект

Покупателю нужно найти товар среди множества артикулов, разобраться в характеристиках, проверить наличие и документы, а затем выбрать количество. RedRed объединяет каталог и диалог с консультантом: пользователь описывает задачу обычным текстом или прикладывает спецификацию, а приложение обращается к данным товаров и формирует предложение.

Решение предназначено для покупателей и специалистов, подбирающих электротехнические товары. Результат покупки в прототипе — сохранённая корзина приложения; оформление заказа на ekt.kz не выполняется.

3. Что реализовано

КомпонентВозможности
КаталогПоиск по названию и артикулу, категории, фильтры характеристик, наличия и документов, сортировка по цене, страницы по 20 товаров.
Карточка товараЦена, общий остаток, характеристики, изображения и ссылки на документы, если они доступны в источнике.
AI-консультантДиалог на русском, казахском и английском; поиск товаров, запрос характеристик и условий покупки, подбор кандидатов в аналоги, подготовка предложения для корзины.
ЧатИстория сообщений, HTTP- и WebSocket-транспорт, статусы обработки, передача частей ответа, подтверждение или отмена предложения.
ВложенияPDF, JPEG, DOCX и XLSX: до трёх файлов в сообщении, до 10 МБ каждый.
КорзинаДобавление после подтверждения, изменение количества и удаление позиций; проверка актуальной цены и наличия перед подтверждением.
АккаунтыГостевой режим, регистрация, вход и выход клиента; сохранение данных и обработка конфликта гостевой корзины с корзиной аккаунта. Избранное реализовано на уровне API.
React-админкаОбзор показателей, просмотр диалогов, управление синхронизацией каталога и её настройками, проверка и выбор AI-модели.
СинхронизацияПолный обход каталога ЕКТ или обновление загруженных карточек, запуск вручную и по расписанию, остановка, счётчики и история ошибок.

Администратор входит по отдельному серверному паролю. Регистрация клиента не предоставляет административный доступ.

4. Как работает решение

  1. Пользователь открывает каталог и чат. Для начала диалога регистрация не требуется: приложение создаёт гостевую сессию.
  2. Пользователь вводит название, артикул, вопрос о товаре или прикладывает файл со спецификацией.
  3. FastAPI передаёт запрос и ограниченный контекст диалога AI-сервису. Модель вызывает серверные инструменты поиска, получения карточек, аналогов, условий покупки и истории.
  4. Бэкенд проверяет структуру результата и ссылки на товары. Фронт показывает ответ, карточки и, при запросе покупки, предложение с количеством и стоимостью.
  5. Пользователь явно подтверждает предложение. Бэкенд повторно получает цену и остаток из ЕКТ.
  6. При успешной проверке товары записываются в корзину одной транзакцией. Пользователь видит результат на странице /cart. Если цена изменилась или товара недостаточно, приложение сообщает об этом.

Сам ответ модели не означает, что товар добавлен: изменение корзины требует отдельного подтверждения.

5. Технологии

ОбластьИспользуемые технологии
ФронтендTypeScript, React 19, Vite 8, Tailwind CSS 4, компоненты shadcn/ui и Radix UI, иконки Lucide, шрифт Geist.
БэкендPython, FastAPI, Uvicorn, Pydantic, HTTPX, WebSocket.
ХранениеPostgreSQL 17, SQLAlchemy 2, asyncpg; вложения хранятся в серверной файловой системе.
AIOpenAI Responses API, вызовы инструментов, структурированный результат и потоковая передача текста.
МодельПо умолчанию в конфигурации указана gpt-6-sol. Модель задаётся через OPENAI_MODEL; администратор может выбрать доступную модель после успешной проверки.
Внешние данныеAPI каталога ЕКТ с серверной Basic Auth, ссылки на документы и сведения об оплате и доставке ЕКТ.
ПроверкиPython unittest, HTTPX ASGI-транспорт и подмены внешних API; TypeScript и сборка Vite.
Локальная инфраструктураDocker Compose для PostgreSQL. Фронтенд и бэкенд запускаются отдельными процессами.

Модель не обучается в этом проекте. Ключи AI и учётные данные ЕКТ используются на сервере.

6. Архитектура проекта

flowchart LR
    U[Покупатель / администратор] --> F[React: каталог, чат, корзина, админка]
    F -->|HTTP / WebSocket| B[FastAPI]
    B --> D[(PostgreSQL)]
    B --> S[AI-сервис и серверные инструменты]
    S --> O[OpenAI Responses API]
    S --> C[Сервис каталога]
    B --> C
    C --> E[API ЕКТ]
    C --> D
    B --> A[Файлы вложений]

Основные директории и модули:

  • frontend/src/components/store — каталог, карточки и корзина; chat — виджет консультанта; admin — панель администратора.
  • backend/main.py — приложение FastAPI и подключение маршрутов.
  • backend/chat.py и backend/assistant/ — обработка диалога, интеграция с моделью и разбор вложений.
  • backend/catalog.py, ekt_client.py, catalog_sync.py — поиск по сохранённым карточкам, запросы ЕКТ и фоновое обновление.
  • backend/cart.py, auth.py, sessions.py — корзины, аккаунты и сессии.
  • backend/admin.py, admin_ai.py, ai_control.py — административный API и управление моделью.
  • backend/models.py, migrate.py — модели данных и начальное создание схемы.
  • backend/data/ — сохранённые карточки и справочные данные; backend/tests/ и tests/ — тесты; ai/ — диагностические скрипты AI.

PostgreSQL хранит каталог, сессии, аккаунты, сообщения, предложения, корзины и настройки. Приложение использует cookie и CSRF-токены для изменяющих запросов. В режиме разработки Vite перенаправляет /api на FastAPI.

7. Установка и запуск

Инструкция рассчитана на Windows PowerShell. Нужны Python 3.12, Node.js 22.12 или новее, npm, Git и работающий Docker с Compose. Для полного сценария требуются ключ OpenAI и учётные данные API ЕКТ.

В командах используется абсолютный путь C:\HackAlem\redred. Если репозиторий уже клонирован в другое место, замените этот префикс во всех командах. Порты 5432, 8000 и 5173 должны быть свободны.

Шаг 1. Получить проект и подготовить зависимости

git clone https://github.com/BAITC-Hacks/hack-63e62cb7-redred.git 'C:\HackAlem\redred'
py -3.12 -m venv 'C:\HackAlem\redred\backend\.venv'
& 'C:\HackAlem\redred\backend\.venv\Scripts\python.exe' -m pip install -r 'C:\HackAlem\redred\backend\requirements.txt'
npm --prefix 'C:\HackAlem\redred\frontend' ci

Шаг 2. Настроить окружение

В новом клоне создайте локальный файл конфигурации:

Copy-Item -LiteralPath 'C:\HackAlem\redred\.env.example' -Destination 'C:\HackAlem\redred\.env'

Заполните в .env следующие параметры:

ПеременнаяЗначение / назначение
DATABASE_URLpostgresql+asyncpg://hackalem:[email protected]:5432/hackalem для PostgreSQL из Compose.
POSTGRES_PASSWORD, REDRED_DB_PORTДля этого локального примера: hackalem и 5432; для сервера задайте собственный пароль.
SECURE_COOKIEfalse для локального HTTP; для опубликованного HTTPS — true.
APP_ORIGINhttp://localhost:5173.
ADMIN_ORIGINУстановите http://localhost:5173 для входа в админку через фронтенд.
ADMIN_PASSWORDЗадайте собственный пароль администратора; логин не требуется.
OPENAI_API_KEYКлюч OpenAI с доступом к выбранной модели.
OPENAI_MODELИдентификатор модели; значение в примере — gpt-6-sol.
OPENAI_FALLBACK_API_KEYНеобязательный резервный ключ.
EKT_API_USERNAME, EKT_API_PASSWORDУчётные данные API ЕКТ.
CATALOG_SYNC_ENABLEDДля первого запуска с сохранённой выборкой установите false. Ручная синхронизация доступна в админке.
UPLOAD_DIRКаталог вложений; по умолчанию backend/uploads относительно корня проекта.

Бэкенд не загружает .env автоматически. В терминале, где будут запускаться миграция и FastAPI, выполните следующую команду. Она читает строки KEY=VALUE без вывода значений:

Get-Content -Encoding UTF8 -LiteralPath 'C:\HackAlem\redred\.env' | ForEach-Object { if ($_ -match '^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$') { [Environment]::SetEnvironmentVariable($matches[1], $matches[2].Trim().Trim([char]34).Trim([char]39), 'Process') } }

После изменения .env повторите загрузку переменных и перезапустите бэкенд. Реальные ключи и пароли не входят в репозиторий.

Шаг 3. Поднять PostgreSQL и загрузить начальные данные

docker compose -f 'C:\HackAlem\redred\compose.yaml' up -d db
docker compose -f 'C:\HackAlem\redred\compose.yaml' ps

Дождитесь состояния healthy у базы, затем в том же терминале выполните:

Set-Location 'C:\HackAlem\redred'; & 'C:\HackAlem\redred\backend\.venv\Scripts\python.exe' -m backend.migrate
Set-Location 'C:\HackAlem\redred'; & 'C:\HackAlem\redred\backend\.venv\Scripts\python.exe' -m backend.import_catalog --demo

Импорт добавляет 21 сохранённую карточку и не обращается к ЕКТ. Чтобы расширить каталог, после запуска откройте админку и выберите полный обход. Число товаров зависит от загруженных данных.

Шаг 4. Запустить бэкенд

В том же терминале с загруженными переменными окружения:

Set-Location 'C:\HackAlem\redred'; & 'C:\HackAlem\redred\backend\.venv\Scripts\python.exe' -m uvicorn backend.main:app --host 127.0.0.1 --port 8000

Шаг 5. Запустить фронтенд

В отдельном терминале:

npm --prefix 'C:\HackAlem\redred\frontend' run dev -- --host localhost --port 5173 --strictPort
АдресНазначение
http://localhost:5173Каталог и чат.
http://localhost:5173/cartКорзина.
http://localhost:5173/adminАдминка; пароль из ADMIN_PASSWORD.
http://127.0.0.1:8000/docsИнтерактивная документация API.
http://127.0.0.1:8000/health/Проверка доступности процесса.
http://127.0.0.1:8000/readyПроверка подключения к PostgreSQL.

Сборка фронтенда:

npm --prefix 'C:\HackAlem\redred\frontend' run build

Результат — frontend/dist. FastAPI может отдавать собранную админку по /admin и её ресурсы; для входа напрямую через порт 8000 нужно соответствующее значение ADMIN_ORIGIN. Без сборки этот маршрут возвращает FRONTEND_NOT_BUILT.

8. Как проверить решение

Сценарий для жюри

Предварительно запустите приложение, импортируйте начальную выборку и настройте действующие ключ OpenAI и доступ к ЕКТ.

  1. Откройте http://localhost:5173 и найдите артикул 200300285_ из начальной выборки. Откройте карточку и посмотрите характеристики.
  2. Откройте чат и отправьте: «Расскажи о товаре 200300285_: характеристики, наличие и документы». Ожидаемый результат — ответ консультанта с данными товара и доступными ссылками.
  3. Отправьте: «Добавь 2 штуки товара 200300285_ в корзину». Если актуальные цена и остаток позволяют покупку, приложение должно показать предложение.
  4. Проверьте, что до подтверждения корзина не изменилась. Подтвердите предложение кнопкой в чате.
  5. Перейдите в корзину: должны отображаться товар, количество и стоимость. При недостатке остатка, изменении цены или ошибке внешнего API приложение должно показать отказ, а не успешную покупку.
  6. Откройте http://localhost:5173/admin, войдите по заданному паролю. В разделе «Каталог» запустите обновление и проверьте прогресс и историю; в «Чатах» найдите диалог.
  7. Для проверки расширенного каталога запустите полный обход и перейдите на следующую страницу витрины. API возвращает до 20 товаров за запрос, а total содержит общее число совпадений.

Цена, наличие, документы и время ответа зависят от внешних сервисов. Для проверки только интерфейса предусмотрен явный режим VITE_DEMO_MODE=true в frontend/.env.local; он не подтверждает работоспособность AI или интеграции ЕКТ и по умолчанию выключен.

Точечные проверки

Проверка контракта ассистента без реальных запросов к OpenAI и без БД:

Set-Location 'C:\HackAlem\redred'; & 'C:\HackAlem\redred\backend\.venv\Scripts\python.exe' -m unittest tests.test_assistant_service -v

Проверка входа администратора, CSRF, запуска и отмены синхронизации на тестовой БД с созданной схемой и собранным фронтендом; синхронизатор подменяется, обращения к ЕКТ не выполняются:

Set-Location 'C:\HackAlem\redred'; & 'C:\HackAlem\redred\backend\.venv\Scripts\python.exe' -m unittest backend.tests.test_admin_sync.AdminSyncTest.test_login_access_csrf_trigger_cancel_logout -v

9. Данные и интеграции

  • Каталог ЕКТ: https://ekt.kz/api/products и https://ekt.kz/api/products/detail. Сервер получает карточки через Basic Auth, сохраняет их в PostgreSQL и обновляет по запросу или расписанию.
  • OpenAI: https://api.openai.com/v1/responses для диалога и обработки поддерживаемых вложений; /v1/models для списка моделей в админке. Используется store=false.
  • Начальные данные: backend/data/demo_products.json содержит 21 сохранённую карточку ЕКТ с датой снимка 23 сентября 2026 года. Это снимки внешнего источника, а не собственный каталог команды и не гарантия актуальных остатков.
  • Документы: backend/data/demo_documents.json содержит дополнительные ссылки на документы; карточки также используют сведения, полученные от ЕКТ.
  • Условия покупки: backend/data/purchase_terms.json — сохранённые сведения со страницы https://ekt.kz/checkout-delivery/. В источнике отмечено расхождение порогов бесплатной доставки; приложение сохраняет это предупреждение.
  • Внешние материалы: UI использует React, Tailwind, shadcn/ui, Radix UI, Lucide и Geist. Изображения, характеристики и документы товаров происходят из источников ЕКТ. Предобученная AI-модель предоставляется OpenAI.

PDF и JPEG передаются модели; из DOCX и XLSX извлекается ограниченный текст. Метаданные вложений хранятся в БД, сами файлы — на сервере.

10. Ограничения текущей версии

  • Корзина принадлежит RedRed: приложение не создаёт заказ на ekt.kz, не резервирует товар и не принимает оплату.
  • Поиск охватывает загруженные карточки. До завершения синхронизации локальная база может содержать только часть каталога.
  • Для автоматов и коробок единица — штука, шаг продажи берётся из положительной целой кратности KRATNOST_MIN карточки EKT. Четыре ранее проверенных товара сохраняют запасное правило при отсутствии кратности. Неизвестные категории и некорректная кратность блокируются. Проверены артикул 200300276_, 20 исходных карточек, кратность упаковки и отказ при неверном шаге; внешняя корзина после этого исправления ещё не проверена.
  • Аналоги подбираются по заданным характеристикам для поддерживаемых категорий автоматических выключателей. Это кандидаты для проверки, а не гарантия инженерной взаимозаменяемости.
  • Отображается общий остаток; выбор склада и бронирование не реализованы. Свежесть сохранённой карточки ограничена временем последнего обновления.
  • Ответы AI и запросы ЕКТ зависят от доступности, прав доступа и задержек внешних API. Лимит обычного сообщения — 28 секунд, сообщения с вложениями — 40 секунд; внутренний лимит ассистента — 27,4 секунды, ожидание фронта — 50 секунд. Это предельные ожидания, а не обещанное время ответа.
  • В контекст модели передаётся ограниченная история; поиск более ранних сообщений выполняется по словам внутри текущей сессии. Полная история не помещается в каждый запрос.
  • Гостевая сессия по умолчанию действует 24 часа; вложения доступны в течение часа. Очистка истёкших данных запускается отдельной командой backend.cleanup.
  • Подтверждение email и восстановление пароля не реализованы. Аккаунты RedRed не являются аккаунтами ekt.kz.
  • XLSX-формулы не пересчитываются. Разбор офисных файлов ограничен объёмом текста; распознавание изображения не гарантирует точную идентификацию товара.
  • Команда создания схемы не заменяет полноценное управление миграциями для произвольных будущих изменений БД. Нагрузочные гарантии и отказоустойчивый кластер в репозитории не заявлены.

11. Развёрнутая версия

Публичная версия: staffvision.ttvs.kz/red-red/.

Главная страница доступна без логина и пароля. Для проверки клиентского сценария можно начать с гостевого режима или использовать демонстрационный аккаунт.

Доступ для жюри

Данные входа в опубликованную версию предоставлены командой:

РольАдресЛогинПароль
КлиентОткрыть сайт → кнопка входа в аккаунтclientclient
АдминистраторОткрыть админкуНе требуетсяadmin

В клиентском аккаунте можно проверить чат и корзину, в админке — каталог, диалоги, настройки синхронизации и AI-модели. Эти данные относятся к демонстрационному развёртыванию; для локального запуска пароль администратора задаётся через ADMIN_PASSWORD. Серверные ключи OpenAI и учётные данные API ЕКТ посетителю не нужны и в README не публикуются.

Локальный запуск описан в разделе 7. Публичное приложение размещено по префиксу /red-red/; фрагмент обратного прокси находится в deploy/red-red.nginx.conf.

Для публикации compose.yaml собирает и запускает PostgreSQL, backend и frontend с Nginx. Nginx раздаёт React, проксирует /api с поддержкой WebSocket и возвращает index.html для /cart, /admin и /admin/*. Инструкция запуска из архива приведена ниже.

Быстрый запуск из архива на сервере

Создание тестового клиента и настройка администратора скриптом

После заполнения .env выполните из корня проекта:

CLIENT_LOGIN='<логин>' CLIENT_PASSWORD='<пароль>' ADMIN_PASSWORD='<пароль администратора>' sh scripts/create-demo-accounts.sh

Скрипт обновляет только ADMIN_PASSWORD в .env, пересобирает контейнеры и создаёт клиента с отдельной сессией и корзиной. Повторный запуск не меняет пароль существующего клиента. Для admin-пароля скрипт принимает латинские буквы, цифры, _ и -. Клиент входит через «Логин или электронная почта»; публичная регистрация по-прежнему требует email и пароль минимум 8 символов. Админка использует только пароль, отдельного admin-логина нет. Проверены сборка frontend и четыре проверки валидации/хеширования; создание аккаунта на целевой БД ещё не проверено.

Публикация через Staffvision в /red-red/

Целевой адрес: https://staffvision.ttvs.kz/red-red/, админка: https://staffvision.ttvs.kz/red-red/admin/catalog. В .env: VITE_BASE_PATH=/red-red/, APP_ORIGIN=https://staffvision.ttvs.kz, ADMIN_ORIGIN=https://staffvision.ttvs.kz, SECURE_COOKIE=true, REDRED_BIND_ADDRESS=127.0.0.1, REDRED_FRONTEND_PORT=8083. Origin не содержит путь. Заполните пароли и ключи, затем выполните docker compose up -d --build --wait --wait-timeout 180.

На том же сервере скопируйте location-фрагмент:

sudo mkdir -p /etc/nginx/snippets
sudo install -m 644 deploy/red-red.nginx.conf /etc/nginx/snippets/red-red.conf
sudo grep -Rl 'server_name.*staffvision.ttvs.kz' /etc/nginx/sites-enabled /etc/nginx/conf.d

В найденном конфигурационном файле добавьте внутрь существующего HTTPS-блока server для Staffvision строку include /etc/nginx/snippets/red-red.conf;. Существующие location и конфигурацию Staffvision сохраняйте. Фрагмент рассчитан на Nginx, установленный непосредственно на сервере; для Nginx в контейнере нужен доступный ему upstream вместо 127.0.0.1.

sudo nginx -t && sudo systemctl reload nginx
curl -fsS https://staffvision.ttvs.kz/red-red/ready
curl -fsS 'https://staffvision.ttvs.kz/red-red/api/products?limit=1'

Прокси снимает /red-red/ перед передачей контейнеру, сохраняет WebSocket Upgrade и ограничивает cookie путём /red-red/. Frontend собирается с этим префиксом, админка определяет префикс из своего URL. После изменения VITE_BASE_PATH нужна пересборка frontend. Публикация на внешнем сервере пока не проверена.

Прямой запуск по IP (альтернатива)

Для этого варианта дополнительно задайте VITE_BASE_PATH=/ и REDRED_BIND_ADDRESS=0.0.0.0; origin и cookie настройте как указано ниже.

Нужен Linux-сервер с Docker Engine и Docker Compose v2, доступом к интернету для сборки и открытым TCP-портом 8083. Python, Node.js и PostgreSQL на сервер вручную устанавливать не нужно.

unzip redred-server.zip
cd redred
cp .env.example .env
nano .env
docker compose up -d --build --wait --wait-timeout 180

В .env задайте POSTGRES_PASSWORD (длинный случайный пароль из букв и цифр), APP_ORIGIN=http://SERVER_IP:8083, ADMIN_ORIGIN=http://SERVER_IP:8083, ADMIN_PASSWORD, OPENAI_API_KEY, EKT_API_USERNAME и EKT_API_PASSWORD. Origin должен точно совпадать с адресом в браузере, без пути и завершающего /. Для HTTP оставьте SECURE_COOKIE=false; для HTTPS за внешним прокси задайте оба HTTPS-origin и SECURE_COOKIE=true. При изменении порта измените REDRED_FRONTEND_PORT и оба origin. Внешний прокси должен пропускать WebSocket Upgrade для /api/chat/ws. TLS-сертификат в этот Compose не входит.

Откройте http://SERVER_IP:8083/, корзину /cart, админку /admin/catalog. Nginx раздаёт frontend и проксирует API, WebSocket и админку; backend ждёт готовности PostgreSQL, создаёт схему и загружает 21 исходную карточку только в пустой каталог. База и вложения сохраняются в Docker volumes при перезапуске. Не выполняйте docker compose down -v, если нужно сохранить данные. DATABASE_URL из .env заменяется в контейнере адресом внутренней БД. Пароль уже созданной БД нельзя сменить простым изменением .env.

Проверка после запуска:

docker compose ps
curl -fsS http://localhost:8083/ready
curl -fsS 'http://localhost:8083/api/products?limit=1'
docker compose logs --tail=50 backend

В браузере проверьте каталог, отправку сообщения в чат и подтверждение добавления в корзину. Живые ответы AI требуют действующего ключа и квоты, свежие карточки и подтверждение корзины — доступного EKT API. Без этих доступов начальный каталог не означает работоспособность внешних интеграций.

Повторная упаковка актуальных исходников из репозитория: python scripts/package_release.py. Результат — release/redred-server.zip. Архив содержит исходники и .env.example, исключает рабочие .env, зависимости, локальные загрузки и отчёты. Передавайте рабочий .env отдельно либо заполните его на сервере. Контейнерные образы собираются на сервере; архив не является офлайн-поставкой Docker images.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
31
Авторы
3
Файлы
136
Ветки
1

Авторы коммитов

Dossymzhan Yessenov 17Muratov Daniyar 9Damir Zhunusov 5

История коммитов

  • 2026-09-23 17:56feat: deploy RedRed with Docker Compose under Staffvision subpathDossymzhan Yessenov
  • 2026-09-23 17:56fix: use EKT sale multiplicity for breakers and boxesDossymzhan Yessenov
  • 2026-09-23 17:56feat: provision client accounts and configure demo administratorDossymzhan Yessenov
  • 2026-09-23 17:51Обновил README для жюри и добавил доступ к демонстрацииMuratov Daniyar
  • 2026-09-23 17:41Увеличил таймауты ответа ИИ на двадцать секундMuratov Daniyar
  • 2026-09-23 17:31Merge remote-tracking branch 'origin/main'Damir Zhunusov
  • 2026-09-23 17:30feat: refine EKT catalog, documents, and cart UIDamir Zhunusov
  • 2026-09-23 17:29Перенёс админку на ReactMuratov Daniyar
Все коммиты (31)
  • 2026-09-23 17:10fix: отличать отсутствие результата поиска от нулевого остаткаDossymzhan Yessenov
  • 2026-09-23 17:06feat: включить потоковый чат и ускорить поиск точного артикулаDossymzhan Yessenov
  • 2026-09-23 16:55fix: учитывать базовый путь приложения в API и корзинеDossymzhan Yessenov
  • 2026-09-23 16:53Merge remote-tracking branch 'origin/main'Dossymzhan Yessenov
  • 2026-09-23 16:53fix: отключить автоматическую подмену API демонстрационной корзинойDossymzhan Yessenov
  • 2026-09-23 16:52Добавлены фильтры каталога и управление корзинойMuratov Daniyar
  • 2026-09-23 16:44feat: build EKT storefront and assistant UIDamir Zhunusov
  • 2026-09-23 16:39Добавлено управление моделью ассистента через админкуMuratov Daniyar
  • 2026-09-23 16:21feat: переключать AI на резервный ключ при сбоеDossymzhan Yessenov
  • 2026-09-23 16:18chore: объединить обновления main с доработками ИИDossymzhan Yessenov
  • 2026-09-23 16:17feat: добавить мультиязычный чат, память и обработку отказов корзиныDossymzhan Yessenov
  • 2026-09-23 16:07docs: зафиксировать проверку AI из чистого клонаDossymzhan Yessenov
  • 2026-09-23 16:05docs: зафиксировать проверку AI из чистого клонаDossymzhan Yessenov
  • 2026-09-23 16:04Добавлены аккаунты, избранное, админка и синхронизация каталогаMuratov Daniyar
  • 2026-09-23 16:00docs: обновить статус опубликованного AI-модуляDossymzhan Yessenov
  • 2026-09-23 15:59feat: подключить потоковый AI-консультант и проверкиDossymzhan Yessenov
  • 2026-09-23 15:12Реализован бэкенд каталога, чата и подтверждаемой корзиныMuratov Daniyar
  • 2026-09-23 14:49checkpointDamir Zhunusov
  • 2026-09-23 14:32Согласованы контракты бэкенда и ассистентаMuratov Daniyar
  • 2026-09-23 14:26docs: focus AI plan on verifiable MVPDossymzhan Yessenov
  • 2026-09-23 14:12docs: add AI assistant architecture planDossymzhan Yessenov
  • 2026-09-23 13:57Подготовил бэкенд на FastAPIMuratov Daniyar
  • 2026-09-23 13:40feat: scaffold React frontend with shadcn uiDamir Zhunusov
Структура репозитория (136 файлов)
.dockerignore
.env.example
.gitattributes
.gitignore
README.md
ai/catalog_probe.py
ai/evaluate_dialogue.py
ai/evaluate_hypotheses.py
ai/measure_ttft.py
ai/reports/backend-ai-live.json
ai/reports/backend-multilingual-live.json
ai/reports/ekt-catalog-probe.json
ai/reports/openai-gpt-6-sol-dialogue.json
ai/reports/openai-gpt-6-sol-ttft.json
ai/reports/openai-gpt-6-sol.json
ai/smoke_attachments.py
ai/smoke_key_fallback.py
ai/smoke_service.py
ai/smoke_ws.py
ai/verify_backend.py
ai/verify_multilingual.py
backend/Dockerfile
backend/__init__.py
backend/admin.py
backend/admin_ai.py
backend/ai_control.py
backend/ai_provider.py
backend/assistant/__init__.py
backend/assistant/files.py
backend/assistant/service.py
backend/assistant_contract.py
backend/assistant_tools.py
backend/attachments.py
backend/auth.py
backend/bootstrap.py
backend/cart.py
backend/catalog.py
backend/catalog_sync.py
backend/chat.py
backend/chat_language.py
backend/chat_memory.py
backend/cleanup.py
backend/config.py
backend/create_client.py
backend/data/demo_documents.json
backend/data/demo_products.json
backend/data/purchase_terms.json
backend/db.py
backend/dependencies.py
backend/ekt_client.py
backend/errors.py
backend/favorites.py
backend/import_catalog.py
backend/main.py
backend/migrate.py
backend/models.py
backend/requirements.txt
backend/runtime_settings.py
backend/sessions.py
backend/tests/test_account_flow.py
backend/tests/test_admin_ai.py
backend/tests/test_admin_sync.py
backend/tests/test_admin_workspace.py
backend/tests/test_ai_control.py
backend/tests/test_ai_integration.py
backend/tests/test_assistant_models.py
backend/tests/test_auth.py
backend/tests/test_cart.py
backend/tests/test_cart_mutations.py
backend/tests/test_catalog_filters.py
backend/tests/test_catalog_search.py
backend/tests/test_catalog_sync.py
backend/tests/test_favorites.py
backend/tests/test_runtime_settings.py
compose.yaml
deploy/red-red.nginx.conf
docs/AI_ARCHITECTURE_PLAN.md
docs/AI_WORK_REPORT.md
docs/BACKEND_SPEC.md
frontend/.env.example
frontend/.gitignore
frontend/.prettierignore
frontend/.prettierrc
frontend/Dockerfile
frontend/components.json
frontend/eslint.config.js
frontend/index.html
frontend/nginx.conf
frontend/package-lock.json
frontend/package.json
frontend/public/vite.svg
frontend/src/App.tsx
frontend/src/assets/react.svg
frontend/src/components/admin/admin-page.tsx
frontend/src/components/admin/admin-shared.tsx
frontend/src/components/admin/ai-panel.tsx
frontend/src/components/admin/catalog-panel.tsx
frontend/src/components/admin/chats-panel.tsx
frontend/src/components/auth/auth-dialog.tsx
frontend/src/components/chat/chat-widget.tsx
frontend/src/components/store/storefront.tsx
frontend/src/components/theme-provider.tsx
frontend/src/components/ui/alert.tsx
frontend/src/components/ui/avatar.tsx
frontend/src/components/ui/badge.tsx
frontend/src/components/ui/button.tsx
frontend/src/components/ui/card.tsx
frontend/src/components/ui/checkbox.tsx
frontend/src/components/ui/dialog.tsx
frontend/src/components/ui/input.tsx
frontend/src/components/ui/scroll-area.tsx
frontend/src/components/ui/select.tsx
frontend/src/components/ui/sheet.tsx
frontend/src/components/ui/skeleton.tsx
frontend/src/components/ui/tabs.tsx
frontend/src/components/ui/textarea.tsx
frontend/src/components/ui/tooltip.tsx
frontend/src/index.css
frontend/src/lib/admin-api.ts
frontend/src/lib/chat-api.ts
frontend/src/lib/demo-data.ts
frontend/src/lib/utils.ts
frontend/src/main.tsx
frontend/tsconfig.app.json
frontend/tsconfig.json
frontend/tsconfig.node.json
frontend/vite.config.ts
scripts/create-demo-accounts.sh
scripts/package_release.py
tests/__init__.py
tests/test_assistant_fast.py
tests/test_assistant_service.py
tests/test_chat_languages.py
tests/test_chat_transport.py
tests/test_provisioned_login.py
tests/test_sale_multiplicity.py

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.