symfonic.capabilities.tools.results¶
results ¶
Result-policy capability — compaction, offload, recall (T3.1.3).
What happens to a tool result after the tool returns used to be three
unrelated shapes: a hundred-line rewriter inside the react node, a pure
pricing function in core/, and a framework tool in tools/. They
implement one policy — a result is kept, compacted into a deterministic
stub, or offloaded once offload provably saves money, and whatever left
the wire must be reachable again on the model's initiative.
Three objects state that policy:
- :class:
ResultPolicydecides, and every decision carries its reason; - :class:
ResultPolicyServiceapplies decisions to a transcript under the id-preservation, immutability and determinism invariants; - :class:
RecallServicebrings a payload back without ever raising into the tool-invocation path.
The capability imports nothing but its own package: the provider message type and the pricing gate are both injected.
RecallService ¶
ResultDecision
dataclass
¶
The disposition and the one-word reason behind it.
The reason is the deliverable. "Why is this 200KB payload still on the wire?" used to require reading a hundred-line rewriter with six early returns; it is now a string.
ResultDisposition ¶
Bases: StrEnum
What happens to one settled tool result.
ResultPolicy ¶
Decide what happens to one settled tool result.
Source code in src/symfonic/capabilities/tools/results/policy.py
for_settings ¶
A policy over the same gate with different settings.
ResultPolicyService ¶
Rewrite the wire view of a transcript according to the policy.
Source code in src/symfonic/capabilities/tools/results/service.py
last_decisions
property
¶
What the most recent :meth:apply decided, per result.
apply
async
¶
Return the wire view of messages.
Returns the argument itself (identity, not a copy) when nothing can change — which is every iteration of every deployment that leaves compaction off.
Source code in src/symfonic/capabilities/tools/results/service.py
ResultPolicySettings
dataclass
¶
ResultPolicySettings(enabled: bool = False, size_chars: int = DEFAULT_SIZE_THRESHOLD_CHARS, keep_last_n: int = 1, offload_enabled: bool = False, large_offload_threshold_chars: int = DEFAULT_LARGE_OFFLOAD_THRESHOLD_CHARS, turn_boundary_index: int | None = None, model_name: str = '', expected_conversation_depth: int = 5, expected_recall_probability: float = 0.5)
Everything the policy needs to decide, read once.
enabled defaults to False. v8.7.1 (C1): the pre-T3.1.3
fallback used to default it True, so a dropped config key silently
force-enabled compaction and pointed recall stubs at an unregistered
recall tool — the payload was simply gone.
with_turn_boundary ¶
A copy carrying a derived boundary, when the caller had none.
Source code in src/symfonic/capabilities/tools/results/values.py
ResultRecord
dataclass
¶
ResultRecord(call_id: str, tool_name: str, size_chars: int, decision: ResultDecision, applied: bool = False)
One decision, attributed to the call it was made about.
Transcript ¶
Bases: Protocol
The narrow slice of a message transcript the service reads.