AAYMA
RU
Войти

Select

Streamlit-приложение: подбирает до трёх подрядчиков под город, дату, формат, категорию и бюджет, исключает занятых, объясняет каждую рекомендацию и…

Рабочий MVP
Команда «Select» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Select
Кейс HackAlem.ai: Креативные индустрии — Firebird
Стадия: Рабочий MVP

Задача кейса: «#79-lite»: подобрать до 3 подрядчиков для мероприятия и объяснить выбор

Суть

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

Как устроено

Каталог contractors.csv (66 анонимизированных профилей) фильтруется в matcher.py по календарю занятости и условиям допуска, затем сортируется в устойчивом порядке. explanations.py собирает проверяемые факты и конкретную деталь из описания. По явному согласию пользователя OpenAI gpt-4.1-mini может выбрать один из заранее проверенных фрагментов описания, но на отбор и порядок не влияет; при ошибке API используется локальное объяснение.

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

  • детерминированная фильтрация по ограничениям
  • проверка календаря занятости
  • устойчивая сортировка
  • шаблонные объяснения по фактам
  • LLM выбирает фрагмент из проверенных вариантов

Особенности

LLM ограничен выбором из заранее проверенных фрагментов, поэтому не может выдумать факт или изменить ранжирование. Интерфейс показывает, когда выбор модели совпал с локальным. В README есть демо-таблица краевых случаев: редкая категория, нет категории, не проходит бюджет, смена даты.

Стек

Python · Streamlit · pytest

Модели

gpt-4.1-mini


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

README

README.md

Select — подбор подрядчиков для событий

Select выбирает до трёх подрядчиков под город, дату, формат, категорию и бюджет. Он исключает занятых, объясняет каждую рекомендацию и честно сообщает, если вариантов мало или их нет. Решение кейса #79-lite, трек 06 HackAlem AI.

Форма запроса и превью города

Запуск

Нужен Python 3.11+ и интернет для первой установки пакетов. Откройте терминал в корне репозитория.

macOS / LinuxWindows PowerShell
python3 -m venv .venvpy -3 -m venv .venv
./.venv/bin/python -m pip install -r requirements.txt.\.venv\Scripts\python.exe -m pip install -r requirements.txt
./.venv/bin/python -m streamlit run app.py.\.venv\Scripts\python.exe -m streamlit run app.py

Откройте локальный адрес из терминала. .env и API-ключ не нужны: без них Select использует локальные объяснения. Чистый запуск только с requirements.txt, без OpenAI SDK и ключа, проверен отдельно.

Демо за две минуты

Во всех строках формат — свадьба. Для сравнения дат оставайтесь в одной вкладке и каждый раз нажимайте «Подобрать подрядчиков».

СценарийГород · категорияДатаБюджетРезультат
Плотная категорияАлматы · Ведущий10.10.20262 000 000 ₸3 карточки
Смена только датыАлматы · Ведущий11.10.20262 000 000 ₸другая тройка и пояснение занятости
Редкая категорияАлматы · Флорист10.10.2026300 000 ₸1 карточка и причина нехватки
Категории нетАстана · Декоратор10.10.20263 000 000 ₸сообщение об отсутствии категории
Не проходит бюджетАлматы · Ведущий10.10.2026100 000 ₸объяснение пустой выдачи

Для проверки площадок: Алматы · Банкетный зал · 14.11.2026 · 6 000 000 ₸. Язык и длительность задаются в «Дополнительных условиях». Повтор того же запроса сохраняет порядок.

Карточки с ценой от и конкретными объяснениями

Что внутри

ЧастьЗадача
app.py · Streamlit 1.64.0форма, превью города, карточки и пустые состояния
matcher.py · Pythonкалендарь, условия допуска и устойчивый порядок
explanations.pyпроверяемые факты и конкретная деталь описания
data/contractors.csv66 анонимизированных профилей, 13 полей; даты 23.09–31.12.2026

Цена показана «от» за мероприятие; свободная дата в каталоге не подтверждает бронирование. Синтетические профили и заполненные при подготовке город/цена помечаются. Бронирования, заявок и уведомлений нет.

OpenAI необязателен: модель выбирает один из проверенных фрагментов описания, но не меняет отбор и порядок. Её выбор иногда совпадает с локальным — интерфейс это показывает. При ошибке API работают локальные объяснения. Для AI отдельно установите requirements-ai.txt и задайте OPENAI_API_KEY в окружении или локальном .env; модель по умолчанию — gpt-4.1-mini. Не добавляйте ключ в Git. NVIDIA API приложению не нужен.

В разработке участвовали AI-агенты Codex: отдельные задачи по подбору, объяснениям и интерфейсу были интегрированы и проверены вместе. При запуске отдельный агентный сервис не нужен.

Конфигурация развёртывания

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

НастройкаДля Select
Ветка / входной файлmain / app.py
Python / зависимости3.12 / корневой requirements.txt
Тема.streamlit/config.toml
Секреты базового режимане нужны

Для AI в облаке дополнительно нужен openai==2.54.0 в зависимостях окружения и корневой OPENAI_API_KEY в Secrets, а не в Git. См. зависимости и секреты. Деплой не выполнялся.

Проверки и ограничения

./.venv/bin/python -m pip install -r requirements-dev.txt
./.venv/bin/python -m pytest -q

На Windows используйте .\.venv\Scripts\python.exe. Даты вне окна каталога нельзя считать свободными; пустой max_hours означает услугу без фиксированного времени на площадке. Подробный контракт — в MVP_CONTRACT.md.

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

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

Andn1ght 14

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

  • 2026-09-23 17:58Document keyless launch and add project screenshotsAndn1ght
  • 2026-09-23 17:45Clarify optional AI explanation outcomesAndn1ght
  • 2026-09-23 17:29Clarify optional AI role against hackathon briefAndn1ght
  • 2026-09-23 17:15Record validated live AI demo resultAndn1ght
  • 2026-09-23 17:13Harden AI excerpt choices and disclose sent dataAndn1ght
  • 2026-09-23 16:57Require explicit opt-in before OpenAI explanationsAndn1ght
  • 2026-09-23 16:54Fix matching evidence and date comparison clarityAndn1ght
  • 2026-09-23 16:34Enable secure local OpenAI configurationAndn1ght
Все коммиты (14)
  • 2026-09-23 16:06Record final Select QA outcomeAndn1ght
  • 2026-09-23 16:03Polish Select interface and city previewsAndn1ght
  • 2026-09-23 16:00Verify matching reasons and improve explanationsAndn1ght
  • 2026-09-23 14:46Refine explanations and complete MVP QAAndn1ght
  • 2026-09-23 14:35Record completed MVP handoff statusAndn1ght
  • 2026-09-23 14:32Build contractor matching MVP for HackAlem AIAndn1ght
Структура репозитория (26 файлов)
.env.example
.gitignore
.streamlit/config.toml
HACKATHON_CONTEXT.md
INTEGRATION_PLAN.md
MVP_CONTRACT.md
README.md
app.py
assets/cities/abroad.png
assets/cities/almaty.png
assets/cities/astana.png
assets/readme/form.png
assets/readme/results.png
config.py
data/contractors.csv
explanations.py
matcher.py
models.py
requirements-ai.txt
requirements-dev.txt
requirements.txt
tests/conftest.py
tests/test_config.py
tests/test_explanations.py
tests/test_matcher.py
tests/test_mvp_flow.py

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

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

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