expanded_intent
Describe a decomposition's approach, not just its intent. The expanded_intent renders as an Approach line in the prompt so the planner reads the reasoning before the steps.
Before you start
Track 14 gave the planner a worked example: an intent and a body. A
decomposition takes one more field, expanded_intent: a sentence describing
the approach the example uses. It renders as an Approach: line in the
prompt, right above the code, so the planner reads the reasoning before the
steps.
1. A finance acronym glossary#
Finance is full of acronyms that are impossible to look up directly: KIKO, TARN, VOMMA, CDXIG. This agent has 34 of them, each with an expansion and a plain-English definition. It supports both directions: given an acronym, explain it; given a full term, find its acronym.
expand(acronym: str) -> str # "CVA" -> "credit valuation adjustment"
abbreviate(term: str) -> str # "Carr-Geman-Madan-Yor model" -> "CGMY"
define(term: str) -> str # full form -> plain-English sentence
phrase(acronym, full, meaning) # combines all three into one lineabbreviate uses fuzzy matching so the model does not need to pass the exact string.
2. Two decompositions, two approaches#
The forward decomposition teaches the planner to expand an acronym first, then define the expansion:
@decomposition(
intent="what does CVA mean?",
expanded_intent=(
"A finance acronym can't be defined directly. Expand it to its full "
"form first, then define that full form, then phrase the acronym, "
"full form, and meaning together into one answer."
),
)
def _example_cva(self) -> str:
full = self.expand("CVA")
meaning = self.define(full)
cva_result = self.phrase("CVA", full, meaning)
return cva_resultThe reverse decomposition teaches the planner to abbreviate a full term, then define it:
@decomposition(
intent="what is the acronym for Carr-Geman-Madan-Yor model?",
expanded_intent=(
"When given a full term rather than an acronym, the lookup runs in "
"reverse. Abbreviate the full term to find its acronym, define the "
"full term directly, then phrase the acronym, full form, and meaning "
"together."
),
)
def _example_cgmy_reverse(self) -> str:
acronym = self.abbreviate("Carr-Geman-Madan-Yor model")
meaning = self.define("Carr-Geman-Madan-Yor model")
cgmy_result = self.phrase(acronym, "Carr-Geman-Madan-Yor model", meaning)
return cgmy_result3. What the planner sees#
The library renders both as prompt examples, each with an Approach: line:
### Example 1
Intent: what does CVA mean?
Approach: A finance acronym can't be defined directly. Expand it to its full form first, ...
Python:
full = expand('CVA')
meaning = define(full)
cva_result = phrase('CVA', full, meaning)
return cva_resultThe Approach: line is your expanded_intent, verbatim. Without it the planner
sees only the code and has to infer the order; with it the reasoning is explicit.
4. Run it#
QUERIES = [
"what does KIKO mean?",
"what does TARN mean?",
"what does CDXIG mean?",
"what is the acronym for Carr-Geman-Madan-Yor model?",
"what is the acronym for vega-gamma sensitivity?",
]uv run main.pySample output:
KIKO (knock-in knock-out): an exotic option that activates only if the
underlying hits one barrier and cancels if it hits another
VOMMA (vega-gamma sensitivity): a second-order derivative measuring how
a position's vega changes as implied volatility movesWhen to use expanded_intent#
Use it when the approach is non-obvious from the code alone. Here the order
matters: you cannot define an acronym directly, so you must expand it first. The
expanded_intent makes that constraint explicit to the planner before it sees
the steps.
For simple examples where the code is self-explanatory, intent alone is enough.