Python SDK for the AgentField control plane
Project description
AgentField Python SDK
The AgentField SDK provides a production-ready Python interface for registering agents, executing workflows, and integrating with the AgentField control plane.
Installation
pip install agentfield
To work on the SDK locally:
git clone https://github.com/Agent-Field/agentfield.git
cd agentfield/sdk/python
python -m pip install -e .[dev]
Quick Start
from agentfield import Agent
agent = Agent(
node_id="example-agent",
agentfield_server="http://localhost:8080",
dev_mode=True,
)
@agent.reasoner()
async def summarize(text: str) -> dict:
result = await agent.ai(
prompt=f"Summarize: {text}",
response_model={"summary": "string", "tone": "string"},
)
return result
if __name__ == "__main__":
agent.serve(port=8001)
AI Tool Calling
Let LLMs automatically discover and invoke agent capabilities across your system:
from agentfield import Agent, AIConfig, ToolCallConfig
app = Agent(
node_id="orchestrator",
agentfield_server="http://localhost:8080",
ai_config=AIConfig(model="openai/gpt-4o-mini"),
)
@app.reasoner()
async def ask_with_tools(question: str) -> dict:
# Auto-discover all tools and let the LLM use them
result = await app.ai(
system="You are a helpful assistant.",
user=question,
tools="discover",
)
return {"answer": str(result), "trace": result.trace}
# Filter by tags, limit turns, use lazy hydration
result = await app.ai(
user="Get weather for Tokyo",
tools=ToolCallConfig(
tags=["weather"],
schema_hydration="lazy", # Reduces token usage for large catalogs
max_turns=5,
max_tool_calls=10,
),
)
Key features:
tools="discover"— Auto-discover all capabilities from the control planeToolCallConfig— Filter by tags, agent IDs, health status- Lazy hydration — Send only tool names/descriptions first, hydrate schemas on demand
- Guardrails —
max_turnsandmax_tool_callsprevent runaway loops - Observability —
result.tracetracks every tool call with latency
See examples/python_agent_nodes/tool_calling/ for a complete orchestrator + worker example.
Human-in-the-Loop Approvals
The Python SDK provides a first-class waiting state for pausing agent execution mid-reasoner and waiting for human approval:
from agentfield import Agent, ApprovalResult
app = Agent(node_id="reviewer", agentfield_server="http://localhost:8080")
@app.reasoner()
async def deploy(environment: str) -> dict:
plan = await app.ai(f"Create deployment plan for {environment}")
# Pause execution and wait for human approval
result: ApprovalResult = await app.pause(
approval_request_id="req-abc123",
expires_in_hours=24,
timeout=3600,
)
if result.approved:
return {"status": "deploying", "plan": str(plan)}
elif result.changes_requested:
return {"status": "revising", "feedback": result.feedback}
else:
return {"status": result.decision}
Two API levels:
- High-level:
app.pause()blocks the reasoner until approval resolves, with automatic webhook registration - Low-level:
client.request_approval(),client.get_approval_status(),client.wait_for_approval()for fine-grained control
See examples/python_agent_nodes/waiting_state/ for a complete working example.
See docs/DEVELOPMENT.md for instructions on wiring agents to the control plane.
Testing
pytest
To run coverage locally:
pytest --cov=agentfield --cov-report=term-missing
License
Distributed under the Apache 2.0 License. See the project root LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentfield-0.1.60rc3.tar.gz.
File metadata
- Download URL: agentfield-0.1.60rc3.tar.gz
- Upload date:
- Size: 200.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa9cec4f748ec24ce3763e08638538535031126a86e3ef486f59c5a045b6d5b3
|
|
| MD5 |
300f7f1b70c38cedffe8b20ad76aa6b1
|
|
| BLAKE2b-256 |
5ab19148589a40e9de53929c46bcfb0bf18145bd1505c004b037dfced2082c26
|
File details
Details for the file agentfield-0.1.60rc3-py3-none-any.whl.
File metadata
- Download URL: agentfield-0.1.60rc3-py3-none-any.whl
- Upload date:
- Size: 225.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9aaa929ec02187fabf75971944cec03f4e4ff5e61a98c04e0de0de0ad25ff86
|
|
| MD5 |
cd65f19f9bf8bd171073e811c181c75e
|
|
| BLAKE2b-256 |
df4a4ccb770911e939c0f3fa307907b38238090ac4e8201579a38734fbbb224f
|