Skip to main content

logo

The Buildfunctions SDK for Agents

 

logo

The Buildfunctions SDK provides a client interface for interacting with the Buildfunctions platform

Installation

pip install buildfunctions

Quick Start

1. Create an API Token

Get your API token at buildfunctions.com/settings

2. CPU Function

from buildfunctions import Buildfunctions, CPUFunction

client = await Buildfunctions({"apiToken": API_TOKEN})

deployed_function = await CPUFunction.create({
    "name": "my-cpu-function",
    "code": "./cpu_function_code.py",
    "language": "python",
    "memory": 128,
    "timeout": 30,
})

print(f"Endpoint: {deployed_function.endpoint}")

await deployed_function.delete()

3. CPU Sandbox

from buildfunctions import Buildfunctions, CPUSandbox

client = await Buildfunctions({"apiToken": API_TOKEN})

sandbox = await CPUSandbox.create({
    "name": "my-cpu-sandbox",
    "language": "python",
    "code": "/path/to/code/cpu_sandbox_code.py",
    "memory": 128,
    "timeout": 30,
})

result = await sandbox.run()
print(f"Result: {result}")

await sandbox.delete()

4. GPU Function

from buildfunctions import Buildfunctions, GPUFunction

client = await Buildfunctions({"apiToken": API_TOKEN})

deployed_function = await GPUFunction.create({
    "name": "my-gpu-function",
    "code": "/path/to/code/gpu_function_code.py",
    "language": "python",
    "gpu": "T4",
    "vcpus": 30,
    "memory": "50000MB",
    "timeout": 300,
    "requirements": ["transformers==4.47.1", "torch", "accelerate"],
})

print(f"Endpoint: {deployed_function.endpoint}")

await deployed_function.delete()

5. GPU Sandbox with Local Model

from buildfunctions import Buildfunctions, GPUSandbox

client = await Buildfunctions({"apiToken": API_TOKEN})

sandbox = await GPUSandbox.create({
    "name": "my-gpu-sandbox",
    "language": "python",
    "memory": 10000,
    "timeout": 300,
    "vcpus": 6,
    "code": "./gpu_sandbox_code.py",
    "model": "/path/to/models/Qwen/Qwen3-8B",
    "requirements": "torch",
})

result = await sandbox.run()
print(f"Response: {result}")

await sandbox.delete()

Runtime Controls: Help Keep Your Agent Running Unattended

Wrap any tool call with composable guardrails — no API key required, no sandbox needed. RuntimeControls works standalone around your own functions, or combined with Buildfunctions sandboxes.

Available control layers (configure per workflow): retries with backoff, per-run tool-call budgets, circuit breakers, loop detection, timeout + cancellation, policy gates, injection guards, idempotency, concurrency locks, and event-based observability via event sinks.

1. Wrap Any Tool Call (No API Key)

import httpx
from buildfunctions import RuntimeControls

controls = RuntimeControls.create({
    "maxToolCalls": 50,
    "timeoutMs": 30_000,
    "retry": {"maxAttempts": 3, "initialDelayMs": 200, "backoffFactor": 2},
    "loopBreaker": {"warningThreshold": 5, "quarantineThreshold": 8, "stopThreshold": 12},
    "onEvent": lambda event: print(f"[controls] {event['type']}: {event['message']}"),
})

# Wrap any function — an API call, a shell command, an LLM tool invocation
async def run_api(args, runtime):
    payload = args[0]
    async with httpx.AsyncClient() as client:
        response = await client.post("https://api.example.com/data", json=payload)
        return response.json()

guarded_fetch = controls.wrap({
    "toolName": "api-call",
    "runKey": "agent-run-1",
    "destination": "https://api.example.com",
    "run": run_api,
})

result = await guarded_fetch({"query": "latest results"})
print(result)

# Reset budget counters when starting a new run
await controls.reset("agent-run-1")

2. With Hardware-Isolated Sandbox + Agent Safety

import re
from buildfunctions import Buildfunctions, CPUSandbox, RuntimeControls, applyAgentLogicSafety

await Buildfunctions({"apiToken": API_TOKEN})

sandbox = await CPUSandbox.create({
    "name": "guarded-sandbox",
    "language": "python",
    "code": "./my_handler.py",
    "memory": 128,
    "timeout": 30,
})

controls = RuntimeControls.create(
    applyAgentLogicSafety(
        {
            "maxToolCalls": 20,
            "retry": {"maxAttempts": 2, "initialDelayMs": 200, "backoffFactor": 2},
            "onEvent": lambda event: print(f"[controls] {event['type']}: {event['message']}"),
        },
        {
            "injectionGuard": {
                "enabled": True,
                "patterns": [
                    re.compile(r"ignore\s+previous\s+instructions", re.I),
                    re.compile(r"\brm\s+-rf\b", re.I),
                ],
            },
        },
    )
)

async def run_sandbox(runtime):
    _ = runtime
    return await sandbox.run()

result = await controls.run(
    {
        "toolName": "cpu-sandbox-run",
        "runKey": "sandbox-run-1",
        "destination": sandbox.endpoint,
        "action": "execute",
    },
    run_sandbox,
)

print(f"Result: {result}")
await sandbox.delete()

Documentation

SDK Quickstart: https://www.buildfunctions.com/docs/sdk/quickstart

Beta Status

The SDK is currently in beta. If you encounter any issues or have specific syntax requirements, please reach out and contact us at team@buildfunctions.com, and we’ll work to address them.

Terms

Runtime controls are provided as best-effort tools to help manage application behavior and resource usage. They do not guarantee prevention of all unintended outcomes. Users are responsible for monitoring their own workloads. See our Terms of Service for full details.

By using this SDK, you agree to the Terms of Service.

License

Licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

Metadata

Release files for buildfunctions 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for buildfunctions 0.3.1
File Size Uploaded
buildfunctions-0.3.1.tar.gz 7.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for buildfunctions 0.3.1
File Interpreter ABI Platform
buildfunctions-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 7.7 MB

Release files / buildfunctions-0.3.1.tar.gz

Download URL buildfunctions-0.3.1.tar.gz
Size 7.7 MB
Tags Source
SHA-256 checksum
How to use checksums
c9d7db2804d1341a859e45d246305d2a850d7ee560310fa9d8b96d028b0608ce
BLAKE2b-256 checksum
How to use checksums
9f42693f8c3bbc453077b18b0e3396f4db21d3028e0e95317b6d05f97fd34d1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.0rc1

Release files / buildfunctions-0.3.1-py3-none-any.whl

Download URL buildfunctions-0.3.1-py3-none-any.whl
Size 58.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
27987c72880f255371e0a4f172369bb127a9ac6df5b967b1bcad78e9bb8570f4
BLAKE2b-256 checksum
How to use checksums
f8fa24f49b4b016d26ede4198f36ad6419fb916342fcac0e05e2dfc6989e4cce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.0rc1

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page