Control Flow¶
Kedi supports deterministic and model-classified branches, conditional loops,
and sequential iterable loops. A trailing : after an inline Python condition
selects deterministic execution. Without that trailing colon, the header is a
Kedi template claim classified by the active agent adapter.
Conditional Branches¶
[score: int] = `72`
[result] = pending
> if: `score >= 60`:
[result] := passed
> else:
[result] := failed
= <result>
The condition is evaluated exactly once. Its result must have exact Python
type bool; values that are merely truthy or falsey are rejected. The closing
: after the embedded Python expression is required. Kedi runs only the
selected body, so Python statements, procedure definitions, and model calls in
the other body have no effect.
> else: is optional. Kedi has no elif form; nest another > if: when a
second condition is needed:
[grade] = unknown
> if: `score >= 90`:
[grade] := A
> else:
> if: `score >= 75`:
[grade] := B
> else:
[grade] := C
Each selected body owns a child value scope. A Kedi = initialization remains
inside that branch, while := or embedded Python may update a binding already
owned by a containing scope. New Python-only names never become Kedi bindings.
Agent-profile directives inside the body are also lexical. A return inside a
selected body participates in Kedi's existing last-return behavior; it is not
a Python-style early return.
Template Conditions¶
[city] = Ankara
[minimum_population: int] = `5_000_000`
[result] = unknown
> if: <city> has more than `minimum_population` residents
[result] := major city
> else:
[result] := smaller city
= <result>
A template condition has no trailing :. Plain text, <name> substitutions,
procedure calls, and inline Python values use normal Kedi rendering semantics.
[output] fields are rejected because a condition does not create a binding.
Kedi evaluates the rendered claim using the current agent profile and its
available context. A claim that cannot be established is treated as false.
The evaluation does not create a Kedi binding.
The trailing colon distinguishes a deterministic condition from a claim even when both contain one inline Python segment:
> if: `is_ready`:
[kind] = deterministic
> if: `is_ready`
[kind] = model-classified
Conditional Loops¶
See Conditional Loops.
Sequential Loops¶
See Sequential Loops.
Map Continuations¶
See Map Continuations.