Select a framework to see how much of the Thought → Action → Observation loop it exposes. Click each loop step for details.
Step 1
Thought
The LLM reasons about the current state: what it knows, what it needs, which tool to call next. This is pure model output — a string starting with "Thought:"
Visibility in SynapseKit
Not streamed by default
No verbose log output
Step 2
Action
The LLM selects a tool and specifies the input. The framework parses this from the model output and dispatches the tool call.
Visibility in SynapseKit
Tool dispatch not logged
Tool arguments not accessible
Step 3
Observation
The tool returns a result. The framework injects this as "Observation:" into the next LLM context, continuing the loop.
Visibility in SynapseKit
Tool return value not surfaced
No intermediate steps object
Step 4
Final Answer
The LLM determines the loop is complete and outputs the final answer. The framework returns this to the caller.
Visibility in SynapseKit
Final answer always returned
No trace attached to answer
SynapseKit — Full Agent Setup (6 lines)
from synapsekit import ReActAgent, CalculatorTool, DateTimeTool
from synapsekit.llm import LLMConfig
from synapsekit.llm.openai import OpenAILLM
llm = OpenAILLM(LLMConfig(model="gpt-4o-mini", api_key=KEY, provider="openai"))
agent = ReActAgent(llm=llm, tools=[CalculatorTool(), DateTimeTool()], max_iterations=10)
answer = await agent.run("What is 2 ** 10, and what day of the week is today?")
# No verbose. No intermediate steps. Final answer only.
Parameter
SynapseKit
LangChain
LlamaIndex
max_iterations
Yes
Yes
Yes
early stop condition
Yes
Yes
Yes
handle_parsing_error
Yes
Yes
Yes
verbose (loop logging)
No
Yes
Yes
return_intermediate_steps
No
Yes
Yes (response.sources)
async support
Yes
Yes
Yes
Loop control score
4 / 6
6 / 6
6 / 6
www.engineersofai.com · AI Letters #24 · LLM Showdown #15