Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 0 additions & 73 deletions .github/workflows/release-agent-e2e-bundle.yml

This file was deleted.

1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

The Python SDK for [Conductor](https://www.conductor-oss.org/) lets you build durable Conductor agents, workflows, and workers. Conductor coordinates retries, state, and observability while your Python code runs wherever you deploy it.


**Get involved:** [⭐ Conductor OSS](https://github.com/conductor-oss/conductor) · [Choose a Conductor OSS contribution](https://github.com/conductor-oss/conductor/contribute) · [Contribution guide](https://github.com/conductor-oss/conductor/blob/main/CONTRIBUTING.md)

**Using an AI coding agent?** Load [Conductor Skills](https://github.com/conductor-oss/conductor-skills) so it can create, run, and operate Conductor workflows and Conductor agents:
Expand Down
17 changes: 3 additions & 14 deletions e2e/test_suite14_stateful_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def marker_tool_b(input_text: str) -> str:
return "MARKER_B_DONE"


@tool
@tool(stateful=True)
def swarm_tool(task: str) -> str:
"""Perform a task and return a marker."""
return f"SWARM_RESULT:{task}"
Expand Down Expand Up @@ -313,6 +313,7 @@ def test_stateful_swarm_handoff_completes(self, fresh_runtime, model):
agent_a = Agent(
name="swarm_agent_a",
model=model,
stateful=True,
max_turns=3,
instructions=(
"You are agent A. Call swarm_tool with task='from_a'. "
Expand All @@ -323,6 +324,7 @@ def test_stateful_swarm_handoff_completes(self, fresh_runtime, model):
agent_b = Agent(
name="swarm_agent_b",
model=model,
stateful=True,
max_turns=3,
instructions=(
"You are agent B. Call swarm_tool with task='from_b'. "
Expand Down Expand Up @@ -354,21 +356,8 @@ def test_stateful_swarm_handoff_completes(self, fresh_runtime, model):
ttd = _get_task_to_domain(result.execution_id)
assert ttd, f"taskToDomain empty. {diag}"

# Verify handoff-related tasks executed
all_tasks = _get_all_tasks(result.execution_id)

# handoff_check should exist and be COMPLETED
handoff_tasks = _find_tasks_by_type(all_tasks, "handoff_check")
assert handoff_tasks, (
f"No handoff_check task found. "
f"Task names: {[t.get('taskDefName') for t in all_tasks]}"
)
completed_handoffs = [t for t in handoff_tasks if t["status"] == "COMPLETED"]
assert completed_handoffs, (
f"No COMPLETED handoff_check. Statuses: "
f"{[(t['status'], t.get('pollCount')) for t in handoff_tasks]}"
)

# termination should exist and be COMPLETED
term_tasks = _find_tasks_by_type(all_tasks, "termination")
if term_tasks:
Expand Down
12 changes: 5 additions & 7 deletions tests/unit/ai/test_worker_entries.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,13 +161,11 @@ def test_cross_process_spawn_roundtrip_with_hop(self):
assert p.exitcode == 0


# ── Deep-extract (real openai-agents @function_tool → FunctionTool) ────────
# ── FunctionTool resolution (real openai-agents @function_tool) ────────────


class TestFunctionRefDeepExtract:
"""openai-agents' real ``@function_tool`` → ``FunctionTool`` with no
``.func``/``.coroutine``/``__wrapped__``; original fn only reachable via
nested attrs + closure."""
"""OpenAI Agents SDK 0.19+ exposes FunctionTool functions via wrappers."""

def test_sync_function_tool_deep_extract(self):
pytest.importorskip("agents")
Expand All @@ -176,7 +174,7 @@ def test_sync_function_tool_deep_extract(self):
raw = _find_embedded_function(oa.oa_get_weather)
assert raw is not None
ref = FunctionRef.of(raw)
assert ref == FunctionRef(oa.__name__, "oa_get_weather", 0, "", deep_extract=True)
assert ref == FunctionRef(oa.__name__, "oa_get_weather", unwrap_depth=1)
assert ref.resolve() is raw

def test_async_function_tool_deep_extract(self):
Expand All @@ -186,8 +184,8 @@ def test_async_function_tool_deep_extract(self):
raw = _find_embedded_function(oa.oa_get_weather_async)
assert raw is not None
ref = FunctionRef.of(raw)
assert ref.deep_extract is True
assert ref.attr_hop == ""
assert ref.unwrap_depth == 1
assert ref.deep_extract is False
assert ref.resolve() is raw

def test_ref_pickles(self):
Expand Down
Loading