TeamWeaver

TeamWeaver combines LLM-based semantic task decomposition with mixed-integer quadratic programming (MIQP) for task decomposition, allocation, and replanning of heterogeneous multi-robot teams in dynamic environments.

Positioning

Inside the EAI project, TeamWeaver runs as an external planner: it reads a “task instruction + symbolic world state” and outputs a “task DAG + robot allocation”, which execution layers such as EAI, Nav2, and cmd_vel then carry out. It does not build simulation scenes and does not drive robots directly.

Core flow

Task instruction (natural language) + SymbolicWorldState
        ↓
DeepSeekSemanticDecomposer   LLM semantic decomposition into a task DAG
validate_plan_payload        capability/constraint validation
PhaseScheduler               phase/dependency scheduling
DynamicMIQPAllocator         robot-task allocation (Gurobi, falls back to the Hungarian algorithm without a license)
        ↓
TeamWeaverPlan (task DAG + allocation) → executed by EAI / Nav2

In closed-loop operation, execution layers report per-skill success/failure/timeout through ExecutionFeedback back to TeamWeaverPipeline.accept_feedback(); the pipeline advances phases accordingly and triggers replan() for re-decomposition and re-allocation when dynamic events occur (for example blocked paths or a lost robot).

Using TeamWeaver with EAI

The public API is exported by TeamWeaver.eai_adapter: TeamWeaverPipeline, DeepSeekSemanticDecomposer, DynamicMIQPAllocator, PhaseScheduler, and more. It is pure Python depending only on numpy / scipy / openai / httpx. Add algorithm/ to your PYTHONPATH first:

export PYTHONPATH="$PWD/algorithm:$PYTHONPATH"

Code, dependencies, and adapter-layer tests live under algorithm/TeamWeaver/.

Source

Upstream repository: TeamWeaver; the copy bundled with EAI lives under algorithm/TeamWeaver/.