Enhance PlanningConfig and AgentExecutor with Reasoning Effort Levels

This update introduces a new  attribute in the  class, allowing users to customize the observation and replanning behavior during task execution. The  class has been modified to utilize this new attribute, routing step observations based on the specified reasoning effort level: low, medium, or high.

Additionally, tests have been added to validate the functionality of the reasoning effort levels, ensuring that the agent behaves as expected under different configurations. This enhancement improves the adaptability and efficiency of the planning process in agent execution.
This commit is contained in:
lorenzejay
2026-02-11 13:55:02 -08:00
parent 576345140f
commit a164e94f49
5 changed files with 1839 additions and 16 deletions

View File

@@ -1,6 +1,6 @@
from __future__ import annotations
from typing import Any
from typing import Any, Literal
from pydantic import BaseModel, Field
@@ -9,12 +9,23 @@ class PlanningConfig(BaseModel):
"""Configuration for agent planning/reasoning before task execution.
This allows users to customize the planning behavior including prompts,
iteration limits, and the LLM used for planning.
iteration limits, the LLM used for planning, and the reasoning effort
level that controls post-step observation and replanning behavior.
Note: To disable planning, don't pass a planning_config or set planning=False
on the Agent. The presence of a PlanningConfig enables planning.
Attributes:
reasoning_effort: Controls observation and replanning after each step.
- "low": Observe each step (validates success), but skip the
decide/replan/refine pipeline. Steps are marked complete and
execution continues linearly. Fastest option.
- "medium": Observe each step. On failure, trigger replanning.
On success, skip refinement and continue. Balanced option.
- "high": Full observation pipeline — observe every step, then
route through decide_next_action which can trigger early goal
achievement, full replanning, or lightweight refinement.
Most adaptive but adds latency per step.
max_attempts: Maximum number of planning refinement attempts.
If None, will continue until the agent indicates readiness.
max_steps: Maximum number of steps in the generated plan.
@@ -28,7 +39,7 @@ class PlanningConfig(BaseModel):
from crewai import Agent
from crewai.agent.planning_config import PlanningConfig
# Simple usage
# Simple usage — fast, linear execution (default)
agent = Agent(
role="Researcher",
goal="Research topics",
@@ -36,12 +47,23 @@ class PlanningConfig(BaseModel):
planning_config=PlanningConfig(),
)
# Customized planning
# Balanced — replan only when steps fail
agent = Agent(
role="Researcher",
goal="Research topics",
backstory="Expert researcher",
planning_config=PlanningConfig(
reasoning_effort="medium",
),
)
# Full adaptive planning with refinement and replanning
agent = Agent(
role="Researcher",
goal="Research topics",
backstory="Expert researcher",
planning_config=PlanningConfig(
reasoning_effort="high",
max_attempts=3,
max_steps=10,
plan_prompt="Create a focused plan for: {description}",
@@ -51,6 +73,16 @@ class PlanningConfig(BaseModel):
```
"""
reasoning_effort: Literal["low", "medium", "high"] = Field(
default="low",
description=(
"Controls post-step observation and replanning behavior. "
"'low' observes steps but skips replanning/refinement (fastest). "
"'medium' observes and replans only on step failure (balanced). "
"'high' runs full observation pipeline with replanning, refinement, "
"and early goal detection (most adaptive, highest latency)."
),
)
max_attempts: int | None = Field(
default=None,
description=(

View File

@@ -468,6 +468,18 @@ class AgentExecutor(Flow[AgentReActState], CrewAgentExecutorMixin):
)
return self._planner_observer
def _get_reasoning_effort(self) -> str:
"""Get the reasoning effort level from the agent's planning config.
Returns:
The reasoning effort level: "low", "medium", or "high".
Defaults to "low" if no planning config is set.
"""
config = getattr(self.agent, "planning_config", None)
if config is not None and hasattr(config, "reasoning_effort"):
return config.reasoning_effort
return "low"
def _build_context_for_todo(self, todo: TodoItem) -> StepExecutionContext:
"""Build an isolated execution context for a single todo.
@@ -506,18 +518,27 @@ class AgentExecutor(Flow[AgentReActState], CrewAgentExecutorMixin):
# -------------------------------------------------------------------------
@router("step_executed")
def observe_step_result(self) -> Literal["step_observed"]:
"""THE OBSERVATION STEP — runs after EVERY step execution.
def observe_step_result(
self,
) -> Literal["step_observed_low", "step_observed_medium", "step_observed_high"]:
"""Observe step result and route based on reasoning_effort level.
This is the Planner's opportunity to incorporate new information
learned during execution. It is NOT an error handler — it runs on
every step, including successes.
Always runs PlannerObserver.observe() to validate whether the step
succeeded. Then routes to the appropriate handler based on the
agent's reasoning_effort setting:
- "low": observe → mark complete → continue (no replan/refine)
- "medium": observe → replan on failure only (no refine)
- "high": observe → full decide pipeline (replan/refine/goal-achieved)
Based on PLAN-AND-ACT Section 3.3.
"""
current_todo = self.state.todos.current_todo
effort = self._get_reasoning_effort()
if not current_todo:
return "step_observed"
# No todo — route to low handler which will just continue
return "step_observed_low"
observer = self._ensure_planner_observer()
all_completed = self.state.todos.get_completed_todos()
@@ -542,13 +563,15 @@ class AgentExecutor(Flow[AgentReActState], CrewAgentExecutorMixin):
"remaining_plan_still_valid": observation.remaining_plan_still_valid,
"needs_full_replan": observation.needs_full_replan,
"goal_already_achieved": observation.goal_already_achieved,
"reasoning_effort": effort,
}
)
if self.agent.verbose:
self._printer.print(
content=(
f"[Observe] Step {current_todo.step_number}: "
f"[Observe] Step {current_todo.step_number} "
f"(effort={effort}): "
f"success={observation.step_completed_successfully}, "
f"plan_valid={observation.remaining_plan_still_valid}, "
f"learned={observation.key_information_learned[:80]}..."
@@ -556,9 +579,85 @@ class AgentExecutor(Flow[AgentReActState], CrewAgentExecutorMixin):
color="cyan",
)
return "step_observed"
if effort == "high":
return "step_observed_high"
if effort == "medium":
return "step_observed_medium"
return "step_observed_low"
@router("step_observed")
# -- Low effort: observe → mark complete → continue (no replan/refine) --
@router("step_observed_low")
def handle_step_observed_low(
self,
) -> Literal["continue_plan"]:
"""Low reasoning effort: mark step complete and continue linearly.
Skips the entire decide/replan/refine pipeline. The observation
still validates success, but execution proceeds regardless.
"""
current_todo = self.state.todos.current_todo
if not current_todo:
return "continue_plan"
self.state.todos.mark_completed(
current_todo.step_number, result=current_todo.result
)
if self.agent.verbose:
completed = self.state.todos.completed_count
total = len(self.state.todos.items)
self._printer.print(
content=f"[Low] Step {current_todo.step_number} done ({completed}/{total}) — continuing",
color="green",
)
return "continue_plan"
# -- Medium effort: observe → replan on failure only (no refine) --
@router("step_observed_medium")
def handle_step_observed_medium(
self,
) -> Literal["continue_plan", "replan_now"]:
"""Medium reasoning effort: replan only when a step fails.
On success, marks the step complete and continues without
refinement or early goal detection. On failure, triggers replanning
so the agent can recover.
"""
current_todo = self.state.todos.current_todo
if not current_todo:
return "continue_plan"
observation = self.state.observations.get(current_todo.step_number)
# If observation is missing or step succeeded — continue
if not observation or observation.step_completed_successfully:
self.state.todos.mark_completed(
current_todo.step_number, result=current_todo.result
)
if self.agent.verbose:
completed = self.state.todos.completed_count
total = len(self.state.todos.items)
self._printer.print(
content=f"[Medium] Step {current_todo.step_number} succeeded ({completed}/{total}) — continuing",
color="green",
)
return "continue_plan"
# Step failed — trigger replan
if self.agent.verbose:
self._printer.print(
content=f"[Medium] Step {current_todo.step_number} failed — triggering replan",
color="yellow",
)
self.state.last_replan_reason = "Step did not complete successfully"
return "replan_now"
# -- High effort: full observation pipeline (existing behavior) --
@router("step_observed_high")
def decide_next_action(
self,
) -> Literal[
@@ -567,10 +666,11 @@ class AgentExecutor(Flow[AgentReActState], CrewAgentExecutorMixin):
"refine_and_continue",
"continue_plan",
]:
"""Route based on the Planner's observation.
"""High reasoning effort: full observation-driven routing.
This replaces the old reactive _should_replan() heuristics with
proactive, LLM-driven decisions.
Routes based on the Planner's observation. Can trigger early goal
achievement, full replanning, lightweight refinement, or simple
continuation. This is the most adaptive but highest-latency path.
"""
current_todo = self.state.todos.current_todo
if not current_todo:

View File

@@ -834,3 +834,293 @@ class TestResponseFormatWithKickoff:
assert result is not None
assert result.pydantic is None
assert "20" in str(result)
class TestReasoningEffort:
"""Test reasoning_effort levels in PlanningConfig.
- low: observe() runs (validates step success), but skip decide/replan/refine
- medium: observe() runs, replan on failure only (mocked)
- high: full observation pipeline with decide/replan/refine/goal-achieved
"""
@pytest.mark.vcr()
def test_reasoning_effort_low_skips_decide_and_replan(self):
"""Low effort: observe runs but decide/replan/refine are never called.
Verifies that with reasoning_effort='low':
1. The agent produces a correct result
2. The observation phase still runs (observations are stored)
3. The decide_next_action/refine/replan pipeline is bypassed
"""
from crewai import Agent, PlanningConfig
from crewai.llm import LLM
from crewai.experimental.agent_executor import AgentExecutor
llm = LLM("gpt-4o-mini")
agent = Agent(
role="Math Tutor",
goal="Solve multi-step math problems accurately",
backstory="An expert math tutor who breaks down problems step by step",
llm=llm,
planning_config=PlanningConfig(
reasoning_effort="low",
max_attempts=1,
max_steps=10,
),
verbose=False,
)
# Capture the executor to inspect state after execution
executor_ref = [None]
original_invoke = AgentExecutor.invoke
def capture_executor(self, inputs):
result = original_invoke(self, inputs)
executor_ref[0] = self
return result
with patch.object(AgentExecutor, "invoke", capture_executor):
result = agent.kickoff(
"What is the sum of the first 3 prime numbers (2, 3, 5)?"
)
assert result is not None
assert "10" in str(result)
# Verify observations were still collected (observe() ran)
executor = executor_ref[0]
if executor is not None and executor.state.todos.items:
assert len(executor.state.observations) > 0, (
"Low effort should still run observe() to validate steps"
)
# Verify no replan was triggered
assert executor.state.replan_count == 0, (
"Low effort should never trigger replanning"
)
# Check execution log for reasoning_effort annotation
observation_logs = [
log for log in executor.state.execution_log
if log.get("type") == "observation"
]
for log in observation_logs:
assert log.get("reasoning_effort") == "low"
@pytest.mark.vcr()
def test_reasoning_effort_high_runs_full_observation_pipeline(self):
"""High effort: full observation pipeline with decide/replan/refine.
Verifies that with reasoning_effort='high':
1. The agent produces a correct result
2. Observations are stored
3. The full decide_next_action pipeline runs (the observation-driven
routing is exercised, even if it just routes to continue_plan)
"""
from crewai import Agent, PlanningConfig
from crewai.llm import LLM
from crewai.experimental.agent_executor import AgentExecutor
llm = LLM("gpt-4o-mini")
agent = Agent(
role="Math Tutor",
goal="Solve multi-step math problems accurately",
backstory="An expert math tutor who breaks down problems step by step",
llm=llm,
planning_config=PlanningConfig(
reasoning_effort="high",
max_attempts=1,
max_steps=10,
),
verbose=False,
)
executor_ref = [None]
original_invoke = AgentExecutor.invoke
def capture_executor(self, inputs):
result = original_invoke(self, inputs)
executor_ref[0] = self
return result
with patch.object(AgentExecutor, "invoke", capture_executor):
result = agent.kickoff(
"What is the sum of the first 3 prime numbers (2, 3, 5)?"
)
assert result is not None
assert "10" in str(result)
# Verify observations were collected
executor = executor_ref[0]
if executor is not None and executor.state.todos.items:
assert len(executor.state.observations) > 0, (
"High effort should run observe() on every step"
)
# Check execution log shows high reasoning_effort
observation_logs = [
log for log in executor.state.execution_log
if log.get("type") == "observation"
]
for log in observation_logs:
assert log.get("reasoning_effort") == "high"
def test_reasoning_effort_medium_replans_on_failure(self):
"""Medium effort: replan triggered when observation reports failure.
This test mocks the PlannerObserver to simulate a failed step,
verifying that medium effort routes to replan_now on failure
but continues on success.
"""
from crewai.experimental.agent_executor import AgentExecutor
from crewai.utilities.planning_types import (
StepObservation,
TodoItem,
TodoList,
)
# --- Build a minimal mock executor with medium effort ---
executor = Mock(spec=AgentExecutor)
executor.agent = Mock()
executor.agent.verbose = False
executor.agent.planning_config = Mock()
executor.agent.planning_config.reasoning_effort = "medium"
# Provide the real method under test (bound to our mock)
executor.handle_step_observed_medium = (
AgentExecutor.handle_step_observed_medium.__get__(executor)
)
executor._printer = Mock()
# --- Case 1: step succeeded → should return "continue_plan" ---
success_todo = TodoItem(
step_number=1,
description="Calculate something",
status="running",
result="42",
)
success_observation = StepObservation(
step_completed_successfully=True,
key_information_learned="Got the answer",
remaining_plan_still_valid=True,
)
# Set up state
todo_list = TodoList(items=[success_todo])
executor.state = Mock()
executor.state.todos = todo_list
executor.state.observations = {1: success_observation}
route = executor.handle_step_observed_medium()
assert route == "continue_plan", (
"Medium effort should continue on successful step"
)
assert success_todo.status == "completed"
# --- Case 2: step failed → should return "replan_now" ---
failed_todo = TodoItem(
step_number=2,
description="Divide by zero",
status="running",
result="Error: division by zero",
)
failed_observation = StepObservation(
step_completed_successfully=False,
key_information_learned="Division failed",
remaining_plan_still_valid=False,
needs_full_replan=True,
replan_reason="Step failed with error",
)
todo_list_2 = TodoList(items=[failed_todo])
executor.state.todos = todo_list_2
executor.state.observations = {2: failed_observation}
executor.state.last_replan_reason = None
route = executor.handle_step_observed_medium()
assert route == "replan_now", (
"Medium effort should trigger replan on failed step"
)
assert executor.state.last_replan_reason == "Step did not complete successfully"
def test_reasoning_effort_low_marks_complete_without_deciding(self):
"""Low effort: mark_completed is called, decide_next_action is not.
Unit test verifying the low handler's behavior directly.
"""
from crewai.experimental.agent_executor import AgentExecutor
from crewai.utilities.planning_types import TodoItem, TodoList
executor = Mock(spec=AgentExecutor)
executor.agent = Mock()
executor.agent.verbose = False
executor.agent.planning_config = Mock()
executor.agent.planning_config.reasoning_effort = "low"
# Bind the real method
executor.handle_step_observed_low = (
AgentExecutor.handle_step_observed_low.__get__(executor)
)
executor._printer = Mock()
todo = TodoItem(
step_number=1,
description="Do something",
status="running",
result="Done successfully",
)
todo_list = TodoList(items=[todo])
executor.state = Mock()
executor.state.todos = todo_list
route = executor.handle_step_observed_low()
assert route == "continue_plan"
assert todo.status == "completed"
assert todo.result == "Done successfully"
def test_planning_config_reasoning_effort_default_is_low(self):
"""Verify PlanningConfig defaults reasoning_effort to 'low'."""
from crewai.agent.planning_config import PlanningConfig
config = PlanningConfig()
assert config.reasoning_effort == "low"
def test_planning_config_reasoning_effort_validation(self):
"""Verify PlanningConfig rejects invalid reasoning_effort values."""
from pydantic import ValidationError
from crewai.agent.planning_config import PlanningConfig
with pytest.raises(ValidationError):
PlanningConfig(reasoning_effort="ultra")
# Valid values should work
for level in ("low", "medium", "high"):
config = PlanningConfig(reasoning_effort=level)
assert config.reasoning_effort == level
def test_get_reasoning_effort_reads_from_config(self):
"""Verify _get_reasoning_effort reads from agent.planning_config."""
from crewai.experimental.agent_executor import AgentExecutor
executor = Mock(spec=AgentExecutor)
executor._get_reasoning_effort = (
AgentExecutor._get_reasoning_effort.__get__(executor)
)
# Case 1: planning_config with reasoning_effort set
executor.agent = Mock()
executor.agent.planning_config = Mock()
executor.agent.planning_config.reasoning_effort = "high"
assert executor._get_reasoning_effort() == "high"
# Case 2: no planning_config → defaults to "low"
executor.agent.planning_config = None
assert executor._get_reasoning_effort() == "low"
# Case 3: planning_config without reasoning_effort attr → defaults to "low"
executor.agent.planning_config = Mock(spec=[])
assert executor._get_reasoning_effort() == "low"

View File

@@ -0,0 +1,531 @@
interactions:
- request:
body: '{"messages":[{"role":"system","content":"You are a strategic planning assistant.
Create minimal, effective execution plans. Prefer fewer steps over more."},{"role":"user","content":"Create
a focused execution plan for the following task:\n\n## Task\nWhat is the sum
of the first 3 prime numbers (2, 3, 5)?\n\n## Expected Output\nComplete the
task successfully\n\n## Available Tools\nNo tools available\n\n## Planning Principles\nFocus
on WHAT needs to be accomplished, not HOW. Group related actions into logical
units. Fewer steps = better. Most tasks need 3-6 steps. Hard limit: 10 steps.\n\n##
Step Types (only these are valid):\n1. **Tool Step**: Uses a tool to gather
information or take action\n2. **Output Step**: Synthesizes prior results into
the final deliverable (usually the last step)\n\n## Rules:\n- Each step must
either USE A TOOL or PRODUCE THE FINAL OUTPUT\n- Combine related tool calls:
\"Research A, B, and C\" = ONE step, not three\n- Combine all synthesis into
ONE final output step\n- NO standalone \"thinking\" steps (review, verify, confirm,
refine, analyze) - these happen naturally between steps\n\nFor each step: State
the action, specify the tool (if any), and note dependencies.\n\nAfter your
plan, state READY or NOT READY."}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"type":"function","function":{"name":"create_reasoning_plan","description":"Create
or refine a reasoning plan for a task with structured steps","strict":true,"parameters":{"type":"object","properties":{"plan":{"type":"string","description":"A
brief summary of the overall plan."},"steps":{"type":"array","description":"List
of discrete steps to execute the plan","items":{"type":"object","properties":{"step_number":{"type":"integer","description":"Step
number (1-based)"},"description":{"type":"string","description":"What to do
in this step"},"tool_to_use":{"type":["string","null"],"description":"Tool to
use for this step, or null if no tool needed"},"depends_on":{"type":"array","items":{"type":"integer"},"description":"Step
numbers this step depends on (empty array if none)"}},"required":["step_number","description","tool_to_use","depends_on"],"additionalProperties":false}},"ready":{"type":"boolean","description":"Whether
the agent is ready to execute the task."}},"required":["plan","steps","ready"],"additionalProperties":false}}}]}'
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '2356'
content-type:
- application/json
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASpXScmkjCvYXrpSglYS9VdaeLy\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839219,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n
\ \"id\": \"call_K1VODILTLdRP4zq4We3Lij31\",\n \"type\":
\"function\",\n \"function\": {\n \"name\": \"create_reasoning_plan\",\n
\ \"arguments\": \"{\\\"plan\\\":\\\"Calculate and output the
sum of the first 3 prime numbers (2, 3, 5).\\\",\\\"steps\\\":[{\\\"step_number\\\":1,\\\"description\\\":\\\"Add
the first three prime numbers together (2 + 3 + 5).\\\",\\\"tool_to_use\\\":null,\\\"depends_on\\\":[]},{\\\"step_number\\\":2,\\\"description\\\":\\\"Output
the sum of the prime numbers calculated in the previous step.\\\",\\\"tool_to_use\\\":null,\\\"depends_on\\\":[1]}],\\\"ready\\\":true}\"\n
\ }\n }\n ],\n \"refusal\": null,\n \"annotations\":
[]\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n
\ }\n ],\n \"usage\": {\n \"prompt_tokens\": 452,\n \"completion_tokens\":
109,\n \"total_tokens\": 561,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:47:01 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '1976'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: '{"messages":[{"role":"system","content":"You are Math Tutor. An expert
math tutor who breaks down problems step by step\n\nYour goal: Solve multi-step
math problems accurately\n\nYou are executing a specific step in a multi-step
plan. Focus ONLY on completing\nthe current step. Do not plan ahead or worry
about future steps.\n\nBefore acting, briefly reason about what you need to
do and which approach\nor tool would be most helpful for this specific step."},{"role":"user","content":"##
Current Step\nAdd the first three prime numbers together (2 + 3 + 5).\n\nComplete
this step and provide your result."}],"model":"gpt-4o-mini"}'
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '632'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASrd7C80o15d4VOVG0fLWigtQkX\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839221,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"To complete this step, I need to add
the first three prime numbers, which are 2, 3, and 5.\\n\\nLet's perform the
addition:\\n\\n1. Start with the first two numbers: \\n \\\\( 2 + 3 = 5
\\\\)\\n\\n2. Now, add the third prime number to this result:\\n \\\\( 5
+ 5 = 10 \\\\)\\n\\nSo, the sum of the first three prime numbers (2 + 3 +
5) is **10**.\",\n \"refusal\": null,\n \"annotations\": []\n
\ },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n
\ ],\n \"usage\": {\n \"prompt_tokens\": 123,\n \"completion_tokens\":
103,\n \"total_tokens\": 226,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:47:03 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '2039'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: "{\"messages\":[{\"role\":\"system\",\"content\":\"You are a Planning Agent
observing execution progress. After each step completes, you analyze what happened
and decide whether the remaining plan is still valid.\\n\\nReason step-by-step
about:\\n1. What new information was learned from this step's result\\n2. Whether
the remaining steps still make sense given this new information\\n3. What refinements,
if any, are needed for upcoming steps\\n4. Whether the overall goal has already
been achieved\\n\\nBe conservative about triggering full replans \u2014 only
do so when the remaining plan is fundamentally wrong, not just suboptimal.\"},{\"role\":\"user\",\"content\":\"##
Original task\\n\\n\\n## Expected output\\n\\n\\n\\n## Just completed step 1\\nDescription:
Add the first three prime numbers together (2 + 3 + 5).\\nResult: To complete
this step, I need to add the first three prime numbers, which are 2, 3, and
5.\\n\\nLet's perform the addition:\\n\\n1. Start with the first two numbers:
\\n \\\\( 2 + 3 = 5 \\\\)\\n\\n2. Now, add the third prime number to this
result:\\n \\\\( 5 + 5 = 10 \\\\)\\n\\nSo, the sum of the first three prime
numbers (2 + 3 + 5) is **10**.\\n\\n## Remaining plan steps:\\n Step 2: Output
the sum of the prime numbers calculated in the previous step.\\n\\nAnalyze this
step's result and provide your observation.\"}],\"model\":\"gpt-4o-mini\",\"response_format\":{\"type\":\"json_schema\",\"json_schema\":{\"schema\":{\"description\":\"Planner's
observation after a step execution completes.\\n\\nReturned by the PlannerObserver
after EVERY step \u2014 not just failures.\\nThe Planner uses this to decide
whether to continue, refine, or replan.\\n\\nBased on PLAN-AND-ACT (Section
3.3): the Planner observes what the Executor\\ndid and incorporates new information
into the remaining plan.\\n\\nAttributes:\\n step_completed_successfully:
Whether the step achieved its objective.\\n key_information_learned: New
information revealed by this step\\n (e.g., \\\"Found 3 products: A,
B, C\\\"). Used to refine upcoming steps.\\n remaining_plan_still_valid:
Whether pending todos still make sense\\n given the new information.
True does NOT mean no refinement needed.\\n suggested_refinements: Minor
tweaks to upcoming step descriptions.\\n These are lightweight in-place
updates, not a full replan.\\n Example: [\\\"Step 3 should select product
B instead of 'best product'\\\"]\\n needs_full_replan: The remaining plan
is fundamentally wrong and must\\n be regenerated from scratch. Mutually
exclusive with\\n remaining_plan_still_valid (if this is True, that should
be False).\\n replan_reason: Explanation of why a full replan is needed (None
if not).\\n goal_already_achieved: The overall task goal has been satisfied
early.\\n No more steps needed \u2014 skip remaining todos and finalize.\",\"properties\":{\"step_completed_successfully\":{\"description\":\"Whether
the step achieved what it was asked to do\",\"title\":\"Step Completed Successfully\",\"type\":\"boolean\"},\"key_information_learned\":{\"default\":\"\",\"description\":\"What
new information this step revealed\",\"title\":\"Key Information Learned\",\"type\":\"string\"},\"remaining_plan_still_valid\":{\"default\":true,\"description\":\"Whether
the remaining pending todos still make sense given new information\",\"title\":\"Remaining
Plan Still Valid\",\"type\":\"boolean\"},\"suggested_refinements\":{\"anyOf\":[{\"items\":{\"type\":\"string\"},\"type\":\"array\"},{\"type\":\"null\"}],\"description\":\"Minor
tweaks to descriptions of upcoming steps (lightweight, no full replan)\",\"title\":\"Suggested
Refinements\"},\"needs_full_replan\":{\"default\":false,\"description\":\"The
remaining plan is fundamentally wrong and must be regenerated\",\"title\":\"Needs
Full Replan\",\"type\":\"boolean\"},\"replan_reason\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"Explanation
of why a full replan is needed\",\"title\":\"Replan Reason\"},\"goal_already_achieved\":{\"default\":false,\"description\":\"The
overall task goal has been satisfied early; no more steps needed\",\"title\":\"Goal
Already Achieved\",\"type\":\"boolean\"}},\"required\":[\"step_completed_successfully\",\"key_information_learned\",\"remaining_plan_still_valid\",\"suggested_refinements\",\"needs_full_replan\",\"replan_reason\",\"goal_already_achieved\"],\"title\":\"StepObservation\",\"type\":\"object\",\"additionalProperties\":false},\"name\":\"StepObservation\",\"strict\":true}},\"stream\":false}"
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '4317'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-helper-method:
- beta.chat.completions.parse
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASt8ugNp11vguwfJowpy4kzqrau\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839223,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"{\\\"step_completed_successfully\\\":false,\\\"key_information_learned\\\":\\\"The
sum of the first three prime numbers was incorrectly calculated as 10 instead
of 10 (2 + 3 + 5 = 10).\\\",\\\"remaining_plan_still_valid\\\":false,\\\"suggested_refinements\\\":null,\\\"needs_full_replan\\\":true,\\\"replan_reason\\\":\\\"The
calculation of the sum was mistakenly described, leading to incorrect logic
in the execution despite the correct result. The methodology needs to be re-evaluated
for accuracy in the next steps.\\\",\\\"goal_already_achieved\\\":false}\",\n
\ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\":
null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
871,\n \"completion_tokens\": 118,\n \"total_tokens\": 989,\n \"prompt_tokens_details\":
{\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:47:05 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '1596'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: '{"messages":[{"role":"system","content":"You are Math Tutor. You have completed
a multi-step task. Synthesize the results from all steps into a single, coherent
final response that directly addresses the original task. Do NOT list step numbers
or say ''Step 1 result''. Produce a clean, polished answer as if you did it
all at once."},{"role":"user","content":"## Original Task\nWhat is the sum of
the first 3 prime numbers (2, 3, 5)?\n\n## Results from each step\nStep 1 (Add
the first three prime numbers together (2 + 3 + 5).):\nTo complete this step,
I need to add the first three prime numbers, which are 2, 3, and 5.\n\nLet''s
perform the addition:\n\n1. Start with the first two numbers: \n \\( 2 + 3
= 5 \\)\n\n2. Now, add the third prime number to this result:\n \\( 5 + 5
= 10 \\)\n\nSo, the sum of the first three prime numbers (2 + 3 + 5) is **10**.\n\nSynthesize
these results into a single, coherent final answer."}],"model":"gpt-4o-mini"}'
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '954'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASvDlPAChhWPWC7w9AlFIAHPzgs\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839225,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"The sum of the first three prime numbers,
which are 2, 3, and 5, is \\\\( 10 \\\\). This is calculated by adding them
together: \\\\( 2 + 3 = 5 \\\\) and then \\\\( 5 + 5 = 10 \\\\).\",\n \"refusal\":
null,\n \"annotations\": []\n },\n \"logprobs\": null,\n
\ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
239,\n \"completion_tokens\": 59,\n \"total_tokens\": 298,\n \"prompt_tokens_details\":
{\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:47:07 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '1709'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,870 @@
interactions:
- request:
body: '{"trace_id": "348ec567-4ae7-4aef-b3a9-85676d0bf6b3", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "Unknown Crew", "flow_name": null, "crewai_version": "1.9.3", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2026-02-11T19:46:48.989695+00:00"}}'
headers:
Accept:
- '*/*'
Connection:
- keep-alive
Content-Length:
- '434'
Content-Type:
- application/json
User-Agent:
- X-USER-AGENT-XXX
X-Crewai-Organization-Id:
- 3433f0ee-8a94-4aa4-822b-2ac71aa38b18
X-Crewai-Version:
- 1.9.3
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/batches
response:
body:
string: '{"id":"5f9332a5-d726-4e6f-8ff7-44b5706c8d28","trace_id":"348ec567-4ae7-4aef-b3a9-85676d0bf6b3","execution_type":"crew","crew_name":"Unknown
Crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.9.3","privacy_level":"standard","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"Unknown
Crew","flow_name":null,"crewai_version":"1.9.3","privacy_level":"standard"},"created_at":"2026-02-11T19:46:49.557Z","updated_at":"2026-02-11T19:46:49.557Z"}'
headers:
Connection:
- keep-alive
Content-Length:
- '492'
Content-Type:
- application/json; charset=utf-8
Date:
- Wed, 11 Feb 2026 19:46:49 GMT
cache-control:
- no-store
content-security-policy:
- CSP-FILTERED
etag:
- ETAG-XXX
expires:
- '0'
permissions-policy:
- PERMISSIONS-POLICY-XXX
pragma:
- no-cache
referrer-policy:
- REFERRER-POLICY-XXX
strict-transport-security:
- STS-XXX
vary:
- Accept
x-content-type-options:
- X-CONTENT-TYPE-XXX
x-frame-options:
- X-FRAME-OPTIONS-XXX
x-permitted-cross-domain-policies:
- X-PERMITTED-XXX
x-request-id:
- X-REQUEST-ID-XXX
x-runtime:
- X-RUNTIME-XXX
x-xss-protection:
- X-XSS-PROTECTION-XXX
status:
code: 201
message: Created
- request:
body: '{"messages":[{"role":"system","content":"You are a strategic planning assistant.
Create minimal, effective execution plans. Prefer fewer steps over more."},{"role":"user","content":"Create
a focused execution plan for the following task:\n\n## Task\nWhat is the sum
of the first 3 prime numbers (2, 3, 5)?\n\n## Expected Output\nComplete the
task successfully\n\n## Available Tools\nNo tools available\n\n## Planning Principles\nFocus
on WHAT needs to be accomplished, not HOW. Group related actions into logical
units. Fewer steps = better. Most tasks need 3-6 steps. Hard limit: 10 steps.\n\n##
Step Types (only these are valid):\n1. **Tool Step**: Uses a tool to gather
information or take action\n2. **Output Step**: Synthesizes prior results into
the final deliverable (usually the last step)\n\n## Rules:\n- Each step must
either USE A TOOL or PRODUCE THE FINAL OUTPUT\n- Combine related tool calls:
\"Research A, B, and C\" = ONE step, not three\n- Combine all synthesis into
ONE final output step\n- NO standalone \"thinking\" steps (review, verify, confirm,
refine, analyze) - these happen naturally between steps\n\nFor each step: State
the action, specify the tool (if any), and note dependencies.\n\nAfter your
plan, state READY or NOT READY."}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"type":"function","function":{"name":"create_reasoning_plan","description":"Create
or refine a reasoning plan for a task with structured steps","strict":true,"parameters":{"type":"object","properties":{"plan":{"type":"string","description":"A
brief summary of the overall plan."},"steps":{"type":"array","description":"List
of discrete steps to execute the plan","items":{"type":"object","properties":{"step_number":{"type":"integer","description":"Step
number (1-based)"},"description":{"type":"string","description":"What to do
in this step"},"tool_to_use":{"type":["string","null"],"description":"Tool to
use for this step, or null if no tool needed"},"depends_on":{"type":"array","items":{"type":"integer"},"description":"Step
numbers this step depends on (empty array if none)"}},"required":["step_number","description","tool_to_use","depends_on"],"additionalProperties":false}},"ready":{"type":"boolean","description":"Whether
the agent is ready to execute the task."}},"required":["plan","steps","ready"],"additionalProperties":false}}}]}'
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '2356'
content-type:
- application/json
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASfR7yCL8K7uW5ViSLGB8kwbT5n\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839209,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n
\ \"id\": \"call_paXM4kgZ7yZqVeW73tLwY9Lm\",\n \"type\":
\"function\",\n \"function\": {\n \"name\": \"create_reasoning_plan\",\n
\ \"arguments\": \"{\\\"plan\\\":\\\"Calculate the sum of the
first 3 prime numbers (2, 3, 5).\\\",\\\"steps\\\":[{\\\"step_number\\\":1,\\\"description\\\":\\\"Add
the first three prime numbers (2, 3, 5).\\\",\\\"tool_to_use\\\":null,\\\"depends_on\\\":[]},{\\\"step_number\\\":2,\\\"description\\\":\\\"Output
the result of the sum.\\\",\\\"tool_to_use\\\":null,\\\"depends_on\\\":[1]}],\\\"ready\\\":true}\"\n
\ }\n }\n ],\n \"refusal\": null,\n \"annotations\":
[]\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n
\ }\n ],\n \"usage\": {\n \"prompt_tokens\": 452,\n \"completion_tokens\":
100,\n \"total_tokens\": 552,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:46:51 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '1840'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: '{"messages":[{"role":"system","content":"You are Math Tutor. An expert
math tutor who breaks down problems step by step\n\nYour goal: Solve multi-step
math problems accurately\n\nYou are executing a specific step in a multi-step
plan. Focus ONLY on completing\nthe current step. Do not plan ahead or worry
about future steps.\n\nBefore acting, briefly reason about what you need to
do and which approach\nor tool would be most helpful for this specific step."},{"role":"user","content":"##
Current Step\nAdd the first three prime numbers (2, 3, 5).\n\nComplete this
step and provide your result."}],"model":"gpt-4o-mini"}'
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '621'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8AShR9nlcqjmiKdUiBN8Ng5nrRdG\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839211,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"To complete this step, I need to add
the first three prime numbers: 2, 3, and 5.\\n\\n1. Start by adding 2 and
3:\\n \\\\( 2 + 3 = 5 \\\\)\\n\\n2. Now, add the result (5) to the next
prime number (5):\\n \\\\( 5 + 5 = 10 \\\\)\\n\\nSo, the result of adding
the first three prime numbers (2, 3, 5) is \\\\( 10 \\\\).\",\n \"refusal\":
null,\n \"annotations\": []\n },\n \"logprobs\": null,\n
\ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
122,\n \"completion_tokens\": 104,\n \"total_tokens\": 226,\n \"prompt_tokens_details\":
{\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:46:53 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '1740'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: "{\"messages\":[{\"role\":\"system\",\"content\":\"You are a Planning Agent
observing execution progress. After each step completes, you analyze what happened
and decide whether the remaining plan is still valid.\\n\\nReason step-by-step
about:\\n1. What new information was learned from this step's result\\n2. Whether
the remaining steps still make sense given this new information\\n3. What refinements,
if any, are needed for upcoming steps\\n4. Whether the overall goal has already
been achieved\\n\\nBe conservative about triggering full replans \u2014 only
do so when the remaining plan is fundamentally wrong, not just suboptimal.\"},{\"role\":\"user\",\"content\":\"##
Original task\\n\\n\\n## Expected output\\n\\n\\n\\n## Just completed step 1\\nDescription:
Add the first three prime numbers (2, 3, 5).\\nResult: To complete this step,
I need to add the first three prime numbers: 2, 3, and 5.\\n\\n1. Start by adding
2 and 3:\\n \\\\( 2 + 3 = 5 \\\\)\\n\\n2. Now, add the result (5) to the next
prime number (5):\\n \\\\( 5 + 5 = 10 \\\\)\\n\\nSo, the result of adding
the first three prime numbers (2, 3, 5) is \\\\( 10 \\\\).\\n\\n## Remaining
plan steps:\\n Step 2: Output the result of the sum.\\n\\nAnalyze this step's
result and provide your observation.\"}],\"model\":\"gpt-4o-mini\",\"response_format\":{\"type\":\"json_schema\",\"json_schema\":{\"schema\":{\"description\":\"Planner's
observation after a step execution completes.\\n\\nReturned by the PlannerObserver
after EVERY step \u2014 not just failures.\\nThe Planner uses this to decide
whether to continue, refine, or replan.\\n\\nBased on PLAN-AND-ACT (Section
3.3): the Planner observes what the Executor\\ndid and incorporates new information
into the remaining plan.\\n\\nAttributes:\\n step_completed_successfully:
Whether the step achieved its objective.\\n key_information_learned: New
information revealed by this step\\n (e.g., \\\"Found 3 products: A,
B, C\\\"). Used to refine upcoming steps.\\n remaining_plan_still_valid:
Whether pending todos still make sense\\n given the new information.
True does NOT mean no refinement needed.\\n suggested_refinements: Minor
tweaks to upcoming step descriptions.\\n These are lightweight in-place
updates, not a full replan.\\n Example: [\\\"Step 3 should select product
B instead of 'best product'\\\"]\\n needs_full_replan: The remaining plan
is fundamentally wrong and must\\n be regenerated from scratch. Mutually
exclusive with\\n remaining_plan_still_valid (if this is True, that should
be False).\\n replan_reason: Explanation of why a full replan is needed (None
if not).\\n goal_already_achieved: The overall task goal has been satisfied
early.\\n No more steps needed \u2014 skip remaining todos and finalize.\",\"properties\":{\"step_completed_successfully\":{\"description\":\"Whether
the step achieved what it was asked to do\",\"title\":\"Step Completed Successfully\",\"type\":\"boolean\"},\"key_information_learned\":{\"default\":\"\",\"description\":\"What
new information this step revealed\",\"title\":\"Key Information Learned\",\"type\":\"string\"},\"remaining_plan_still_valid\":{\"default\":true,\"description\":\"Whether
the remaining pending todos still make sense given new information\",\"title\":\"Remaining
Plan Still Valid\",\"type\":\"boolean\"},\"suggested_refinements\":{\"anyOf\":[{\"items\":{\"type\":\"string\"},\"type\":\"array\"},{\"type\":\"null\"}],\"description\":\"Minor
tweaks to descriptions of upcoming steps (lightweight, no full replan)\",\"title\":\"Suggested
Refinements\"},\"needs_full_replan\":{\"default\":false,\"description\":\"The
remaining plan is fundamentally wrong and must be regenerated\",\"title\":\"Needs
Full Replan\",\"type\":\"boolean\"},\"replan_reason\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"Explanation
of why a full replan is needed\",\"title\":\"Replan Reason\"},\"goal_already_achieved\":{\"default\":false,\"description\":\"The
overall task goal has been satisfied early; no more steps needed\",\"title\":\"Goal
Already Achieved\",\"type\":\"boolean\"}},\"required\":[\"step_completed_successfully\",\"key_information_learned\",\"remaining_plan_still_valid\",\"suggested_refinements\",\"needs_full_replan\",\"replan_reason\",\"goal_already_achieved\"],\"title\":\"StepObservation\",\"type\":\"object\",\"additionalProperties\":false},\"name\":\"StepObservation\",\"strict\":true}},\"stream\":false}"
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '4234'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-helper-method:
- beta.chat.completions.parse
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASjbTOj2ZKC00OYm6l31jzxx6Qq\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839213,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"{\\\"step_completed_successfully\\\":true,\\\"key_information_learned\\\":\\\"The
sum of the first three prime numbers (2, 3, 5) is 10.\\\",\\\"remaining_plan_still_valid\\\":true,\\\"suggested_refinements\\\":null,\\\"needs_full_replan\\\":false,\\\"replan_reason\\\":null,\\\"goal_already_achieved\\\":false}\",\n
\ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\":
null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
865,\n \"completion_tokens\": 73,\n \"total_tokens\": 938,\n \"prompt_tokens_details\":
{\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:46:55 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '1735'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: '{"messages":[{"role":"system","content":"You are Math Tutor. An expert
math tutor who breaks down problems step by step\n\nYour goal: Solve multi-step
math problems accurately\n\nYou are executing a specific step in a multi-step
plan. Focus ONLY on completing\nthe current step. Do not plan ahead or worry
about future steps.\n\nBefore acting, briefly reason about what you need to
do and which approach\nor tool would be most helpful for this specific step."},{"role":"user","content":"##
Current Step\nOutput the result of the sum.\n\n## Context from previous steps:\nStep
1 result: To complete this step, I need to add the first three prime numbers:
2, 3, and 5.\n\n1. Start by adding 2 and 3:\n \\( 2 + 3 = 5 \\)\n\n2. Now,
add the result (5) to the next prime number (5):\n \\( 5 + 5 = 10 \\)\n\nSo,
the result of adding the first three prime numbers (2, 3, 5) is \\( 10 \\).\n\nComplete
this step and provide your result."}],"model":"gpt-4o-mini"}'
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '957'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASlopJ8UB8AxMMqXRksWjQd8TLc\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839215,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"The result of the sum of the first
three prime numbers (2, 3, and 5) is \\\\( 10 \\\\).\",\n \"refusal\":
null,\n \"annotations\": []\n },\n \"logprobs\": null,\n
\ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
229,\n \"completion_tokens\": 27,\n \"total_tokens\": 256,\n \"prompt_tokens_details\":
{\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_7e4bf6ad56\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:46:56 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '858'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: "{\"messages\":[{\"role\":\"system\",\"content\":\"You are a Planning Agent
observing execution progress. After each step completes, you analyze what happened
and decide whether the remaining plan is still valid.\\n\\nReason step-by-step
about:\\n1. What new information was learned from this step's result\\n2. Whether
the remaining steps still make sense given this new information\\n3. What refinements,
if any, are needed for upcoming steps\\n4. Whether the overall goal has already
been achieved\\n\\nBe conservative about triggering full replans \u2014 only
do so when the remaining plan is fundamentally wrong, not just suboptimal.\"},{\"role\":\"user\",\"content\":\"##
Original task\\n\\n\\n## Expected output\\n\\n\\n## Previously completed steps:\\n
\ Step 1: Add the first three prime numbers (2, 3, 5).\\n Result: To complete
this step, I need to add the first three prime numbers: 2, 3, and 5.\\n\\n1.
Start by adding 2 and 3:\\n \\\\( 2 + 3 = 5 \\\\)\\n\\n2. Now, add the result
(5) to the next prime number (5):\\n \\\\( 5 + 5 =\\n\\n## Just completed
step 2\\nDescription: Output the result of the sum.\\nResult: The result of
the sum of the first three prime numbers (2, 3, and 5) is \\\\( 10 \\\\).\\n\\n\\nAnalyze
this step's result and provide your observation.\"}],\"model\":\"gpt-4o-mini\",\"response_format\":{\"type\":\"json_schema\",\"json_schema\":{\"schema\":{\"description\":\"Planner's
observation after a step execution completes.\\n\\nReturned by the PlannerObserver
after EVERY step \u2014 not just failures.\\nThe Planner uses this to decide
whether to continue, refine, or replan.\\n\\nBased on PLAN-AND-ACT (Section
3.3): the Planner observes what the Executor\\ndid and incorporates new information
into the remaining plan.\\n\\nAttributes:\\n step_completed_successfully:
Whether the step achieved its objective.\\n key_information_learned: New
information revealed by this step\\n (e.g., \\\"Found 3 products: A,
B, C\\\"). Used to refine upcoming steps.\\n remaining_plan_still_valid:
Whether pending todos still make sense\\n given the new information.
True does NOT mean no refinement needed.\\n suggested_refinements: Minor
tweaks to upcoming step descriptions.\\n These are lightweight in-place
updates, not a full replan.\\n Example: [\\\"Step 3 should select product
B instead of 'best product'\\\"]\\n needs_full_replan: The remaining plan
is fundamentally wrong and must\\n be regenerated from scratch. Mutually
exclusive with\\n remaining_plan_still_valid (if this is True, that should
be False).\\n replan_reason: Explanation of why a full replan is needed (None
if not).\\n goal_already_achieved: The overall task goal has been satisfied
early.\\n No more steps needed \u2014 skip remaining todos and finalize.\",\"properties\":{\"step_completed_successfully\":{\"description\":\"Whether
the step achieved what it was asked to do\",\"title\":\"Step Completed Successfully\",\"type\":\"boolean\"},\"key_information_learned\":{\"default\":\"\",\"description\":\"What
new information this step revealed\",\"title\":\"Key Information Learned\",\"type\":\"string\"},\"remaining_plan_still_valid\":{\"default\":true,\"description\":\"Whether
the remaining pending todos still make sense given new information\",\"title\":\"Remaining
Plan Still Valid\",\"type\":\"boolean\"},\"suggested_refinements\":{\"anyOf\":[{\"items\":{\"type\":\"string\"},\"type\":\"array\"},{\"type\":\"null\"}],\"description\":\"Minor
tweaks to descriptions of upcoming steps (lightweight, no full replan)\",\"title\":\"Suggested
Refinements\"},\"needs_full_replan\":{\"default\":false,\"description\":\"The
remaining plan is fundamentally wrong and must be regenerated\",\"title\":\"Needs
Full Replan\",\"type\":\"boolean\"},\"replan_reason\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"Explanation
of why a full replan is needed\",\"title\":\"Replan Reason\"},\"goal_already_achieved\":{\"default\":false,\"description\":\"The
overall task goal has been satisfied early; no more steps needed\",\"title\":\"Goal
Already Achieved\",\"type\":\"boolean\"}},\"required\":[\"step_completed_successfully\",\"key_information_learned\",\"remaining_plan_still_valid\",\"suggested_refinements\",\"needs_full_replan\",\"replan_reason\",\"goal_already_achieved\"],\"title\":\"StepObservation\",\"type\":\"object\",\"additionalProperties\":false},\"name\":\"StepObservation\",\"strict\":true}},\"stream\":false}"
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '4247'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-helper-method:
- beta.chat.completions.parse
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASmDh5J9qri09YPH2oD1bNJGgDW\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839216,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"{\\\"step_completed_successfully\\\":true,\\\"key_information_learned\\\":\\\"The
result of adding the first three prime numbers (2, 3, and 5) is 10.\\\",\\\"remaining_plan_still_valid\\\":true,\\\"suggested_refinements\\\":null,\\\"needs_full_replan\\\":false,\\\"replan_reason\\\":null,\\\"goal_already_achieved\\\":true}\",\n
\ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\":
null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
866,\n \"completion_tokens\": 75,\n \"total_tokens\": 941,\n \"prompt_tokens_details\":
{\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:46:58 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '2007'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
- request:
body: '{"messages":[{"role":"system","content":"You are Math Tutor. You have completed
a multi-step task. Synthesize the results from all steps into a single, coherent
final response that directly addresses the original task. Do NOT list step numbers
or say ''Step 1 result''. Produce a clean, polished answer as if you did it
all at once."},{"role":"user","content":"## Original Task\nWhat is the sum of
the first 3 prime numbers (2, 3, 5)?\n\n## Results from each step\nStep 1 (Add
the first three prime numbers (2, 3, 5).):\nTo complete this step, I need to
add the first three prime numbers: 2, 3, and 5.\n\n1. Start by adding 2 and
3:\n \\( 2 + 3 = 5 \\)\n\n2. Now, add the result (5) to the next prime number
(5):\n \\( 5 + 5 = 10 \\)\n\nSo, the result of adding the first three prime
numbers (2, 3, 5) is \\( 10 \\).\n\nStep 2 (Output the result of the sum.):\nThe
result of the sum of the first three prime numbers (2, 3, and 5) is \\( 10 \\).\n\nSynthesize
these results into a single, coherent final answer."}],"model":"gpt-4o-mini"}'
headers:
User-Agent:
- X-USER-AGENT-XXX
accept:
- application/json
accept-encoding:
- ACCEPT-ENCODING-XXX
authorization:
- AUTHORIZATION-XXX
connection:
- keep-alive
content-length:
- '1038'
content-type:
- application/json
cookie:
- COOKIE-XXX
host:
- api.openai.com
x-stainless-arch:
- X-STAINLESS-ARCH-XXX
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- X-STAINLESS-OS-XXX
x-stainless-package-version:
- 1.83.0
x-stainless-read-timeout:
- X-STAINLESS-READ-TIMEOUT-XXX
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.13.3
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: "{\n \"id\": \"chatcmpl-D8ASoGnijuByXL9Rn5y7TFT33YUbl\",\n \"object\":
\"chat.completion\",\n \"created\": 1770839218,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"The sum of the first three prime numbers,
which are 2, 3, and 5, is 10.\",\n \"refusal\": null,\n \"annotations\":
[]\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n
\ }\n ],\n \"usage\": {\n \"prompt_tokens\": 278,\n \"completion_tokens\":
25,\n \"total_tokens\": 303,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_f4ae844694\"\n}\n"
headers:
CF-RAY:
- CF-RAY-XXX
Connection:
- keep-alive
Content-Type:
- application/json
Date:
- Wed, 11 Feb 2026 19:46:59 GMT
Server:
- cloudflare
Strict-Transport-Security:
- STS-XXX
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- X-CONTENT-TYPE-XXX
access-control-expose-headers:
- ACCESS-CONTROL-XXX
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- OPENAI-ORG-XXX
openai-processing-ms:
- '561'
openai-project:
- OPENAI-PROJECT-XXX
openai-version:
- '2020-10-01'
set-cookie:
- SET-COOKIE-XXX
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- X-RATELIMIT-LIMIT-REQUESTS-XXX
x-ratelimit-limit-tokens:
- X-RATELIMIT-LIMIT-TOKENS-XXX
x-ratelimit-remaining-requests:
- X-RATELIMIT-REMAINING-REQUESTS-XXX
x-ratelimit-remaining-tokens:
- X-RATELIMIT-REMAINING-TOKENS-XXX
x-ratelimit-reset-requests:
- X-RATELIMIT-RESET-REQUESTS-XXX
x-ratelimit-reset-tokens:
- X-RATELIMIT-RESET-TOKENS-XXX
x-request-id:
- X-REQUEST-ID-XXX
status:
code: 200
message: OK
version: 1