@afterquery/compute
v0.6.1
Published
TypeScript SDK for the AfterQuery compute API — isolated sandboxes for AI agent pipelines
Keywords
Readme
AfterQuery Compute TypeScript SDK
Node.js 18+ client for the AfterQuery Compute API.
import { Compute, GpuCreateError } from '@afterquery/compute'
const compute = new Compute({ apiKey: '...' })
try {
const sandbox = await compute.create(
{
image: 'registry.example.com/team/image:tag',
resources: { gpu: { type: 'l4', count: 1 } },
},
{ idempotencyKey: 'job-42-attempt-1' },
)
} catch (error) {
if (error instanceof GpuCreateError) {
// Preserve these values when reconciling an ambiguous create outcome.
console.error(error.idempotencyKey, error.sandboxId)
}
throw error
}GPU creates require a stable idempotency key. If one is not supplied, the SDK
generates one and exposes it through GpuCreateError on any create or readiness
failure. GPU batch creation is intentionally unsupported.
For an ambiguous failure without a sandbox ID, call
cancelGpuCreate(error.idempotencyKey) to request cleanup using the stable key.
The SDK retries one transport-ambiguous cancellation request with the same key.
Deleted and Failed are immutable terminal history; CleanupPending means
cleanup is still converging, so call cancelGpuCreate again until a terminal
state is returned. A same-key create retry may also return a terminal handle
without starting or waiting for a new sandbox.
See the repository for API setup and the complete SDK surface.
Cleaning up from inside a sandbox
Code running inside a sandbox can delete its own sandbox as its final act, so a finished one-shot job never lingers (and Kubernetes never restarts it):
import { Compute } from '@afterquery/compute'
// ... do the work ...
await new Compute().selfDelete() // remove me; nothing left runningNo API key is needed: the platform injects COMPUTE_SELF_TOKEN and
COMPUTE_API_URL into every sandbox, and that token can only delete the
sandbox it belongs to. Outside a sandbox the call throws.
