BAITC Task Platform
Платформа, где бизнес описывает потребность свободным текстом, AI задаёт 3–5 уточняющих вопросов и формирует Task Card с рейтингом готовности, а…
О проекте
Команда: Джарвис
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Платформа, где бизнес описывает потребность свободным текстом, AI задаёт 3–5 уточняющих вопросов и формирует Task Card с рейтингом готовности, а команды откликаются предложениями, которые бизнес принимает вручную.
Как устроено
Backend на FastAPI с SQLite выполняет двухэтапную AI-обработку черновика (вопросы → структурированная карточка) через OpenAI-совместимый клиент (локальный LM Studio с Qwen3-VL-8B или stub-режим). Отдельный модуль детерминированно считает рейтинг готовности 0–100 по полям задачи. После явного подтверждения задача попадает в каталог, демо-команды отправляют предложения, бизнес их принимает или отклоняет; React-фронт с ролями «Бизнес»/«Фрилансер».
Ключевые решения
- двухэтапная LLM-обработка
- генерация уточняющих вопросов
- валидация JSON-ответов
- детерминированный рейтинг готовности
Особенности
Рейтинг готовности задачи считается кодом, а не LLM; поддержка полностью локальной модели через LM Studio. Первый коммит сделан утром 23.09 (07:29), до начала спринта.
Стек
Python · FastAPI · Pydantic · SQLAlchemy · SQLite · React · TypeScript · Vite
Модели
Qwen3-VL-8B (LM Studio)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-9d786474-team.
README
README.mdBAITC Task Platform
Платформа помогает бизнесу сформулировать задачу для команды исполнителей, а командам — предложить решение. Бизнес описывает потребность свободным текстом, уточняет детали, проверяет карточку задачи и вручную выбирает предложение.
Что работает
- AI-анализ черновика и 3–5 уточняющих вопросов (столько допускают текущий prompt и API-контракт).
- Структурированная Task Card и детерминированный рейтинг готовности 0–100, который рассчитывает backend.
- Явное подтверждение задачи бизнесом; в каталог попадает любая подтверждённая задача независимо от рейтинга и статуса.
- Каталог, команды, предложения и ручное принятие или отклонение предложения.
- Demo-профили бизнеса и фрилансера с редактированием через API.
- Светлая и тёмная темы с сохранением выбора в браузере.
Путь пользователя: бизнес → черновик → вопросы AI → карточка → рейтинг → подтверждение → каталог → предложение команды → ручное решение бизнеса.
Технологии и устройство проекта
Backend — FastAPI, Pydantic, SQLAlchemy и SQLite по умолчанию. backend/app/ai_service.py выполняет два этапа AI-обработки; backend/app/task_rating.py отдельно считает рейтинг по полям Task. Frontend — React, TypeScript и Vite. Vite проксирует API-запросы на локальный backend.
Основные API: POST /tasks/draft, PATCH /tasks/{task_id}, GET /tasks/{task_id}/rating, GET /catalog, GET /teams, POST /proposals, GET /tasks/{task_id}/proposals, PATCH /proposals/{proposal_id}, GET /profiles/{profile_id}, POST /profiles, PATCH /profiles/{profile_id}. Документация FastAPI доступна на http://127.0.0.1:8000/docs после запуска.
Локальный запуск
Нужны Python и Node.js с npm. Команды ниже — для PowerShell; запускать из корня репозитория, кроме явно указанного cd.
Backend
cd backend
python -m venv .venv
& ".\.venv\Scripts\python.exe" -m pip install -r requirements.txt
$env:USE_AI_STUB = "true"
& ".\.venv\Scripts\python.exe" -m uvicorn app.main:app --host 127.0.0.1 --port 8000
Режим USE_AI_STUB=true не делает внешних AI-запросов и подходит для проверки интерфейса. Backend создаёт SQLite-файл backend/tasks.db и при старте добавляет отсутствующие demo-записи без сброса существующих данных.
Для проверки реального AI через локальный LM Studio вместо stub запустите локальный сервер LM Studio, загрузите модель и задайте переменные перед запуском backend:
$env:USE_AI_STUB = "false"
$env:OPENAI_BASE_URL = "http://127.0.0.1:1234/v1"
$env:OPENAI_API_KEY = "your-key-or-local-placeholder"
$env:OPENAI_MODEL = "qwen/qwen3-vl-8b"
OPENAI_MODEL должен совпадать с ID модели, который возвращает локальный /v1/models. Реальный ключ OpenAI для LM Studio не нужен. Для обычного OpenAI-compatible клиента можно не задавать OPENAI_BASE_URL (или оставить его пустым) и передать свой ключ и модель через переменные окружения. Не сохраняйте ключи в Git.
Frontend
В другом терминале из корня репозитория:
cd frontend
npm.cmd install
npm.cmd run dev
Откройте адрес, который покажет Vite (обычно http://127.0.0.1:5173). Для сборки: npm.cmd run build. Vite proxy ожидает backend на http://127.0.0.1:8000.
Тесты backend
cd backend
& ".\.venv\Scripts\python.exe" -m pytest tests -q
Повторяемый demo-сценарий
- Откройте приложение под demo-ролью «Бизнес». В разделе «Создать задачу» опишите потребность.
- Получите 3–5 вопросов, ответьте и проверьте сформированную карточку. Недостающие данные можно дополнить вручную; рейтинг и статус возвращает backend.
- Нажмите явное подтверждение. Задача появится в каталоге при любом рейтинге и статусе; неподтверждённые задачи не публикуются.
- Переключитесь на «Фрилансер», откройте задачу и отправьте предложение от выбранной demo-команды.
- Переключитесь на «Бизнес», откройте задачу и вручную примите или отклоните отклик. Затем проверьте статус в роли фрилансера.
- Измените demo-профиль и перезагрузите страницу: сохранённые значения должны остаться. Переключите тему и обновите страницу — выбор темы сохранится.
При включённом stub AI результат служит проверке механики, а не качества модели. Для реального Stage 1/2 используйте локальный LM Studio или иной совместимый endpoint.
Demo-данные и ограничения
Seed содержит 5 исходных черновиков и 5 подтверждённых Task Card с разными рейтингами, 5 команд с названием, интересами, навыками и технологиями, 5 demo-предложений, 23 demo-профиля бизнеса и 35 demo-профилей фрилансера. Черновики хранятся в original_draft соответствующих задач, не как второй Task contract. Все записи добавляются идемпотентно, существующая БД не очищается. Внешних бизнес-интеграций seed не подключает.
Полноценной регистрации, паролей, JWT и разграничения доступа нет: переключение demo-роли хранится в localStorage. Предложения выбирает человек; автоматического подбора команды нет. Task пока не содержит связи с BusinessProfile, поэтому компания и отрасль конкретной задачи не атрибутируются автоматически. Демо-профили не представляют реальных пользователей.
Развёрнутая версия: Не развёрнуто. MVP запускается локально.
Авторы коммитов
История коммитов
- 2026-09-23 17:45Finalize HackAlem AI MVPYernar
- 2026-09-23 17:38Align MVP with HackAlem case requirementsYernar
- 2026-09-23 17:24Polish frontend and fix profile persistenceYernar
- 2026-09-23 17:15Add profiles and polished app shellYernar
- 2026-09-23 17:03Build polished frontend and user profilesYernar
- 2026-09-23 16:33Complete full-stack MVP flowYernar
- 2026-09-23 16:27Add LM Studio response format compatibilityYernar
- 2026-09-23 16:19Support configurable OpenAI-compatible AI endpointsYernar
Все коммиты (63)
- 2026-09-23 15:17Fix whitespace normalization in catalog contextAzat Arappayev
- 2026-09-23 15:16Add task catalog UI using canonical Task contractAzat Arappayev
- 2026-09-23 15:16Document Python-side Task.confirmed default fixYernar
- 2026-09-23 15:15Initialize Task confirmation before database flushYernar
- 2026-09-23 15:15Set Python default for Task confirmationYernar
- 2026-09-23 15:14Complete Task API type with persisted metadataAzat Arappayev
- 2026-09-23 15:14Export canonical Task API type for catalog reuseAzat Arappayev
- 2026-09-23 15:05Record final AI service implementation statusYernar
- 2026-09-23 15:05Finalize AI stage validation and error handlingYernar
- 2026-09-23 15:04Record verified AI validation and controlled-error fixesYernar
- 2026-09-23 15:04Test provider exceptions map to AIServiceErrorYernar
- 2026-09-23 15:04Cover validated AI stage contracts and confirmation semanticsYernar
- 2026-09-23 15:03Implement strict stage 2 validation and controlled AI failuresYernar
- 2026-09-23 15:00Add backend-driven task rating widgetAzat Arappayev
- 2026-09-23 14:55Record current Codex 2 review findingsAzat Arappayev
- 2026-09-23 14:54Align proposal type with repository contractAzat Arappayev
- 2026-09-23 14:51Remove obsolete duplicate TaskCard typeAzat Arappayev
- 2026-09-23 14:51Record persisted confirmation semantics for Codex 1Yernar
- 2026-09-23 14:51Persist confirmed only from explicit PATCHYernar
- 2026-09-23 14:51Expose Task confirmation stateYernar
- 2026-09-23 14:50Persist explicit Task confirmation stateYernar
- 2026-09-23 14:50Record Codex 1 validation and AI error handling changesYernar
- 2026-09-23 14:50Add task AI schema and rating testsYernar
- 2026-09-23 14:49Add backend test dependenciesYernar
- 2026-09-23 14:49Return controlled 502 for task AI failuresYernar
- 2026-09-23 14:49Remove duplicate frontend rating helperAzat Arappayev
- 2026-09-23 14:49Handle external AI failures and validate stage outputsYernar
- 2026-09-23 14:49Document Codex ownership and review notesAzat Arappayev
- 2026-09-23 14:48Validate Task input and AI field contractsYernar
- 2026-09-23 14:46Create instruction.txtYernar
- 2026-09-23 14:38Send complete official Task answer fields from TaskBuilderYernar
- 2026-09-23 14:38Remove deprecated duplicate AI draft flowYernar
- 2026-09-23 14:38Remove deprecated duplicate AI routerYernar
- 2026-09-23 14:37Use official tasks draft and patch flow in TaskBuilderYernar
- 2026-09-23 14:36Clarify task user rating recommendationAzat Arappayev
- 2026-09-23 14:36Add task completeness rating helperAzat Arappayev
- 2026-09-23 14:34Add AI task builder UIAzat Arappayev
- 2026-09-23 14:34Register AI draft processing routeAzat Arappayev
- 2026-09-23 14:33Add AI draft processing endpointAzat Arappayev
- 2026-09-23 14:30Use exact task AI prompts and validate stage 1 JSONYernar
- 2026-09-23 14:29Add task platform backend foundation: backend/app/main.pyYernar
- 2026-09-23 14:29Add task platform backend foundation: backend/app/routers/tasks.pyYernar
- 2026-09-23 14:29Add task platform backend foundation: backend/app/ai_service.pyYernar
- 2026-09-23 14:29Add task platform backend foundation: backend/app/schemas.pyYernar
- 2026-09-23 14:28Add task platform backend foundation: backend/app/task_rating.pyYernar
- 2026-09-23 14:28Add task platform backend foundation: backend/app/models.pyYernar
- 2026-09-23 14:28Add task platform backend foundation: backend/app/database.pyYernar
- 2026-09-23 14:28Add task platform backend foundation: backend/.env.exampleYernar
- 2026-09-23 14:28Add task platform backend foundation: backend/requirements.txtYernar
- 2026-09-23 14:28Add task platform backend foundation: .gitignoreYernar
- 2026-09-23 14:26Add TypeScript domain interfacesAzat Arappayev
- 2026-09-23 14:05Update agent details and project responsibilitiesAzat Arappayev
- 2026-09-23 13:42Delete JobHunter directoryAzat Arappayev
- 2026-09-23 07:31Move project files into JobHunter folderYernar
- 2026-09-23 07:29Initial commitYernar
Структура репозитория (36 файлов)
.github/agents/my-agent.agent.md .gitignore README.md backend/.env.example backend/app/ai_service.py backend/app/database.py backend/app/main.py backend/app/models.py backend/app/routers/catalog.py backend/app/routers/profiles.py backend/app/routers/proposals.py backend/app/routers/tasks.py backend/app/routers/teams.py backend/app/schemas.py backend/app/seed.py backend/app/task_rating.py backend/requirements.txt backend/tests/test_task_contracts.py frontend/.gitignore frontend/index.html frontend/package-lock.json frontend/package.json frontend/src/App.tsx frontend/src/components/RatingWidget.tsx frontend/src/components/TaskBuilder.tsx frontend/src/components/TaskCatalog.tsx frontend/src/main.tsx frontend/src/polish.css frontend/src/styles.css frontend/src/vite-env.d.ts frontend/tsconfig.app.json frontend/tsconfig.json frontend/tsconfig.node.json frontend/vite.config.ts instruction.txt types/index.ts
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.