ეს გზამკვლევი sandbox-ს JavaScript-იდან ან TypeScript-იდან უშვებს. ჩართავთ იზოლირებულ Firecracker microVM-ს, შეასრულებთ კოდს სამ ენაზე, გადაიტანთ ფაილებს და გრძელი სამუშაოს გამოსავალს თვალს ადევნებთ. თითოეული ნაბიჯი კოდის მოკლე ფრაგმენტია.
გჭირდებათ Node.js 18+ (ან Deno, ან Bun) და EQVPS-ის ანგარიში.
1. აიღეთ ტოკენი
SDK ანგარიშის ჩვეულებრივი ტოკენით ავთენტიფიცირდება. როგორ მიიღოთ ის პანელიდან, API-იდან ან MCP სერვერიდან, ნაჩვენებია ანგარიშის დაკავშირების გვერდზე.
export EQVPS_API_KEY="your-token"
ბალანსის გარეშე ახალი ანგარიში $1 sandbox-ის კრედიტს იღებს, როცა პირველ sandbox-ს ქმნის. ეს ამ გზამკვლევისთვის ბევრჯერ საკმარისია.
2. დააყენეთ SDK
npm i @eqvps/sdk
მაგალითები იყენებენ ES მოდულებს და ზედა დონის await-ს. შეინახეთ ისინი .mjs ფაილებად, ან .ts-ად და გაუშვით npx tsx-ით.
3. გაუშვით sandbox და შეასრულეთ კოდი
import { Sandbox } from "@eqvps/sdk";
await Sandbox.with({ tariff: "small" }, async (sb) => {
console.log(sb.id);
const r = await sb.run("import platform; print(platform.python_version())");
console.log(r.exit_code, r.stdout);
});
გამოსავალია sandbox-ის id (sb_ და კიდევ 24 სიმბოლო), შემდეგ 0 3.12.x. Sandbox.with შლის sandbox-ს, როცა callback სრულდება, მაშინაც კი, თუ ის შეცდომას აგდებს.
ნაგულისხმევი ენა Python-ია. დანარჩენი ორი ერთი პარამეტრითაა დაშორებული:
await Sandbox.with({}, async (sb) => {
const js = await sb.run("console.log(process.version)", { language: "node" });
const sh = await sb.run("uname -r && nproc", { language: "bash" });
console.log(js.stdout, sh.stdout);
});
წარუმატებელი სკრიპტი არაფერს აგდებს. შეამოწმეთ r.ok, რომელიც true-ა, როცა exit_code 0-ია და ბრძანებამ ტაიმაუტს არ მიაღწია.
4. Shell ბრძანებები და პაკეტები
exec იღებს shell სტრიქონს ან argv მასივს. sandbox-ს ინტერნეტზე წვდომა აქვს, ამიტომ npm-ითა და pip-ით ინსტალაცია მუშაობს:
await Sandbox.with({ tariff: "small" }, async (sb) => {
await sb.exec("mkdir -p /root/app && cd /root/app && npm init -y && npm i lodash", { timeout: 55 });
const r = await sb.exec(["node", "-e", "console.log(require('/root/app/node_modules/lodash').VERSION)"]);
console.log(r.stdout);
});
სინქრონული გამოძახება მაქსიმუმ 55 წამს გრძელდება. ყველაფერი უფრო გრძელი ფონურ ამოცანაში მიდის (ნაბიჯი 6).
5. ფაილები
await Sandbox.with({}, async (sb) => {
await sb.upload("/root/input.json", JSON.stringify({ values: [3, 5, 8] }));
await sb.run("import json; d = json.load(open('/root/input.json')); open('/root/out.txt', 'w').write(str(sum(d['values'])))");
console.log(await sb.downloadText("/root/out.txt")); // 16
});
upload იღებს სტრიქონს ან Uint8Array-ს. download აბრუნებს Uint8Array-ს, downloadText — სტრიქონს. ერთი გადაცემა 5 MB-ით შემოიფარგლება.
6. გრძელი სამუშაოები ცოცხალი გამოსავლით
await Sandbox.with({ tariff: "standard" }, async (sb) => {
const task = await sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", { background: true });
const res = await task.wait({ onOutput: (out) => process.stdout.write(out) });
console.log(res.state, res.exit_code); // done 0
});
ამოცანა მაშინვე ბრუნდება და 55-წამიანი ლიმიტი არ აქვს. wait ნაგულისხმევად ყოველ 2 წამში ამოწმებს (pollIntervalMs ამას ცვლის). task.kill() აჩერებს მას; sb.task(id) სხვა პროცესიდან ხელახლა უკავშირდება.
შეცდომები
import { Sandbox, InsufficientBalanceError, RateLimitError } from "@eqvps/sdk";
try {
await Sandbox.with({}, async (sb) => console.log((await sb.run("print(1)")).stdout));
} catch (e) {
if (e instanceof InsufficientBalanceError) console.log("Top up the balance");
else if (e instanceof RateLimitError) console.log("Busy, retry in", e.retryAfter);
else throw e;
}
SDK თავად იმეორებს 429-სა და 503-ს სამჯერ, როცა სერვერი Retry-After-ს აგზავნის. ყველაზე ხშირი 429 ჩნდება, როცა ერთ ანგარიშზე ერთდროულად ორზე მეტი ბრძანება მუშაობს. ყველა კლასი SDK-ის ცნობარშია.
ამ გზამკვლევის ღირებულება
თითოეული მაგალითი რამდენიმე წამი არსებობდა და მინიმალური 60 წამით დაირიცხა: small-ზე $0.00055, standard-ზე $0.0011. ნაბიჯი 6-ის სამუშაო standard-ზე დაახლოებით 100 წამი მუშაობდა, დაახლოებით $0.002. ყველაფერი ერთად ერთ ცენტზე გაცილებით ნაკლებია. ფასების სრული სია sandbox-ის ლიმიტებსა და ბილინგშია.
შემდეგი ნაბიჯები
- იგივე Python-ზე: Sandbox-ის Python SDK 5 წუთში.
- დააკავშირეთ მოდელი და მიეცით საკუთარი კოდის გაშვების საშუალება: თქვენი პირველი აგენტის ამოცანა sandbox-ში.
- ტარიფები და $1-იანი საცდელი: sandbox-ის გვერდი.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.