सैंडबॉक्स
आपकी स्क्रिप्ट और AI एजेंट जो कोड चलाते हैं, उसके लिए अलग-थलग Linux माइक्रोVM। सैंडबॉक्स लगभग एक सेकंड में शुरू होता है, Python, Node.js या bash चलाता है और उसी बैलेंस से प्रति सेकंड चार्ज होता है जिससे आपके सर्वर।
सैंडबॉक्स क्या है
एक छोटी Linux मशीन जिसे आप API या MCP से बनाते हैं, कुछ सेकंड या कुछ दिन इस्तेमाल करते हैं और हटा देते हैं। बाहर जाने वाला इंटरनेट काम करता है (pip install, npm install, git clone)। अंदर आने वाले पोर्ट और SSH नहीं हैं: कमांड और फ़ाइलें API से जाती हैं। अंदर: pip के साथ Python 3.12, npm के साथ Node.js 22, bash, git और curl।
दो मोड
टैरिफ़
| टैरिफ़ | vCPU | RAM | डिस्क | नेटवर्क | प्रति घंटा | स्थायी, मासिक अधिकतम |
|---|---|---|---|---|---|---|
| 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 |
आप चुने गए टैरिफ़ के vCPU और RAM के लिए भुगतान करते हैं: प्रति vCPU-घंटा $0.040 और प्रति GiB-घंटा $0.013। बिना टोकन के मौजूदा कीमतें: GET /sandboxes/tariffs।
जानने लायक सीमाएँ
एक कमांड अधिकतम 55 सेकंड चलती है; लंबे काम बैकग्राउंड टास्क की तरह चलते हैं और आप नतीजा पूछते रहते हैं। फ़ाइलें प्रति अनुरोध 5 MB तक, बड़ी (2 GB तक) एक बार के डाउनलोड और अपलोड लिंक से। एक अकाउंट एक साथ 20 सैंडबॉक्स और 2 कमांड चला सकता है।
एनवायरनमेंट वेरिएबल
सीक्रेट और सेटिंग्स env के ज़रिए भेजें। बनाते समय दिए जाएँ तो सैंडबॉक्स के हर कमांड पर लागू होते हैं; exec या run में दिए जाएँ तो सिर्फ़ उसी कॉल पर लागू होते हैं और सैंडबॉक्स के मानों को बदल देते हैं। अधिकतम 64 वेरिएबल, प्रति मान 32 KB और कुल 64 KB। मान एन्क्रिप्ट करके रखे जाते हैं, API उन्हें कभी नहीं लौटाता और वे लॉग में नहीं लिखे जाते: जवाबों में सिर्फ़ नाम दिखते हैं (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"}}'खर्च सीमा
डिफ़ॉल्ट रूप से सैंडबॉक्स पर कोई खर्च सीमा नहीं होती। आप डैशबोर्ड में या PUT /sandboxes/budget से दैनिक और मासिक सीमा तय कर सकते हैं। सीमा पूरी होने पर नए सैंडबॉक्स को 429 budget_exceeded मिलता है, चल रहे अस्थायी सैंडबॉक्स हटा दिए जाते हैं और स्थायी सैंडबॉक्स डिस्क सुरक्षित रखते हुए रोक दिए जाते हैं। सीमा बढ़ाने या नया दिन या महीना शुरू होने पर (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"जल्दी शुरुआत: MCP (Claude Code, Cursor और दूसरे क्लाइंट)
MCP सर्वर एक बार जोड़ें, फिर एजेंट से अपने शब्दों में कहें कि क्या करना है। सैंडबॉक्स टूल: 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"एक छोटा सैंडबॉक्स बनाओ, Python में print(2 + 2) चलाओ, आउटपुट दिखाओ और सैंडबॉक्स हटा दो।जल्दी शुरुआत: Python और Node.js से REST
किसी अतिरिक्त पैकेज की ज़रूरत नहीं। अपना टोकन EQVPS_API_KEY एनवायरनमेंट वेरिएबल में रखें (इसे पाने का तरीका «अकाउंट जोड़ना» में है)।
# 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}`);
}Python और TypeScript के लिए SDK
लाइब्रेरी पसंद है? Python और TypeScript पैकेज वही REST कॉल करते हैं, 429 और 503 पर खुद दोबारा कोशिश करते हैं और ब्लॉक खत्म होने पर सैंडबॉक्स हमेशा हटा देते हैं। इंस्टॉल और उदाहरण:
# 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 errors
टिप्पणियाँ
अभी तक कोई टिप्पणी नहीं। पहले बनें।