−25%

Windows-এর বার্ষিক পেমেন্টে, ৩১ অক্টোবর পর্যন্ত। প্ল্যান দেখুন

EQVPS
শুরু করুন

স্যান্ডবক্স API রেফারেন্স: Python ও TypeScript SDK

EQVPS স্যান্ডবক্স SDK-এর সব মেথড এক পাতায়: প্যারামিটার, ডিফল্ট মান, রিটার্ন ভ্যালু আর ১১টি এরর ক্লাসের সবকটি, Python ও TypeScript-এ একই উদাহরণসহ।

সর্বশেষ যাচাই: 2026-10-10 · SDK 0.2.0 (PyPI eqvps, npm @eqvps/sdk)

SDK হলো স্যান্ডবক্সের REST API-এর ওপর একটি পাতলা স্তর। এটি আপনাকে তিনটি ঝামেলা থেকে বাঁচায়: হাতে অনুরোধ বানানো, প্ল্যাটফর্ম ব্যস্ত থাকলে আবার পাঠানো, আর কোড এক্সেপশন ছুড়লে স্যান্ডবক্স মুছতে ভুলে যাওয়া। এখানকার সবকিছু দুটি প্যাকেজের সংস্করণ 0.2.0-এর সঙ্গে মেলে।

আগে কখনো স্যান্ডবক্স না বানিয়ে থাকলে আগে ৫ মিনিটের সংযোগ নির্দেশিকা থেকে টোকেন নিন। স্যান্ডবক্স কী আর এর ভেতরে কী আছে, তা স্যান্ডবক্স পাতায় আছে।

ইনস্টল ও কনফিগার

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-এর জায়গা নেয়
timeouttimeoutMs৭০ সে.প্রতিটি অনুরোধের HTTP টাইমআউট
max_retriesmaxRetries3429/503-এ আবার চেষ্টা

Sandbox.connect(id) বিদ্যমান স্যান্ডবক্সে যুক্ত হয়, সাধারণত গতকাল বানানো কোনো স্থায়ী স্যান্ডবক্সে। Sandbox.list() অ্যাকাউন্টের সব স্যান্ডবক্স ফেরত দেয়, চলমান আর থামানো দুটোই।

প্রপার্টি: id (sb_ + ২৪টি হেক্স অক্ষর), 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 এবং কোনো টাইমআউট নেই

একটি সিঙ্ক্রোনাস কল সর্বোচ্চ ৫৫ সেকেন্ড চলে। দুটো মেথডই শুধু ওই কলের জন্য env নেয়; এটি তৈরির সময় দেওয়া মানের জায়গা নেয়।

লম্বা কাজ: ব্যাকগ্রাউন্ড টাস্ক

background=True (TypeScript: { background: true }) দিন, সঙ্গে সঙ্গে একটি Task পাবেন। এতে ৫৫ সেকেন্ডের সীমা নেই, স্যান্ডবক্সের আয়ু শেষ হওয়া পর্যন্ত চলতে পারে। প্রতি স্যান্ডবক্সে সর্বোচ্চ ৮টি টাস্ক।

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 আসে দুটি সীমা থেকে: একটি অ্যাকাউন্ট একসঙ্গে ২টি কমান্ড চালায় আর সর্বোচ্চ ২০টি স্যান্ডবক্স রাখতে পারে। সার্ভার অপেক্ষার সময় জানালে 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 সর্বোচ্চ ৩ বার আবার পাঠায়, প্রতিবার সর্বোচ্চ ৩০ সেকেন্ড অপেক্ষা করে। এই স্ট্যাটাসের মানে হলো কিছু চলার আগেই অনুরোধ প্রত্যাখ্যাত হয়েছে, তাই 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। ব্লক শেষ হলেই স্যান্ডবক্স মুছে যায়, এক্সেপশনের পরেও।

মন্তব্য

এখনো কোনো মন্তব্য নেই। প্রথম হোন।

একটি মন্তব্য দিন

মন্তব্য প্রকাশের আগে মডারেট করা হয়।