Sandbox
MicroVM za Linux zilizotengwa kwa ajili ya msimbo unaoendeshwa na skripti na mawakala wako wa AI. Sandbox huwaka ndani ya takriban sekunde moja, huendesha Python, Node.js au bash, na hutozwa kwa sekunde kutoka salio lilelile la seva zako.
Sandbox ni nini
Mashine ndogo ya Linux unayoiunda kupitia API au MCP, kuitumia sekunde chache au siku chache, kisha kuifuta. Intaneti inayotoka inafanya kazi (pip install, npm install, git clone). Hakuna milango ya kuingia wala SSH: amri na faili hupita kupitia API. Ndani: Python 3.12 na pip, Node.js 22 na npm, bash, git na curl.
Hali mbili
Mipango
| Mpango | vCPU | RAM | Diski | Mtandao | Kwa saa | Ya kudumu, juu kwa mwezi |
|---|---|---|---|---|---|---|
| micro | 0.25 | 512 MB | 3 GB | 50 Mbit/s | $0.0165 | $9.03 |
| small | 0.5 | 1 GB | 5 GB | 100 Mbit/s | $0.033 | $18.07 |
| standard | 1 | 2 GB | 10 GB | 200 Mbit/s | $0.066 | $36.14 |
| plus | 2 | 4 GB | 15 GB | 300 Mbit/s | $0.132 | $72.27 |
| pro | 4 | 8 GB | 20 GB | 400 Mbit/s | $0.264 | $144.54 |
| max | 8 | 16 GB | 40 GB | 500 Mbit/s | $0.528 | $289.08 |
Unalipia vCPU na RAM za mpango unaochagua: $0.040 kwa vCPU-saa na $0.013 kwa GiB-saa. Bei za sasa bila tokeni: GET /sandboxes/tariffs.
Mipaka ya kujua
Amri moja huendeshwa hadi sekunde 55; kazi ndefu zaidi huendeshwa kama kazi za chinichini na unauliza matokeo. Faili hadi MB 5 kwa ombi, kubwa zaidi (hadi GB 2) kupitia viungo vya kupakua na kupakia vya mara moja. Akaunti moja inaweza kuendesha hadi sandbox 20 na amri 2 kwa wakati mmoja.
Vigezo vya mazingira
Pitisha siri na mipangilio kama env. Ukiviweka wakati wa kuunda, vinatumika kwa kila amri ndani ya sandbox; ukiviweka kwenye exec au run, vinatumika kwa mwito huo pekee na kubadilisha thamani za sandbox. Hadi vigezo 64, KB 32 kwa kila thamani na KB 64 kwa jumla. Thamani huhifadhiwa zikiwa zimesimbwa, API haizirudishi kamwe na haziandikwi kwenye kumbukumbu: majibu huonyesha majina pekee (env_keys).
API=https://api.eqvps.com/api/v1/eqvps
AUTH="Authorization: Bearer $EQVPS_API_KEY"
# env for the whole sandbox (only the names come back, as env_keys)
SB=$(curl -s -X POST $API/sandboxes -H "$AUTH" -H "Content-Type: application/json" \
-d '{"tariff":"small","env":{"DB_URL":"postgres://user:pass@db/app","MODE":"test"}}' | jq -r .id)
# env for one call, merged over the sandbox env
curl -s -X POST $API/sandboxes/$SB/exec -H "$AUTH" -H "Content-Type: application/json" \
-d '{"command":"echo $MODE $RUN_ID","env":{"RUN_ID":"42"}}'Kikomo cha matumizi
Kwa chaguo-msingi sandbox hazina kikomo cha matumizi. Unaweza kuweka kikomo cha siku na cha mwezi kwenye dashibodi au kwa PUT /sandboxes/budget. Kikomo kikifikiwa, sandbox mpya hupata 429 budget_exceeded, za muda zinazoendeshwa hufutwa na za kudumu husitishwa huku diski ikihifadhiwa. Huendelea unapoongeza kikomo au siku au mwezi mpya unapoanza (UTC).
# daily cap $5, monthly cap $50 (null = no cap)
curl -s -X PUT $API/sandboxes/budget -H "$AUTH" -H "Content-Type: application/json" \
-d '{"daily_usd":5,"monthly_usd":50}'
# spent today / this month and when the caps reset (UTC)
curl -s $API/sandboxes/budget -H "$AUTH"Kuanza haraka: MCP (Claude Code, Cursor na wateja wengine)
Unganisha seva ya MCP mara moja, kisha mwombe wakala kwa maneno yako mwenyewe. Zana za sandbox: create_sandbox, run_code, exec_command, get_task, kill_task, get_upload_url, get_download_url, list_sandboxes, get_sandbox, kill_sandbox, sandbox_pricing.
claude mcp add --transport http eqvps https://mcp.eqvps.com/mcp \
--header "Authorization: Bearer $EQVPS_API_KEY"Unda sandbox ndogo, endesha print(2 + 2) kwa Python, nionyeshe matokeo kisha ufute sandbox.Kuanza haraka: REST kutoka Python na Node.js
Hakuna vifurushi vya ziada vinavyohitajika. Weka tokeni yako kwenye kigezo cha mazingira EQVPS_API_KEY (jinsi ya kuipata: “Kuunganisha akaunti yako”).
# first_sandbox.py — Python 3.8+, standard library only
import json, os, urllib.request
API = "https://api.eqvps.com/api/v1/eqvps"
KEY = os.environ["EQVPS_API_KEY"]
def call(method, path, body=None):
req = urllib.request.Request(API + path, method=method,
data=json.dumps(body).encode() if body is not None else None,
headers={"Authorization": "Bearer " + KEY,
"Content-Type": "application/json", "Accept": "application/json"})
with urllib.request.urlopen(req, timeout=90) as r: # HTTPError on 401/402/…
return json.loads(r.read() or b"{}")
sb = call("POST", "/sandboxes", {"tariff": "small"})
try:
r = call("POST", f"/sandboxes/{sb['id']}/run",
{"language": "python", "code": "print(2 + 2)"})
print(r["exit_code"], r["stdout"]) # 0 4
finally:
call("DELETE", f"/sandboxes/{sb['id']}")// first_sandbox.mjs — Node.js 18+ (built-in fetch), run: node first_sandbox.mjs
const API = "https://api.eqvps.com/api/v1/eqvps";
const KEY = process.env.EQVPS_API_KEY;
async function call(method, path, body) {
const r = await fetch(API + path, {
method,
headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json", Accept: "application/json" },
body: body ? JSON.stringify(body) : undefined,
});
const data = await r.json();
if (!r.ok) throw new Error(`${r.status} ${data.error ?? ""} ${data.message ?? ""}`);
return data;
}
const sb = await call("POST", "/sandboxes", { tariff: "small" });
try {
const r = await call("POST", `/sandboxes/${sb.id}/run`, { language: "node", code: "console.log(2 + 2)" });
console.log(r.exit_code, r.stdout); // 0 4
} finally {
await call("DELETE", `/sandboxes/${sb.id}`);
}SDK kwa Python na TypeScript
Unapendelea maktaba? Vifurushi vya Python na TypeScript hufanya maombi yaleyale ya REST, hujaribu tena wenyewe 429 na 503 na daima hufuta sandbox kizuizi kinapoisha. Usakinishaji na mfano:
# pip install -U eqvps https://pypi.org/project/eqvps/ (0.2.0+ for env)
# "eqvps sandbox create" = Sandbox.create() here · create_sandbox in MCP · POST /sandboxes in REST (no CLI)
from eqvps import Sandbox
# EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
with Sandbox.create(tariff="small", env={"DB_URL": "postgres://user:pass@db/app"}) as sb:
r = sb.run("print(2 + 2)")
print(r.stdout, r.exit_code) # "4\n" 0
sb.upload("/root/data.csv", "a,b\n1,2\n")
print(sb.exec("wc -l /root/data.csv").stdout)
print(sb.exec("echo $RUN_ID", env={"RUN_ID": "42"}).stdout) # env for one call
# the sandbox is deleted when the block exits, also on errors// npm i @eqvps/sdk@latest https://www.npmjs.com/package/@eqvps/sdk (0.2.0+ for env)
import { Sandbox } from "@eqvps/sdk";
// EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
await Sandbox.with({ tariff: "small", env: { DB_URL: "postgres://user:pass@db/app" } }, async (sb) => {
const r = await sb.run("print(2 + 2)");
console.log(r.stdout, r.exit_code); // "4\n" 0
console.log((await sb.exec("echo $RUN_ID", { env: { RUN_ID: "42" } })).stdout); // env for one call
}); // deleted afterwards, also on errorsKuunganisha akaunti yako: tokeni, usanidi, sandbox ya kwanza, salio →
Maoni
Bado hakuna maoni. Kuwa wa kwanza.