Reasoning Framework
The reasoning framework provides structured thinking strategies for complex tasks. An orchestrator classifies tasks and selects the appropriate strategy automatically.
Architecture
graph TD
T[Task Input] --> O[Orchestrator]
O --> CL[_classify_task]
CL --> |math, analytical| CoT[Chain-of-Thought]
CL --> |planning| ToT[Tree-of-Thought]
CL --> |research| ReAct[ReAct]
CL --> |creative, code| Ref[Reflection]
CoT --> P[Provider]
ToT --> P
ReAct --> P
Ref --> P
ReAct --> TE[Tool Executor]
P --> R[ReasoningResult]
CoT -.-> |fallback| FB[Fallback Strategy]
ToT -.-> |fallback| FB
ReAct -.-> |fallback| FB
Ref -.-> |fallback| FB
Strategies
| Strategy |
Class |
Use Case |
How It Works |
| Chain-of-Thought |
ChainOfThought |
Math, analytical, simple |
Step-by-step reasoning with explicit intermediate steps |
| Tree-of-Thought |
TreeOfThought |
Planning, design |
Explores multiple solution branches (BFS/DFS/beam search) |
| ReAct |
ReActAgent |
Research, tool-heavy tasks |
Interleaves reasoning with tool actions (Reason-Act-Observe loop) |
| Reflection |
ReflectiveReasoner |
Creative, code |
Generates, self-critiques, and revises through multiple rounds |
Task Classification
The orchestrator classifies tasks by keyword matching in _classify_task():
| Task Type |
Keywords |
Default Strategy |
math |
calculate, compute, solve, equation, formula |
CoT |
code |
code, program, function, implement, debug |
Reflection |
research |
search, find information, look up, research |
ReAct |
planning |
plan, design, strategy, organize, roadmap |
ToT |
creative |
write, create, compose, draft, story, poem |
Reflection |
analytical |
analyze, compare, evaluate, assess, review |
CoT |
simple |
what is, who is, when did, define, list |
CoT |
unknown |
(no match) |
CoT (fallback) |
Strategy Configs
Chain-of-Thought (CoTConfig)
| Field |
Default |
Description |
model |
"llama3.2" |
Model to use |
mode |
"zero_shot" |
"zero_shot" or "few_shot" |
examples |
[] |
Few-shot examples (if few_shot mode) |
max_steps |
10 |
Maximum reasoning steps |
Tree-of-Thought (ToTConfig)
| Field |
Default |
Description |
model |
"llama3.2" |
Model to use |
branching_factor |
3 |
Branches per node |
max_depth |
3 |
Maximum tree depth |
search_strategy |
"bfs" |
"bfs", "dfs", or "beam" |
beam_width |
2 |
Beam width (if beam search) |
ReAct (ReActConfig)
| Field |
Default |
Description |
model |
"llama3.2" |
Model to use |
tools |
[] |
Available Tool objects |
max_iterations |
10 |
Max reason-act-observe cycles |
Reflection (ReflectionConfig)
| Field |
Default |
Description |
model |
"llama3.2" |
Model to use |
max_revisions |
3 |
Maximum self-revision rounds |
critique_model |
null |
Optional separate model for critique |
Result Structure
ReasoningResult contains:
| Field |
Type |
Description |
answer |
string |
Final response |
strategy |
string |
Strategy used |
status |
ReasoningStatus |
"complete" or "failed" |
steps |
list[ThoughtStep] |
Full reasoning trace |
total_steps |
int |
Step count |
branches_explored |
int |
ToT branches explored |
actions_taken |
int |
ReAct actions executed |
revisions |
int |
Reflection revision count |
total_tokens |
int |
Token usage |
total_time_ms |
float |
Elapsed time |
Orchestrator Config
from agentx_ai.reasoning.orchestrator import ReasoningOrchestrator, OrchestratorConfig
config = OrchestratorConfig(
default_model="llama3.2",
fallback_strategy="cot", # Fallback if primary fails
enable_fallback=True,
)
orchestrator = ReasoningOrchestrator(config)
result = await orchestrator.reason("Plan a week-long trip to Japan")
# result.strategy == "tot" (auto-classified as planning)
The strategy map can be overridden in OrchestratorConfig.strategy_map to change which strategy handles each task type.
Integration
The Agent uses reasoning through Agent.run():
- Agent receives a task
TaskPlanner decomposes into subtasks
- For each subtask,
ReasoningOrchestrator.reason() is called
- Results are aggregated into the final
AgentResult
In chat mode (Agent.chat(simple_mode=True)), reasoning is bypassed — the agent uses direct provider completion instead.