SDK सैंडबॉक्स REST API के ऊपर एक पतली परत है। यह आपको तीन झंझटों से बचाता है: रिक्वेस्ट हाथ से बनाना, प्लेटफ़ॉर्म व्यस्त होने पर दोबारा भेजना, और कोड के एक्सेप्शन फेंकने पर सैंडबॉक्स मिटाना भूल जाना। यहाँ की हर बात दोनों पैकेज के वर्ज़न 0.2.0 से मेल खाती है।
अगर आपने कभी सैंडबॉक्स नहीं बनाया, तो पहले 5 मिनट की कनेक्शन गाइड से टोकन लें। सैंडबॉक्स क्या है और उसके अंदर क्या है, यह सैंडबॉक्स में बताया गया है।
इंस्टॉल और कॉन्फ़िगर
pip install eqvps # Python 3.8+
npm i @eqvps/sdk # Node.js 18+, Deno, Bun
export EQVPS_API_KEY=... # your EQVPS account token
दोनों भाषाओं में एक ही प्रोग्राम: सैंडबॉक्स बनाइए, कोड चलाइए, मिटाइए।
from eqvps import Sandbox
with Sandbox.create(tariff="small") as sb:
r = sb.run("print(2 + 2)")
print(r.exit_code, r.stdout) # 0 4
import { Sandbox } from "@eqvps/sdk";
await Sandbox.with({ tariff: "small" }, async (sb) => {
const r = await sb.run("print(2 + 2)");
console.log(r.exit_code, r.stdout); // 0 4
});
सैंडबॉक्स बनाना और ढूँढना
Sandbox.create(...) एक सैंडबॉक्स शुरू करता है, आम तौर पर लगभग एक सेकंड में। Python नाम वाले आर्ग्युमेंट लेता है, TypeScript एक ऑप्शन ऑब्जेक्ट।
| Python | TypeScript | डिफ़ॉल्ट | मतलब |
|---|---|---|---|
mode | mode | "ephemeral" | "ephemeral" (प्रति सेकंड) या "persistent" (हर शुरू हुए घंटे के हिसाब से, डिस्क बची रहती है) |
tariff | tariff | "small" | micro, small, standard, plus, pro, max |
idle_timeout | idleTimeout | 300 | अस्थायी सैंडबॉक्स मिटने से पहले बिना गतिविधि के कितने सेकंड, अधिकतम 3600 |
ttl | ttl | — | सेकंड में अधिकतम उम्र: अस्थायी के लिए 86400 तक, स्थायी के लिए 2592000 तक |
env | env | — | हर कमांड के लिए एनवायरनमेंट वेरिएबल, एन्क्रिप्ट करके रखे जाते हैं |
api_key, base_url | apiKey, baseUrl | एनवायरनमेंट वेरिएबल | EQVPS_API_KEY / EQVPS_API_URL की जगह लेते हैं |
timeout | timeoutMs | 70 से. | हर रिक्वेस्ट का HTTP टाइमआउट |
max_retries | maxRetries | 3 | 429/503 पर दोबारा कोशिशें |
Sandbox.connect(id) किसी मौजूदा सैंडबॉक्स से जुड़ता है, आम तौर पर कल बनाए किसी स्थायी सैंडबॉक्स से। Sandbox.list() खाते के सारे सैंडबॉक्स लौटाता है, चलते हुए भी और रुके हुए भी।
प्रॉपर्टी: id (sb_ + 24 हेक्स अक्षर), mode, tariff, state (running, starting, paused, pausing, resuming, deleting, deleted), env_keys / envKeys (सिर्फ़ नाम, मान कभी वापस नहीं आते) और info (कच्चा ऑब्जेक्ट)। refresh() इन्हें फिर से लोड करता है।
kill() सैंडबॉक्स मिटाता है और बिलिंग रोकता है। पहले से मिटे सैंडबॉक्स पर इसे बुलाना एरर नहीं है।
कोड चलाना
run(code, language="python", timeout=30) कोड को stdin से Python 3.12, Node.js 22 या bash ("python", "node", "bash") को भेजता है। exec(command, cwd=None, stdin=None, timeout=30) शेल कमांड चलाता है: स्ट्रिंग bash -lc से होकर जाती है, लिस्ट बिना शेल के argv की तरह चलती है।
दोनों ExecResult लौटाते हैं:
| फ़ील्ड | मतलब |
|---|---|
exit_code | प्रोसेस का एग्ज़िट कोड |
stdout, stderr | आउटपुट, हर स्ट्रीम में 1 MiB तक |
timed_out | कमांड अपने टाइमआउट तक पहुँच गया |
truncated | आउटपुट काटा गया |
duration_ms | कितनी देर चला |
ok | exit_code == 0 और कोई टाइमआउट नहीं |
एक सिंक्रोनस कॉल ज़्यादा से ज़्यादा 55 सेकंड चलता है। दोनों मेथड सिर्फ़ उस कॉल के लिए env भी लेते हैं; यह बनाते समय दिए गए मानों की जगह लेता है।
लंबे काम: बैकग्राउंड टास्क
background=True (TypeScript: { background: true }) दीजिए और आपको तुरंत एक Task मिलता है। इसमें 55 सेकंड की सीमा नहीं है और यह सैंडबॉक्स की उम्र ख़त्म होने तक चल सकता है। हर सैंडबॉक्स में 8 टास्क तक।
task = sb.exec("cd /root/app && python3 -m pytest -q", background=True)
result = task.wait(on_output=lambda out, err: print(out, end=""))
print(result.state, result.exit_code) # done 0
const task = await sb.exec("cd /root/app && npm test", { background: true });
const result = await task.wait({ onOutput: (out) => process.stdout.write(out) });
| मेथड | क्या करता है |
|---|---|
task.logs() | पिछले कॉल के बाद का नया stdout और stderr |
task.status() | आउटपुट पढ़े बिना स्थिति: running, done, failed, killed, timeout |
task.wait(timeout, poll_interval=2, on_output) | टास्क ख़त्म होने तक जाँचता है, TaskResult लौटाता है |
task.kill() | टास्क और उसके प्रोसेस रोकता है |
sb.task(id) / sb.tasks() | किसी टास्क से फिर जुड़ना / टास्क की सूची |
अगर wait का अपना टाइमआउट पूरा हो जाए, तो वह SandboxTimeoutError फेंकता है, पर टास्क चलता रहता है। चलता हुआ टास्क अस्थायी सैंडबॉक्स को निष्क्रियता की वजह से मिटने से भी रोकता है।
फ़ाइलें और इस्तेमाल
upload(path, content, mode=None) एब्सोल्यूट पाथ पर फ़ाइल लिखता है और उसका आकार लौटाता है। download(path) बाइट लौटाता है, download_text(path) / downloadText(path) स्ट्रिंग। एक ट्रांसफ़र की सीमा 5 MB है।
usage() चलने के सेकंड, इस्तेमाल हुए CPU सेकंड, बाहर गए बाइट, घंटे की कीमत, billed_usd और estimated_total_usd लौटाता है। tariffs() बिना कुंजी वाला सामान्य फ़ंक्शन है, जो मौजूदा कीमतें और सीमाएँ लौटाता है। बिलिंग के नियम सैंडबॉक्स की सीमाएँ और बिलिंग पर हैं।
एरर
हर API एरर EqvpsError की सबक्लास है, जिसमें status (HTTP), code (स्थिर स्ट्रिंग) और body होते हैं। सर्वर भेजे तो retry_after / retryAfter भरा रहता है।
| क्लास | HTTP | आम code | क्या करें |
|---|---|---|---|
AuthenticationError | 401 | unauthenticated | टोकन जाँचें |
InsufficientBalanceError | 402 | insufficient_balance | बैलेंस टॉप अप करें |
NotFoundError | 404 | not_found | ग़लत id, या फ़ाइल मौजूद नहीं |
SandboxPausedError | 409 | sandbox_paused | बैलेंस ख़त्म होने से रुका है; टॉप अप के बाद फिर चलेगा |
SandboxDeletedError | 410 | sandbox_deleted | हमेशा के लिए मिट चुका |
FileTooLargeError | 413 | file_too_large | ट्रांसफ़र 5 MB से कम रखें |
ValidationError | 422 | invalid_request | पैरामीटर ठीक करें |
RateLimitError | 429 | too_many_concurrent, too_many_tasks, rate_limited | रुककर फिर कोशिश करें |
BudgetExceededError | 429 | budget_exceeded | सैंडबॉक्स की रोज़ाना या मासिक ख़र्च सीमा पूरी हो गई |
CapacityError | 503 | capacity | थोड़ी देर बाद कोशिश करें या छोटा टैरिफ़ चुनें |
SandboxTimeoutError | — | request_timeout, wait_timeout | कमांड नहीं, HTTP रिक्वेस्ट (या wait) का समय पूरा हुआ |
ज़्यादातर 429 दो सीमाओं से आते हैं: एक खाता एक साथ 2 कमांड चलाता है और 20 तक सैंडबॉक्स रख सकता है। सर्वर बताए कि कितना रुकना है, तो SDK दोबारा कोशिश करता है; तीन कोशिशों के बाद आपको एक्सेप्शन मिलता है।
कब SDK की ज़रूरत नहीं
HTTP क्लाइंट वाली कोई भी भाषा सीधे API बुला सकती है; एंडपॉइंट https://eqvps.com/openapi.json पर OpenAPI फ़ाइल में हैं। Claude, Cursor या दूसरे MCP क्लाइंट में चलने वाले एजेंट को कोड की ज़रूरत ही नहीं: MCP सर्वर में वही सैंडबॉक्स टूल हैं। और अगर सिर्फ़ इसे चलते देखना है, तो सैंडबॉक्स पेज पर टैरिफ़ और नए खातों के लिए $1 का ट्रायल है।
टिप्पणियाँ
अभी तक कोई टिप्पणी नहीं। पहले बनें।