Python SDK

مسار كامل في Python: مصادقة، إرسال مهمة، بث السجلات، وجلب النتيجة.

التثبيت

# راجع /docs/sdk-guides لاعتماد أسماء الحزم المحدثة

مثال كامل

import json
import requests

BASE_URL = "https://api.dcp.sa"
RENTER_KEY = "dc1-renter-your-key"

headers = {
    "Content-Type": "application/json",
    "x-renter-key": RENTER_KEY,
}

# ) التحقق من المصادقة
me = requests.get(f"{BASE_URL}/api/renters/me", params={"key": RENTER_KEY}, timeout=)
me.raise_for_status()
print("renter:", me.json().get("email"))

# ) إرسال مهمة
payload = {
    "job_type": "llm_inference",
    "duration_minutes": ,
    "max_duration_seconds": ,
    "container_spec": {"image_type": "vllm-serve"},
    "params": {
        "model": "TinyLlama/TinyLlama-.1B-Chat-v1.",
        "prompt": "اكتب  نقاط عن الحوسبة بالـ GPU في السعودية.",
    },
}

submit = requests.post(f"{BASE_URL}/api/jobs/submit", headers=headers, json=payload, timeout=)
submit.raise_for_status()
job_id = submit.json()["job_id"]
print("job_id:", job_id)

# ) بث السجلات (SSE)
with requests.get(
    f"{BASE_URL}/api/jobs/{job_id}/logs/stream",
    params={"key": RENTER_KEY},
    stream=True,
    timeout=,
) as resp:
    resp.raise_for_status()
    for raw in resp.iter_lines(decode_unicode=True):
        if not raw or not raw.startswith("data: "):
            continue
        evt = json.loads(raw[:])
        if evt.get("type") == "log":
            print("[log]", evt.get("line"))
        if evt.get("type") == "end":
            print("[end]", evt.get("status"))
            break

# ) جلب النتيجة
out = requests.get(f"{BASE_URL}/api/jobs/{job_id}/output", params={"key": RENTER_KEY}, timeout=)
print(out.status_code, out.json())