mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-05-05 17:22:36 +00:00
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:
@@ -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=(
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user