−25%

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

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

অ্যাকাউন্ট যুক্ত করা: টোকেন, কনফিগ, প্রথম স্যান্ডবক্স, ব্যালেন্স →

মন্তব্য

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

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

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