−25%

Windows के सालाना भुगतान पर, 31 अक्टूबर तक। प्लान देखें

EQVPS
शुरू करें

सैंडबॉक्स API संदर्भ: Python और TypeScript SDK

EQVPS सैंडबॉक्स SDK के सभी मेथड एक पेज पर: पैरामीटर, डिफ़ॉल्ट मान, रिटर्न वैल्यू और सभी 11 एरर क्लास, Python और TypeScript में एक ही उदाहरण के साथ।

आख़िरी जाँच: 2026-10-10 · SDK 0.2.0 (PyPI eqvps, npm @eqvps/sdk)

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 एक ऑप्शन ऑब्जेक्ट।

PythonTypeScriptडिफ़ॉल्टमतलब
modemode"ephemeral""ephemeral" (प्रति सेकंड) या "persistent" (हर शुरू हुए घंटे के हिसाब से, डिस्क बची रहती है)
tarifftariff"small"micro, small, standard, plus, pro, max
idle_timeoutidleTimeout300अस्थायी सैंडबॉक्स मिटने से पहले बिना गतिविधि के कितने सेकंड, अधिकतम 3600
ttlttl—सेकंड में अधिकतम उम्र: अस्थायी के लिए 86400 तक, स्थायी के लिए 2592000 तक
envenv—हर कमांड के लिए एनवायरनमेंट वेरिएबल, एन्क्रिप्ट करके रखे जाते हैं
api_key, base_urlapiKey, baseUrlएनवायरनमेंट वेरिएबलEQVPS_API_KEY / EQVPS_API_URL की जगह लेते हैं
timeouttimeoutMs70 से.हर रिक्वेस्ट का HTTP टाइमआउट
max_retriesmaxRetries3429/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कितनी देर चला
okexit_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क्या करें
AuthenticationError401unauthenticatedटोकन जाँचें
InsufficientBalanceError402insufficient_balanceबैलेंस टॉप अप करें
NotFoundError404not_foundग़लत id, या फ़ाइल मौजूद नहीं
SandboxPausedError409sandbox_pausedबैलेंस ख़त्म होने से रुका है; टॉप अप के बाद फिर चलेगा
SandboxDeletedError410sandbox_deletedहमेशा के लिए मिट चुका
FileTooLargeError413file_too_largeट्रांसफ़र 5 MB से कम रखें
ValidationError422invalid_requestपैरामीटर ठीक करें
RateLimitError429too_many_concurrent, too_many_tasks, rate_limitedरुककर फिर कोशिश करें
BudgetExceededError429budget_exceededसैंडबॉक्स की रोज़ाना या मासिक ख़र्च सीमा पूरी हो गई
CapacityError503capacityथोड़ी देर बाद कोशिश करें या छोटा टैरिफ़ चुनें
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 का ट्रायल है।

अक्सर पूछे जाने वाले सवाल

SDK किन Python और Node.js वर्ज़न को सपोर्ट करता है?

Python पैकेज को Python 3.8 या नया चाहिए और इसकी कोई डिपेंडेंसी नहीं है। TypeScript पैकेज की भी कोई डिपेंडेंसी नहीं है; यह Node.js 18+, Deno, Bun और fetch वाले ब्राउज़र में चलता है।

SDK मेरी API कुंजी कहाँ से लेता है?

api_key / apiKey आर्ग्युमेंट से या EQVPS_API_KEY एनवायरनमेंट वेरिएबल से। कुंजी एक सामान्य EQVPS खाते का टोकन है। EQVPS_API_URL API का पता बदलता है; इसकी ज़रूरत सिर्फ़ टेस्टिंग में पड़ती है।

क्या SDK विफल रिक्वेस्ट दोबारा भेजता है?

जब सर्वर Retry-After भेजता है, तो 429 और 503 को अधिकतम 3 बार दोबारा भेजता है और हर बार ज़्यादा से ज़्यादा 30 सेकंड इंतज़ार करता है। इन स्टेटस का मतलब है कि कुछ भी चलने से पहले रिक्वेस्ट ठुकरा दी गई, इसलिए run और exec को दोहराना सुरक्षित है। नेटवर्क एरर सिर्फ़ GET के लिए दोहराए जाते हैं; run, exec और upload कभी दो बार नहीं भेजे जाते।

क्या शून्य से अलग एग्ज़िट कोड एक्सेप्शन है?

नहीं। run और exec ऐसा नतीजा लौटाते हैं जिसमें exit_code, stdout और stderr होते हैं। result.ok या result.exit_code देखें। एक्सेप्शन सिर्फ़ API एरर पर आते हैं, जैसे ख़ाली बैलेंस या ग़लत टोकन।

कोड क्रैश हो जाए तो सैंडबॉक्स ज़रूर मिटे, यह कैसे पक्का करूँ?

स्कोप वाला तरीक़ा अपनाएँ: Python में with Sandbox.create() as sb, TypeScript में Sandbox.with(options, fn) या await using। ब्लॉक ख़त्म होते ही सैंडबॉक्स मिट जाता है, एक्सेप्शन के बाद भी।

टिप्पणियाँ

अभी तक कोई टिप्पणी नहीं। पहले बनें।

एक टिप्पणी छोड़ें

टिप्पणियाँ दिखने से पहले मॉडरेट की जाती हैं।