from app.domain.gpu import expand_gpu_aliases, parse_aliases from app.domain.model_type import engine_for_model from app.storage.repositories import Repository from app.scheduler.budget import Budget class Planner: def __init__(self, repo: Repository, budget: Budget, default_aliases: list[str]): self.repo = repo self.budget = budget self.default_aliases = default_aliases def materialize_tasks(self) -> int: created = 0 for candidate in self.repo.list_candidates(): if engine_for_model(candidate["model_id"]) != "vllm": continue aliases = parse_aliases(candidate["target_gpu_aliases"], self.default_aliases) for gpu_alias, gpu_type in expand_gpu_aliases(aliases): if not self.budget.can_create_task(): return created if self.repo.insert_task_if_absent(candidate["model_id"], gpu_alias, gpu_type, candidate["priority"]): created += 1 return created