Skip to content

AdorableRedPanda/tasks-queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tasks-queue

Динамическая очередь асинхронных задач.

Продуктовая постановка:

Сейчас запрос к ИИ всегда идет по одному сценарию и отрабатывает неточно, нужно чтобы в рамках одного запроса мы:

  • парсили промпт от пользователя
  • определяли, насколько понятен запрос
  • если не понятен - задавали уточняющие вопросы
  • если запрос очень простой - сразу обрабатывли его без лишних запросов к ИИ
  • иначе подгружали проект для контекста и обрабатывали запрос
  • в итоге возвщали пользователю результат в виде фронтенд экшенов

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

Требования к очереди:

  • Задачи выполняются последовательно
  • Каждая задача может быть асинхронной
  • Задачи могут добавлять новые задачи в очередь во время выполнения
  • Поддерживается таймаут выполнения
  • Задачи должны логироваться

Требования к коду:

Главное требование - простота кода и его расширяемость. Основной кейс для расширения - добавление новых типов задач, и новые зависимости между ними. Также важно, чтобы была возможность легко тестировать отдельные задачи и их взаимодействия. Очень важно не переусложнить решение и реализовать его максимально быстро с учетом требований.

При оценке:

Возможные ошибки при реализации:

  • Неявное управление зависимостями между задачами
  • Сложная реализация очереди
  • Использование готовых решений для очереди
  • Отсутствие четкой декомпозиции и разделения ответственностей в коде
  • Логирование, которое не позволяет воспроизвести процесс
  • Много кастов типизации
  • Сложная иерархия классов
  • Много условий в коде
  • Ограничения в функционале задач

Должно легко:

  • Миграция текущей обработки запроса (обычный асинхронный обработчик)
  • Реализовать диалог 2х LLM
  • Циклические зависимости между задачами
  • Параллельная работа нескольких разработчиков над задачами
  • Описание текущих задач и зависимостей без кода

Решение в этом репозитории:

  1. Для простоты и очередь будет реализована на основе простого js массива.
  2. Каждый запрос на сервис - создание очереди c одной задачей, которая запускает процесс.
  3. Очередь отвечает за итерацию по таскам.
  4. Метод обрабатывающий запрос - использует очередь(создание и добавление), обрабатывает результат тасок
  5. Зависимости между задачами односторонние - задача создает другую задачу
  6. Обработка конкретного запроса - полностью в рамках одной задачи
  7. Ветвления, циклы - реализуются с помощью создания новых задач

Порядок работы оценки:

  1. Реализация очереди, вспомогательных классов AbstractTask и RootTask (не больше пары дней)
  2. Добавление логирования (пара дней с настройкой бд)
  3. Создание таски для текущей реализации (создать таску -> вставить текущий код)
  4. По требования к новому процессу описать список тасок
  5. Оценить реализацию каждой таски (не должно быть оценок больше дня, иначе декомпозируем задачу)

About

Dynamic async tasks queue

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors