Python SDK for Agent Diff - test AI agents and train models against replicas of services
Project description
Agent Diff Python SDK
Python SDK for testing AI agents against isolated replicas of production services.
Installation
uv add agent-diff
Environments
Create isolated, ephemeral replicas of services:
env = client.init_env(
templateService="slack",
templateName="slack_default",
impersonateUserId="U123",
ttlSeconds=3600
)
# Access environment details
env.environmentId
env.environmentUrl
env.expiresAt
# Delete when done
client.delete_env(env.environmentId)
Templates
List and create environment templates:
# List available templates
templates = client.list_templates()
# Create custom template - you can populate the replica via API and turn it into a template with custom data
custom = client.create_template_from_environment(
environmentId=env.environmentId,
service="slack",
name="my_template",
description="Custom template",
visibility="private" # "private" means only you can view the template
)
Code Execution Proxies
SDK provides code execution proxies that automatically intercept API calls and route them to isolated test environments. This enables agents with code execution capabilities to interact with service replicas without any code changes.
How It Works
When your agent executes Python or Bash code:
- The executor wraps your code with interception logic
- API calls to
https://slack.com/api/*→http://localhost:8000/api/env/{env_id}/services/slack/api/* - API calls to
https://api.linear.app/*→http://localhost:8000/api/env/{env_id}/services/linear/* - Your agent sees real API responses from the isolated environment
Available Executors
PythonExecutorProxy
Intercepts Python requests and urllib libraries:
from agent_diff import PythonExecutorProxy, create_openai_tool
python_executor = PythonExecutorProxy(env.environmentId, base_url=client.base_url)
python_tool = create_openai_tool(python_executor)
# Works with OpenAI Agents SDK, LangChain, smolagents
agent = Agent(
model="gpt-4o",
tools=[python_tool],
instructions="Use execute_python tool to interact with Slack API at https://slack.com/api/*. Authentication is automatic."
)
agent.run("Send a Slack message to #general")
BashExecutorProxy
Intercepts curl commands:
from agent_diff import BashExecutorProxy, create_openai_tool
bash_executor = BashExecutorProxy(env.environmentId, base_url=client.base_url)
bash_tool = create_openai_tool(bash_executor)
agent = Agent(
model="gpt-4o",
tools=[bash_tool],
instructions="Use execute_bash tool with curl to interact with Slack API at https://slack.com/api/*. Authentication is automatic."
)
agent.run("Use curl to post a message to Slack")
Framework Support
Create tools for popular agent frameworks:
from agent_diff import create_openai_tool, create_langchain_tool, create_smolagents_tool
# OpenAI Agents SDK
openai_tool = create_openai_tool(python_executor)
# LangChain
langchain_tool = create_langchain_tool(python_executor)
# HuggingFace smolagents
smolagents_tool = create_smolagents_tool(python_executor)
Direct Execution
For custom frameworks or direct usage:
python_executor = PythonExecutorProxy(env.environmentId, base_url=client.base_url)
result = python_executor.execute("""
import requests
response = requests.post('https://slack.com/api/chat.postMessage', json={
'channel': '#general',
'text': 'Hello from Agent Diff!'
})
print(response.json())
""")
if result["status"] == "success":
print(result["stdout"])
else:
print(result["stderr"])
Test Suites & Evaluations
To run evaluations:
suite = client.get_test_suite("slack-bench")
# Returns: {"tests": [{"id": "...", "prompt": "Send hello to #general"}, ...]}
evaluation_results = []
for test in suite['tests']:
prompt = test['prompt']
test_id = test['id']
env = client.init_env(testId=test_id)
run = client.start_run(envId=env.environmentId, testId=test_id)
# Create executor with automatic API interception
python_executor = PythonExecutorProxy(env.environmentId, base_url=client.base_url)
python_tool = create_openai_tool(python_executor)
# Run your agent with the tool
agent = Agent(
model="gpt-4o",
tools=[python_tool],
instructions="Use execute_python to interact with Slack at https://slack.com/api/*. Authentication is automatic."
)
response = agent.run(prompt)
evaluation_result = client.evaluate_run(run.runId) # Returns score, runId, status and Score (0/1)
evaluation_results.append(evaluation_result)
client.delete_env(envId=env.environmentId)
License
MIT License - see LICENSE file 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 agent_diff-0.1.7.tar.gz.
File metadata
- Download URL: agent_diff-0.1.7.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e62e4aa9eff84f591bbec515c61de661eaaa21fbc846e7e3c4370d894e560613
|
|
| MD5 |
d9d29cc0124c2220406bdf1ca30e3a99
|
|
| BLAKE2b-256 |
4c22bd81454ce634c88dc7ba25064fa5ef91c599e86c0b2f39de1c206869427a
|
File details
Details for the file agent_diff-0.1.7-py3-none-any.whl.
File metadata
- Download URL: agent_diff-0.1.7-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc21255b5effed4fdc56707f12f1fa8592694c356ecf1fe43c811af21fc755dd
|
|
| MD5 |
7d5b284c8be3db1d596731cb9117cc85
|
|
| BLAKE2b-256 |
35e1331599d08f8b085bc5e211382b9c194ca1fb1e882ae60ccd1ae92f7440d3
|