Skip to content

Commit f98cb47

Browse files
HeyGarrisonshivam-declawclaude
authored
fix: standardize dax benchmark resources to 8 vCPU / 16 GiB (#196)
* fix: standardize dax benchmark resources to 8 vCPU / 16 GiB Each provider gets 8 vCPUs and 16 GiB RAM for fair comparison: - E2B: cpuCount=8, memoryMB=16384 - Modal: cpu=4 (4 physical = 8 vCPUs), memoryMiB=16384 - Tensorlake: cpus=8, memoryMb=16384 - isorun: vcpus=8, memMiB=16384 - runloop: customCpuCores=8, customMemoryGb=16 - daytona: resources.cpu=8, resources.memory=16 (GiB) - upstash: size=large (8 cores, 16 GB) - vercel: resources.vcpus=8 (no memory control) - blaxel: memory=16384 (CPU derived: 16384/2048=8 cores) Providers without CPU/memory control (archil, cloudflare, northflank, beam, declaw, hopx, codesandbox) use their defaults. * fix: remove E2B from resource options - CPU/mem set at template build time E2B's Sandbox.create() accepts SandboxOpts which does not include cpuCount/memoryMB. Those are template build options only. * fix: standardize dax resource specs for all providers to 8 vCPU / 16 GiB - Fix runloop: nest resource params in launch_parameters with snake_case - Add beam: cpu=8, memory=16384 MiB - Add codesandbox: vmTier=VMTier.Small (8 CPU / 16 GiB) - Add northflank: deploymentPlan resolved via API at runtime - Add E2B template build prereq (base-8cpu-16gb with 8 vCPU / 16 GiB) - Add Northflank plan discovery prereq script * feat: local benchmark script with apt/dnf and arch detection - Add scripts/provider-benchmark.sh: vendored from upstream with dnf support (RHEL/Fedora) alongside apt-get (Debian/Ubuntu) and aarch64 architecture detection for Node.js and Bun downloads - Update dax.ts to load script from local filesystem instead of curl, eliminating curl dependency for providers that don't ship it * rename: provider-benchmark.sh to dax-benchmark.sh * feat: add namespace provider to dax benchmark (16 vCPU / 32 GiB) * dax: standardize declaw resources via node-large template (#197) Adds declaw to DAX_RESOURCE_OPTIONS so it targets the same 8 vCPU / 16 GiB profile as the other providers in the map. The node-large template provisions 8 vCPU / 16 GiB RAM with an 8 GiB disk overlay. Co-authored-by: shivam-declaw <272314190+shivam-declaw@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: bun zip path, northflank API fallback, daytona snapshot, namespace node image - Fix BUN_INTERNAL_PATH: remove .zip extension from zip-internal path (was bun-linux-x64-baseline.zip/bun, should be bun-linux-x64-baseline/bun) - Northflank: robust API response parsing, graceful fallback to nf-compute-50, sanitize plan ID before writing to GITHUB_ENV - Daytona: remove from DAX_RESOURCE_OPTIONS (resources not supported with snapshot-based sandbox creation) - Namespace: add sandboxOptions image node:22 (dax benchmark requires node) * fix: northflank smallest plan selection + E2B command timeout workaround - Northflank: pick smallest suitable plan instead of closest to reduce chance of exceeding project resource allowance - E2B: workaround for 60s command timeout by setting defaultProcessConnectionTimeout=0 via getInstance() while waiting for upstream wrapper fix to forward timeoutMs * fix: daytona use image-based creation to enable resource configuration Add image: 'node:22' to daytona sandboxOptions to switch from snapshot-based to image-based creation, which allows specifying resources. Re-add daytona to DAX_RESOURCE_OPTIONS with 8 vCPU / 16 GiB. * remove: drop cloud-run from dax benchmark (code interpreter model, not full sandbox) * add: re-add cloud-run to dax benchmark matrix * fix: bump @computesdk/* to latest versions with timeout forwarding Update all @computesdk/* packages to versions from changeset PR #652: - @computesdk/e2b@1.7.52: forwards RunCommandOptions.timeout to E2B commands - @computesdk/hopx@0.2.27: forwards RunCommandOptions.timeout to hopx commands - @computesdk/runloop@1.3.54: properly merges launch_parameters - computesdk@4.1.4: typed SandboxResourceOptions Remove E2B defaultProcessConnectionTimeout workaround (no longer needed since @computesdk/e2b now forwards timeout natively). Pass timeout to sandbox.runCommand() so the native timeout forwarding kicks in for E2B and hopx. * fix: correctly size upstash and superserve boxes Upstash: remove ephemeral: true from sandboxOptions. The ComputeSDK wrapper's ephemeral path doesn't forward 'size' to EphemeralBox.create(), so size: 'large' was silently dropped and the box ran on 'small'. Using a regular Box ensures the resource sizing is applied. Superserve: add vcpu: 8, memoryMib: 16384 to DAX_RESOURCE_OPTIONS. Previously had no resource sizing at all - relied on template defaults which may be undersized. The superserve SDK accepts these as overrides on sandbox creation. * fix: use namespace builtin:base image instead of node:22 Omit explicit image from namespace sandboxOptions so the provider defaults to its builtin:base image, as intended by the namespace team. * fix: increase E2B sandbox lifespan to 10 minutes E2B default sandbox lifespan is 5 minutes (300s). The benchmark can take longer on cold starts or under resource contention, causing the sandbox to be killed mid-execution. Pass timeout: 600_000 (10 min) to Sandbox.create() via the timeoutMs option. * fix: use templateId instead of template for E2B sandbox creation The E2B ComputeSDK provider destructures 'templateId' from sandbox options, not 'template'. Passing 'template' caused it to be treated as an unknown passthrough option, and the sandbox was created from E2B's default template instead of our custom base-8cpu-16gb template. --------- Co-authored-by: Shivam Nayak <shivam@declaw.ai> Co-authored-by: shivam-declaw <272314190+shivam-declaw@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 86a8666 commit f98cb47

8 files changed

Lines changed: 1033 additions & 176 deletions

File tree

.github/workflows/sandbox-dax-benchmarks.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ jobs:
5757
- isorun
5858
- lightning
5959
- modal
60+
- namespace
6061
- northflank
6162
- runloop
6263
- superserve
@@ -76,6 +77,16 @@ jobs:
7677
else
7778
npm ci
7879
fi
80+
- name: Build E2B template with 8 vCPU / 16 GiB
81+
if: matrix.provider == 'e2b'
82+
env:
83+
E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
84+
run: npx tsx scripts/build-e2b-template.ts
85+
- name: Find Northflank plan for 8 vCPU / 16 GiB
86+
if: matrix.provider == 'northflank'
87+
env:
88+
NORTHFLANK_TOKEN: ${{ secrets.NORTHFLANK_TOKEN }}
89+
run: npx tsx scripts/find-northflank-plan.ts
7990
- name: Clear stale results from checkout
8091
run: rm -rf results/
8192
- name: Run dax benchmark
@@ -103,6 +114,7 @@ jobs:
103114
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
104115
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
105116
NORTHFLANK_TOKEN: ${{ secrets.NORTHFLANK_TOKEN }}
117+
NSC_TOKEN: ${{ secrets.NSC_TOKEN }}
106118
NORTHFLANK_PROJECT_ID: ${{ secrets.NORTHFLANK_PROJECT_ID }}
107119
RUNLOOP_API_KEY: ${{ secrets.RUNLOOP_API_KEY }}
108120
SUPERSERVE_API_KEY: ${{ secrets.SUPERSERVE_API_KEY }}

0 commit comments

Comments
 (0)