SDK በsandbox REST API ላይ ያለ ቀጭን መጠቅለያ ነው። ከሶስት ነገሮች ያድንዎታል፦ ጥያቄዎችን በእጅ መገንባት፣ መድረኩ ሲጨናነቅ ደግሞ መሞከር፣ እና ኮድዎ ልዩ ሁኔታ ሲጥል sandboxን መሰረዝ መርሳት። እዚህ ያለው ሁሉ ከሁለቱም ጥቅሎች ስሪት 0.2.0 ጋር ይዛመዳል።
sandbox ፈጥረው የማያውቁ ከሆነ፣ የ5 ደቂቃ የግንኙነት መመሪያ መጀመሪያ ቶከን ይሰጥዎታል። sandbox ምን እንደሆነ እና በውስጡ ምን እንዳለ በሳንድቦክሶች ውስጥ ተገልጿል።
መጫን እና ማዋቀር
pip install eqvps # Python 3.8+
npm i @eqvps/sdk # Node.js 18+, Deno, Bun
export EQVPS_API_KEY=... # your EQVPS account token
በሁለቱም ቋንቋዎች ተመሳሳይ ፕሮግራም፦ sandbox ይፍጠሩ፣ ኮድ ያሂዱ፣ ይሰርዙት።
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ዎችን መፍጠር እና ማግኘት
Sandbox.create(...) sandbox ያስጀምራል፣ ብዙውን ጊዜ በአንድ ሰከንድ ገደማ። Python በስም የተሰየሙ ነጋሪ እሴቶችን ይወስዳል፣ TypeScript አንድ የአማራጮች ነገር።
| Python | TypeScript | ነባሪ | ትርጉም |
|---|---|---|---|
mode | mode | "ephemeral" | "ephemeral" (በሰከንድ) ወይም "persistent" (በእያንዳንዱ የተጀመረ ሰዓት፣ ዲስኩን ይይዛል) |
tariff | tariff | "small" | micro፣ small፣ standard፣ plus፣ pro፣ max |
idle_timeout | idleTimeout | 300 | ጊዜያዊ sandbox ከመሰረዙ በፊት ያለ እንቅስቃሴ የሚቆይባቸው ሰከንዶች፣ እስከ 3600 |
ttl | ttl | — | ከፍተኛው የዕድሜ ዘመን በሰከንድ፦ ጊዜያዊ እስከ 86400፣ ቋሚ እስከ 2592000 |
env | env | — | ለእያንዳንዱ ትዕዛዝ የአካባቢ ተለዋዋጮች፣ ተመስጥረው ይቀመጣሉ |
api_key፣ base_url | apiKey፣ baseUrl | የአካባቢ ተለዋዋጮች | EQVPS_API_KEY / EQVPS_API_URLን ይተካሉ |
timeout | timeoutMs | 70 ሰ | ለእያንዳንዱ ጥያቄ የHTTP የጊዜ ገደብ |
max_retries | maxRetries | 3 | በ429/503 ላይ ድጋሚ ሙከራዎች |
Sandbox.connect(id) ከነባር sandbox ጋር ይገናኛል፣ ብዙውን ጊዜ ትናንት የፈጠሩት ቋሚ sandbox። Sandbox.list() በመለያው ላይ ያሉትን ሁሉንም sandboxዎች ይመልሳል፣ የሚሠሩትንም የቆሙትንም።
ባህሪያት፦ id (sb_ + 24 ሄክሳዴሲማል ቁምፊዎች)፣ mode፣ tariff፣ state (running፣ starting፣ paused፣ pausing፣ resuming፣ deleting፣ deleted)፣ env_keys / envKeys (ስሞች ብቻ፣ እሴቶቹ በፍጹም አይመለሱም) እና info (ጥሬው ነገር)። refresh() እንደገና ይጭናቸዋል።
kill() sandboxን ይሰርዛል እና ክፍያውን ያቆማል። አስቀድሞ በተሰረዘ sandbox ላይ መጥራት ስህተት አይደለም።
ኮድ ማሄድ
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) የshell ትዕዛዝ ያሂዳል፦ ሕብረቁምፊ በbash -lc በኩል ያልፋል፣ ዝርዝር ያለ shell እንደ argv ይፈጸማል።
ሁለቱም ExecResult ይመልሳሉ፦
| መስክ | ትርጉም |
|---|---|
exit_code | የሂደቱ የመውጫ ኮድ |
stdout፣ stderr | ውጤት፣ በእያንዳንዱ ፍሰት እስከ 1 MiB |
timed_out | ትዕዛዙ የጊዜ ገደቡ ላይ ደርሷል |
truncated | ውጤቱ ተቆርጧል |
duration_ms | ምን ያህል ጊዜ እንደሮጠ |
ok | exit_code == 0 እና የጊዜ ገደቡ አልተሻገረም |
የተመሳሰለ ጥሪ ቢበዛ 55 ሰከንድ ሊሮጥ ይችላል። ሁለቱም ዘዴዎች ለዚያ አንድ ጥሪ ብቻ env ይቀበላሉ፤ ይህ በፍጠራ ጊዜ የተቀመጡትን እሴቶች ይተካል።
ረጅም ስራዎች፦ የጀርባ ተግባራት
background=True (በTypeScript { background: true }) ይስጡ እና ወዲያውኑ Task ያገኛሉ። የ55 ሰከንድ ገደብ የለውም እና የsandbox ዕድሜ እስኪያልቅ ድረስ ሊሮጥ ይችላል። በእያንዳንዱ sandbox እስከ 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 ይጥላል፣ ግን ተግባሩ መሮጡን ይቀጥላል። የሚሮጥ ተግባር ጊዜያዊ sandboxን በእንቅስቃሴ-አልባነት ምክንያት ከመሰረዝም ይጠብቀዋል።
ፋይሎች እና አጠቃቀም
upload(path, content, mode=None) በፍፁም ዱካ ላይ ፋይል ይጽፋል እና መጠኑን ይመልሳል። download(path) ባይቶችን ይመልሳል፣ download_text(path) / downloadText(path) ሕብረቁምፊ። አንድ ዝውውር በ5 MB የተገደበ ነው።
usage() የሩጫ ሰከንዶችን፣ ጥቅም ላይ የዋሉ የCPU ሰከንዶችን፣ ወጪ ባይቶችን፣ የሰዓት ዋጋን፣ billed_usd እና estimated_total_usdን ይመልሳል። tariffs() ቁልፍ የማያስፈልገው ተራ ተግባር ሲሆን የአሁኑን ዋጋዎች እና ገደቦች ይመልሳል። የክፍያ ደንቦቹ በsandbox ገደቦች እና ክፍያ ውስጥ ናቸው።
ስህተቶች
እያንዳንዱ የAPI ስህተት status (HTTP)፣ code (የተረጋጋ ሕብረቁምፊ) እና body ያለው የEqvpsError ንዑስ ክፍል ነው። አገልጋዩ ሲልከው retry_after / retryAfter ይሞላል።
| ክፍል | HTTP | የተለመደ code | ምን ማድረግ |
|---|---|---|---|
AuthenticationError | 401 | unauthenticated | ቶከኑን ይፈትሹ |
InsufficientBalanceError | 402 | insufficient_balance | ቀሪ ሒሳቡን ይሙሉ |
NotFoundError | 404 | not_found | የተሳሳተ id፣ ወይም የሌለ ፋይል |
SandboxPausedError | 409 | sandbox_paused | ቀሪ ሒሳቡ ካለቀ በኋላ ቆሟል፤ ከሞሉ በኋላ ይቀጥላል |
SandboxDeletedError | 410 | sandbox_deleted | ለዘለቄታው ተሰርዟል |
FileTooLargeError | 413 | file_too_large | ዝውውሮችን ከ5 MB በታች ያቆዩ |
ValidationError | 422 | invalid_request | መለኪያዎቹን ያስተካክሉ |
RateLimitError | 429 | too_many_concurrent፣ too_many_tasks፣ rate_limited | ይጠብቁ እና ደግመው ይሞክሩ |
BudgetExceededError | 429 | budget_exceeded | የsandbox ዕለታዊ ወይም ወርሃዊ ገደብዎ ላይ ደርሰዋል |
CapacityError | 503 | capacity | ትንሽ ቆይተው ይሞክሩ ወይም ያነሰ ታሪፍ ይምረጡ |
SandboxTimeoutError | — | request_timeout፣ wait_timeout | የHTTP ጥያቄው (ወይም wait) ጊዜው አልፏል፣ ትዕዛዙ ሳይሆን |
አብዛኞቹን 429ዎች የሚያስከትሉት ሁለት ገደቦች ናቸው፦ አንድ መለያ በአንድ ጊዜ 2 ትዕዛዞችን ያሂዳል እና እስከ 20 sandboxዎችን ይይዛል። አገልጋዩ ምን ያህል መጠበቅ እንዳለበት ሲናገር SDK እነዚህን ደግሞ ይሞክራል፤ ከሶስት ሙከራዎች በኋላ ልዩ ሁኔታው ይደርስዎታል።
SDK መቼ አያስፈልግም
HTTP ደንበኛ ያለው ማንኛውም ቋንቋ APIን በቀጥታ መጥራት ይችላል፤ endpointዎቹ በhttps://eqvps.com/openapi.json ባለው የOpenAPI ፋይል ውስጥ ናቸው። በClaude፣ Cursor ወይም በሌሎች MCP ደንበኞች ውስጥ ያሉ ወኪሎች ምንም ኮድ አያስፈልጋቸውም፦ የMCP አገልጋዩ ተመሳሳይ የsandbox መሳሪያዎች አሉት። እና እንዲሁ ሲሠራ ማየት ብቻ ከፈለጉ፣ የsandbox ገጽ ታሪፎቹን እና ለአዲስ መለያዎች የ$1 ሙከራን ይዘረዝራል።
አስተያየቶች
እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።