Price: 500000
Number of applications: 2
02.11.26 (inclusive)
денежное
Idea
ICT tasks
Media sphere
Other technological solutions
Purpose and description of task (project)
Наш API-шлюз к языковым моделям ограничивает число запросов на каждый API-ключ, чтобы один клиент не расходовал общую квоту провайдера
Software/ IS
Сервис на FastAPI с эндпоинтом POST /v1/echo, который принимает заголовок Authorization: Bearer <key>. На каждый ключ действует лимит N запросов за T секунд по скользящему окну; состояние хранится в Redis. При превышении - ответ 429 с заголовком Retry-After. Лимиты задаются через переменные окружения Django-проект с моделями Company и Task: название, email ответственного, cycle_days, дата последнего выполнения, статус. Метод Task.is_due(days_ahead) говорит, подходит ли срок. Ежедневная задача Celery beat находит задачи со сроком в ближайшие 3 дня и отправляет каждому ответственному одно письмо-дайджест (достаточно console email backend). Повторно в тот же день письмо не уходит. Отметка «выполнено» в Django admin сдвигает следующий срок Сервис на FastAPI + PostgreSQL: • POST /jobs — создать задание (prompt и параметры), статус queued. • POST /jobs/claim — воркер атомарно забирает одно задание через SELECT … FOR UPDATE SKIP LOCKED, статус running. • POST /jobs/{id}/complete и POST /jobs/{id}/fail — результат или ошибка. • GET /jobs/{id} — статус для клиента. Плюс воркер на Python, который в цикле забирает задания и имитирует генерацию (пауза и текстовый результат). Задания, которые висят в running дольше 10 минут, возвращаются в очередь. SPA на React + TypeScript (Vite). Данные — JSON на 500+ записей, сгенерированный скриптом: время, модель, статус (200 / 429 / 500), токены на вход и выход, задержка в мс, стоимость в $. На странице: • таблица с пагинацией и сортировкой по времени, задержке и стоимости; • фильтры по модели, статусу и датам, которые сохраняются в URL; • карточки итогов: число запросов, доля ошибок, средняя задержка, сумма; • график задержки по времени (Recharts или аналог). Данные загружаются через TanStack Query с имитацией сетевой задержки.
Репозиторий с README и docker-compose.yml (api + redis). Тесты pytest (можно с fakeredis): лимит не превышен; превышен; окно сдвинулось; разные ключи не влияют друг на друга. Репозиторий с README и docker-compose.yml (web, db, redis, celery, beat). Тесты pytest-django на is_due и на задачу рассылки. Репозиторий с README и docker-compose.yml (db, api, 2 воркера). Тесты: два воркера не получают одно задание; переходы статусов; возврат зависших заданий. Репозиторий с README и демо на GitHub Pages или Vercel. Тесты Vitest на функции фильтрации и подсчёта итогов.
Нижников Владимир Григорьевич