up-kairos
Kairos, a temporal and numeric PDDL planner, as an engine of the Unified Planning Framework (UPF).
Kairos plans in the same process (no files, no subprocess), anytime, and proves when no plan exists. Every plan is validated before it is returned.
pip install up-kairos
import up_kairos
from unified_planning.shortcuts import OneshotPlanner
up_kairos.register() # until UPF lists Kairos among its engines
with OneshotPlanner(name="kairos") as planner:
result = planner.solve(problem, timeout=10)
print(result.status, result.plan)
Operation modes
| UPF | Kairos |
|---|---|
OneshotPlanner |
a plan; with a quality metric and a timeout, the best within it |
AnytimePlanner |
each better plan as it comes (increasing quality), then the best |
PlanValidator |
Kairos' validator: VAL's semantics, numeric, temporal, PDDL3 |
Replanner |
through UPF's meta engine: Replanner(problem, name="replanner[kairos]") |
Results:
SOLVED_OPTIMALLYwhen Kairos proves the plan optimal for the problem's metric.UNSOLVABLE_PROVENwhen it proves there is no plan: the search space runs out, the timed literals take what the goal needs too soon, or there is no plan even without durations.UNSOLVABLE_INCOMPLETELYwhen the engines that apply ran out of states without being complete for the task.TIMEOUT,MEMOUT,UNSUPPORTED_PROBLEM.
Kairos' diagnostics, including why there is no plan, are in result.log_messages. Its
statistics are in result.metrics: expanded nodes, states, plans and peak memory.
Problems
Kairos plans with:
- Classical planning, with negative, disjunctive, existential and universal conditions and conditional effects.
- Numeric planning, linear or not, with bounded numeric fluents and undefined values.
- Object fluents.
- Temporal planning, with required concurrency, timed effects (timed initial literals and fluents), duration inequalities and durations that read fluents.
- Continuous effects, processes and events (PDDL+).
- Trajectory constraints and state invariants.
- Quality metrics: action costs, plan length, makespan, final value, and oversubscription.
It plans 52 of the 66 example problems of UPF 1.3. The rest are hierarchical, scheduling, integer or boolean parameters, intermediate conditions, timed goals and undefined booleans.
Notes:
- Writing for Kairos. Some things go beyond what UPF's PDDL writer writes, so this engine
writes them itself:
- object fluents, as PDDL 3.1;
- oversubscription, as goal preferences and a metric of the gain lost;
- bounded fluents, as state invariants.
- One instance at a time. A durative action does not overlap itself, as in POPF:
SELF_OVERLAPPINGis not declared. - Simultaneous happenings follow PDDL 2.1 and VAL. Happenings that interfere need epsilon
between them (
problem.epsilon, 0.001 by default). Kairos' plans keep that separation. - PDDL+ plans and their end. A PDDL+ plan ends when the goal is checked, after letting
processes and events act. UPF's plans have no end time, so it comes in
result.metrics["kairos_plan_end"], andPlanValidatoranswersUNKNOWNfor PDDL+.
Options
OneshotPlanner(name="kairos", params={...}):
anytimetimeout: the default when the call gives none.threadsmemory_limit_mbengine:"auto","m1","m2"or"m3".searchseedstop_after_no_improvementtarget_cost
License
Apache-2.0.
Metadata
Release files for up-kairos 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| up_kairos-0.1.0.tar.gz | 20.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| up_kairos-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.2 kB
Release files / up_kairos-0.1.0.tar.gz
| Download URL | up_kairos-0.1.0.tar.gz |
|---|---|
| Size | 20.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8921fcd7a09f87d9ee91564bc94a91237c0cbd26e903733585a9bf37ec599e8d
|
|
BLAKE2b-256 checksum How to use checksums |
bbcfbfb1f6621e4107487e7ad97e2f9fa6324617d7353ff399171c47662ae4ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logRelease files / up_kairos-0.1.0-py3-none-any.whl
| Download URL | up_kairos-0.1.0-py3-none-any.whl |
|---|---|
| Size | 17.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2d77e3aaa3e65f2bfe6421f873468ebc5db43cedff89a82c407292279f9879ae
|
|
BLAKE2b-256 checksum How to use checksums |
82dd13efea9a0b1f992fa47d1f583daa4a297ad507699ab2b9618fa232c904f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency log