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())