SDK ni tabaka jembamba juu ya REST API ya sandbox. Inakuepushia mambo matatu: kujenga maombi kwa mkono, kuyarudia jukwaa likiwa na shughuli nyingi, na kusahau kufuta sandbox msimbo unapotupa exception. Kila kitu hapa kinalingana na toleo 0.2.0 la vifurushi vyote viwili.
Kama hujawahi kuunda sandbox, mwongozo wa kuunganisha kwa dakika 5 utakupa tokeni kwanza. Sandbox ni nini na kuna nini ndani yake kumeelezwa kwenye Sandbox.
Kusakinisha na kusanidi
pip install eqvps # Python 3.8+
npm i @eqvps/sdk # Node.js 18+, Deno, Bun
export EQVPS_API_KEY=... # your EQVPS account token
Programu ile ile kwa lugha zote mbili: unda sandbox, endesha msimbo, ifute.
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
});
Kuunda na kupata sandbox
Sandbox.create(...) huwasha sandbox, kwa kawaida ndani ya takriban sekunde moja. Python hupokea hoja zenye majina, TypeScript hupokea kitu kimoja cha chaguo.
| Python | TypeScript | Chaguo-msingi | Maana |
|---|---|---|---|
mode | mode | "ephemeral" | "ephemeral" (kwa sekunde) au "persistent" (kwa saa iliyoanzishwa, huhifadhi diski) |
tariff | tariff | "small" | micro, small, standard, plus, pro, max |
idle_timeout | idleTimeout | 300 | sekunde bila shughuli kabla sandbox ya muda mfupi haijafutwa, hadi 3600 |
ttl | ttl | — | muda wa juu wa maisha kwa sekunde: hadi 86400 kwa ya muda mfupi, 2592000 kwa ya kudumu |
env | env | — | vigezo vya mazingira kwa kila amri, huhifadhiwa vikiwa vimesimbwa |
api_key, base_url | apiKey, baseUrl | vigezo vya mazingira | huchukua nafasi ya EQVPS_API_KEY / EQVPS_API_URL |
timeout | timeoutMs | sekunde 70 | muda wa kusubiri HTTP kwa kila ombi |
max_retries | maxRetries | 3 | majaribio ya kurudia kwa 429/503 |
Sandbox.connect(id) huunganisha na sandbox iliyopo, kwa kawaida ya kudumu uliyoiunda jana. Sandbox.list() hurudisha sandbox zote za akaunti, zinazoendesha na zilizositishwa.
Sifa: id (sb_ + herufi 24 za hex), mode, tariff, state (running, starting, paused, pausing, resuming, deleting, deleted), env_keys / envKeys (majina tu, thamani hazirudishwi kamwe) na info (kitu ghafi). refresh() huzipakia upya.
kill() hufuta sandbox na kusimamisha malipo. Kuiita kwa sandbox ambayo tayari haipo si hitilafu.
Kuendesha msimbo
run(code, language="python", timeout=30) hutuma msimbo kupitia stdin kwa Python 3.12, Node.js 22 au bash ("python", "node", "bash"). exec(command, cwd=None, stdin=None, timeout=30) huendesha amri ya shell: mfuatano wa herufi hupita bash -lc, orodha huendeshwa kama argv bila shell.
Zote mbili hurudisha ExecResult:
| Uga | Maana |
|---|---|
exit_code | exit code ya mchakato |
stdout, stderr | matokeo, hadi MiB 1 kwa kila mkondo |
timed_out | amri ilifikia muda wake wa mwisho |
truncated | matokeo yalikatwa |
duration_ms | muda ilioendeshwa |
ok | exit_code == 0 na bila kupita muda |
Mwito wa wakati mmoja (synchronous) huendeshwa si zaidi ya sekunde 55. Mbinu zote mbili pia hupokea env kwa mwito huo tu; huchukua nafasi ya thamani zilizowekwa wakati wa kuunda.
Kazi ndefu: kazi za chinichini
Pitisha background=True (TypeScript: { background: true }) na mara moja unapata Task. Haina kikomo cha sekunde 55 na inaweza kuendelea hadi maisha ya sandbox yaishe. Hadi kazi 8 kwa kila sandbox.
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) });
| Mbinu | Inachofanya |
|---|---|
task.logs() | stdout na stderr mpya tangu mwito uliopita |
task.status() | hali bila kutumia matokeo: running, done, failed, killed, timeout |
task.wait(timeout, poll_interval=2, on_output) | huuliza hadi kazi iishe, hurudisha TaskResult |
task.kill() | husimamisha kazi na michakato yake |
sb.task(id) / sb.tasks() | kuunganisha tena na kazi / orodha ya kazi |
wait ikifikia muda wake yenyewe, hutupa SandboxTimeoutError, lakini kazi inaendelea. Kazi inayoendelea pia huzuia sandbox ya muda mfupi kufutwa kwa kukosa shughuli.
Faili na matumizi
upload(path, content, mode=None) huandika faili kwenye njia kamili na hurudisha ukubwa wake. download(path) hurudisha baiti, download_text(path) / downloadText(path) hurudisha mfuatano wa herufi. Uhamisho mmoja una kikomo cha MB 5.
usage() hurudisha sekunde za kuendesha, sekunde za CPU zilizotumika, baiti zinazotoka, bei kwa saa, billed_usd na estimated_total_usd. tariffs() ni kitendakazi cha kawaida kisichohitaji ufunguo, hurudisha bei na vikomo vya sasa. Kanuni za malipo ziko kwenye Vikomo na malipo ya sandbox.
Hitilafu
Kila hitilafu ya API ni daraja dogo la EqvpsError lenye status (HTTP), code (mfuatano thabiti) na body. retry_after / retryAfter hujazwa seva ikiutuma.
| Daraja | HTTP | code ya kawaida | Cha kufanya |
|---|---|---|---|
AuthenticationError | 401 | unauthenticated | kagua tokeni |
InsufficientBalanceError | 402 | insufficient_balance | ongeza salio |
NotFoundError | 404 | not_found | id si sahihi, au faili haipo |
SandboxPausedError | 409 | sandbox_paused | imesitishwa kwa sababu salio liliisha; inaendelea baada ya kuongeza salio |
SandboxDeletedError | 410 | sandbox_deleted | imefutwa kabisa |
FileTooLargeError | 413 | file_too_large | weka uhamisho chini ya MB 5 |
ValidationError | 422 | invalid_request | rekebisha vigezo |
RateLimitError | 429 | too_many_concurrent, too_many_tasks, rate_limited | subiri kisha jaribu tena |
BudgetExceededError | 429 | budget_exceeded | kikomo chako cha kila siku au kila mwezi cha sandbox kimefikiwa |
CapacityError | 503 | capacity | jaribu tena baada ya muda mfupi au chagua kifurushi kidogo |
SandboxTimeoutError | — | request_timeout, wait_timeout | ombi la HTTP (au wait) ndilo lililopita muda, si amri |
Vikomo viwili husababisha 429 nyingi: akaunti huendesha amri 2 kwa wakati mmoja na hushikilia hadi sandbox 20. SDK hujaribu tena seva inaposema muda wa kusubiri; baada ya majaribio matatu unapata exception.
Wakati huhitaji SDK
Lugha yoyote yenye mteja wa HTTP inaweza kuita API moja kwa moja; endpoints ziko kwenye faili ya OpenAPI katika https://eqvps.com/openapi.json. Mawakala ndani ya Claude, Cursor au wateja wengine wa MCP hawahitaji msimbo wowote: seva ya MCP ina zana zile zile za sandbox. Na ukitaka tu kuona inavyofanya kazi, ukurasa wa sandbox unaonyesha vifurushi na jaribio la $1 kwa akaunti mpya.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.