−25%

Windows کی سالانہ ادائیگی پر، 31 اکتوبر تک۔ پلانز دیکھیں

EQVPS
شروع کریں

سینڈ باکسز

آپ کے اسکرپٹس اور 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۔

دو موڈ

عارضی (ڈیفالٹ) — ایک کام کے لیے۔ delete کال کرنے پر، بیکاری کی مدت کے بعد (ڈیفالٹ 5 منٹ، زیادہ سے زیادہ 1 گھنٹہ) یا TTL ختم ہونے پر (زیادہ سے زیادہ 24 گھنٹے) حذف ہو جاتا ہے۔ فی سیکنڈ چارج، کم از کم 60 سیکنڈ۔
مستقل — اپنی ڈسک اور حالت 30 دن تک رکھتا ہے۔ ہر شروع ہونے والے گھنٹے کا چارج ہوتا ہے، اور ایک کیلنڈر مہینہ کبھی 730 گھنٹے منفی 25% سے زیادہ نہیں پڑتا۔ بیلنس ختم ہو جائے تو اسنیپ شاٹ میں روک دیا جاتا ہے (کوئی چارج نہیں) اور ٹاپ اپ کے بعد دوبارہ چلتا ہے؛ رکے ہوئے اسنیپ شاٹس 14 دن رکھے جاتے ہیں۔

ٹیرف

ٹیرفvCPURAMڈسکنیٹ ورکفی گھنٹہمستقل، ماہانہ حد
micro0.25512 MB3 GB50 Mbit/s$0.0165$9.03
small0.51 GB5 GB100 Mbit/s$0.033$18.07
standard12 GB10 GB200 Mbit/s$0.066$36.14
plus24 GB15 GB300 Mbit/s$0.132$72.27
pro48 GB20 GB400 Mbit/s$0.264$144.54
max816 GB40 GB500 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 ماحولیاتی متغیر میں رکھیں (اسے حاصل کرنے کا طریقہ «اکاؤنٹ جوڑنا» میں ہے)۔

Python
# 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']}")
Node.js
// 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 پر خود دوبارہ کوشش کرتے ہیں اور بلاک ختم ہونے پر سینڈ باکس ہمیشہ حذف کر دیتے ہیں۔ انسٹال اور مثال:

Python · eqvps
# 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
TypeScript · @eqvps/sdk
// 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

اکاؤنٹ جوڑنا: ٹوکن، کنفیگ، پہلا سینڈ باکس، بیلنس ←

تبصرے

ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔

ایک تبصرہ چھوڑیں

تبصرے ظاہر ہونے سے پہلے moderate کیے جاتے ہیں۔