الانتقال إلى المحتوى الرئيسي
فصول دليل التدريب جميع الوثائق

مرجع API التدريب

نقاط النهاية المسجلة وأجسام الطلبات والاستجابات وحدود الملكية ومعالجة الأخطاء.

تبقى الأوامر والشفرة بالإنجليزية في جميع اللغات. استبدل العناصر النائبة المكتوبة بالأحرف الكبيرة بقيم من حسابك والمهمة المدفوعة؛ ولا تضع مفاتيح حقيقية في دفاتر ملاحظات أو سجلات مشتركة.

دورة حياة موارد API

عرض السعر والمهمة المدفوعة وجلسة التدريب موارد مستقلة.
  1. عرض السعر تحقق من الإعداد والسعر الحالي
  2. المهمة أنشئ عملية الدفع المعتمدة وأتممها
  3. الجلسة اختر بيئة التشغيل والنموذج المرجعي المشمول
  4. الإعداد أنشئ ملفات بيان موثوقة لمجموعة البيانات
  5. التقرير سجّل تفاصيل التدريب والملفات الناتجة الفعلية

عرض السعر: تحقق من الإعداد والسعر الحالي. المهمة: أنشئ عملية الدفع المعتمدة وأتممها. الجلسة: اختر بيئة التشغيل والنموذج المرجعي المشمول. الإعداد: أنشئ ملفات بيان موثوقة لمجموعة البيانات. التقرير: سجّل تفاصيل التدريب والملفات الناتجة الفعلية

المصادقة وقواعد الطلبات

استخدم HTTPS مع ترويسة Authorization: Bearer ومفتاح API للحساب يحمل ai:training. أرسل ترويسة Accept: application/json؛ وأضف Content-Type: application/json لأجسام JSON. جميع الموارد مملوكة للحساب. يُحدّ معدل طلبات مجموعة المسارات إلى 30 طلبًا في الدقيقة، مع ضوابط إضافية عند إعدادها. المعرّفات في الأمثلة عناصر نائبة وليست موارد مشتركة.

  • تختلف معرّفات عروض الأسعار ومعرّفات UUID للمهام ومعرّفات الجلسات والنماذج والملفات الناتجة.
  • اقرأ الحالة الحالية قبل تكرار طلب كتابة بعد انقطاع الشبكة.
  • لا تستخدم نصوص صفحات الموقع العامة أو معاملات استعلام الأسعار في طلبات API.
مثال · bash
export TRAINING_API='https://fusionpointai.com/api/v1/training'
# Set the key securely as shown in Quickstart.
export JOB_UUID='REPLACE_WITH_YOUR_JOB_UUID'
export SESSION_ID='REPLACE_WITH_YOUR_SESSION_ID'
curl --fail-with-body --silent --show-error "$TRAINING_API/jobs" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" -H 'Accept: application/json'

الطلبات والاستجابات وحالة الموارد

أنشئ عرض سعر من إعداد مؤهل، وأنشئ المهمة الأصلية منه، وأكمل الدفع المعتمد قبل فتح جلسة. تتحقق نقاط نهاية المشروع من صلاحية الوصول المدفوع إلى المرجع وتطلب منهجًا أو دروسًا دون إنشاء فاتورة أو تغيير دفعة. تتضمن استجابة الجلسة الإعداد والمرجع المختار وبيانات مجموعات البيانات والخطوة المُبلغ عنها والتقرير. الإعداد والإبلاغ طلبان منفصلان؛ وحالات المهمة والجلسة مستقلة.

  • يتطلب تفويض المشروع provider وreference_model_id؛ وتتطلب طلبات المعلّم أيضًا action وobjective.
  • أرسل للمعلّم مواد التدريب المعتمدة فقط؛ وأبقِ صفوف التحقق والاختبار النهائي محلية.
  • تصف تقارير الإكمال القديمة ملفًا محليًا حقيقيًا ويجب أن تجتاز فحوص السلامة والتقييم.
مثال · text
POST /api/v1/training/quotes
reference_model_id     required eligible integer model ID
training_plan_id       required public provider-plan integer ID
mode                   automatic | advanced
objective              required string, 10..4000 characters
language               required string, at most 120 characters
performance_criteria   required string, 10..2000 characters
student_release_slug   optional eligible slug, at most 190 characters
method                 optional eligible method, at most 80 characters
dataset_megabytes      optional integer, 1..1000000
gpu_count              optional integer, 1..128
delivery               optional: artifact | hosted
execution_target       optional: fusionpointai_hosting | customer_datacenter | colab

Availability and approved plan policies can impose narrower constraints.
Do not submit price, fixed_total, currency, price_version_id or model_training.
مثال · json
{
  "reference_model_id": 123,
  "training_plan_id": "<INTEGER_FROM_YOUR_PROVIDER_PLAN>",
  "mode": "advanced",
  "objective": "Train a German support-message classifier.",
  "language": "German",
  "performance_criteria": "Evaluate per-class precision and recall on held-out data.",
  "student_release_slug": "<ELIGIBLE_STUDENT_RELEASE_SLUG>",
  "method": "LoRA",
  "dataset_megabytes": 8,
  "gpu_count": 1,
  "delivery": "artifact"
}
مثال · bash
# Save the body as quote.json; replace ID placeholders with integers.
# Automatic mode omits student_release_slug and method.
curl --fail-with-body --silent --show-error "$TRAINING_API/quotes" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @quote.json
# Save {"quote":"YOUR_QUOTE_UUID"} as job.json.
# Creates a native job/invoice; this is not payment confirmation.
curl --fail-with-body --silent --show-error "$TRAINING_API/jobs" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @job.json
curl --fail-with-body --silent --show-error "$TRAINING_API/jobs/$JOB_UUID" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" -H 'Accept: application/json'
مثال · text
POST /api/v1/training/quotes: 201
{quote: UUID, currency: ISO_CODE, fixed_total: DECIMAL_STRING, expires_at: ISO_8601}

POST /api/v1/training/jobs: {"quote":"OWNED_QUOTE_UUID"}
201 for a newly created job; 200 when an accepted quote reuses its job.
Job fields:
id                job UUID
status            native job state, such as awaiting_payment
progress_percent  recorded progress, not an independent quality score
invoice_id        owned native invoice ID or null
created_at        ISO 8601 timestamp
completed_at      ISO 8601 timestamp or null
training_session  null or {id, status, step, delivery, verification}

GET /api/v1/training/jobs:
{data: JOB_ARRAY, current_page: INTEGER, last_page: INTEGER, per_page: 50, total: INTEGER}

This is a response-shape reference, not a fabricated live response.
مثال · bash
# Save as session.json, using your paid job UUID and optional reference ID:
# {"job":"YOUR_PAID_JOB_UUID","runtime":"customer_datacenter","reference_model_id":123}
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @session.json
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" -H 'Accept: application/json'
# One preparation batch; inspect progress before another request.
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID/prepare" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' --data '{}'
مثال · text
Session response fields (shape reference, not a fabricated live result):
id                  session UUID
job                 owned job UUID
status              preparing | ready | running | evaluating | completed | failed | cancelled
configuration       approved method, student_checkpoint, sdk_training and selected reference
reference_model_id  selected integer reference ID
expires_at          ISO 8601 access expiry
step                last reported integer step
datasets[]          {split, rows, bytes, sha256}
report              current report object; event metrics live under report.last_event.metrics
delivery            runtime_local
verification        runtime_reported
مثال · bash
curl --fail-with-body --silent --show-error \
  "$TRAINING_API/sessions/$SESSION_ID/datasets/train" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/x-ndjson' --output train.jsonl
# Use /datasets/validation for the other supported split.
sha256sum train.jsonl
# Compare bytes, rows and SHA-256 with the session manifest.
# For published server-side artifacts only, not the local SDK ZIP:
# GET /api/v1/training/jobs/{job}/artifacts/{file}
مثال · text
POST /api/v1/training/sessions/{session}/events
Content-Type: application/json

state         required: running | evaluating | failed
step          required integer: 0..2000
total_steps   required integer: 1..2000
metrics       optional; only loss and eval_loss, each 0..1000000
error_code    optional: training_failed | evaluation_failed | runtime_unavailable |
              dataset_invalid | report_failed

Send actual trainer observations, never sample or invented metrics.
مثال · bash
# Build the body from a REAL SDK report; requires jq.
jq '{artifact_name:"model-package.zip",report:.completion_report}' \
  customer-model-run-001/training-report.json > completion.json
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID/complete" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @completion.json
# Cancel eligible service state, not the operating-system process:
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID/cancel" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' --data '{}'
مثال · bash
curl --fail-with-body --silent --show-error \
  'https://fusionpointai.com/api/v1/training/projects/authorize' \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data '{"provider":"openai","reference_model_id":123}'
# The response identifies the owned paid job/grant and access expiry.
مثال · bash
curl --fail-with-body --silent --show-error \
  'https://fusionpointai.com/api/v1/training/projects/teacher' \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data '{"provider":"openai","reference_model_id":123,"action":"lessons","objective":"Classify support messages into agreed categories.","topic":"ambiguous_requests","count":2,"approved_examples":["A reviewed support training example."]}'
# Send only explicitly approved training examples. Never send held-out rows.
# Curriculum action returns topics; lessons action returns text/topic examples.
مثال · python
import os
from fusionpointai_training import TrainingClient

client = TrainingClient(api_key=os.environ["FUSIONPOINTAI_API_KEY"])
session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
print("Session:", session["id"])
print("Status:", session["status"])
print("Last reported step:", session["step"])
# Inspection is read-only; status and step are server-reported state.
مثال · python
import os
from fusionpointai_training import TrainingClient

client = TrainingClient(api_key=os.environ["FUSIONPOINTAI_API_KEY"])
session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
for manifest in session["datasets"]:
    print(
        manifest["split"],
        "rows:", manifest["rows"],
        "bytes:", manifest["bytes"],
        "sha256:", manifest["sha256"],
    )
# These are server-provided manifest values, not a local integrity pass.
مثال · python
import os
from fusionpointai_training import TrainingClient

client = TrainingClient(api_key=os.environ["FUSIONPOINTAI_API_KEY"])
session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
server_report = session.get("report")
runtime_report = server_report.get("runtime") if isinstance(server_report, dict) else None
if (
    session.get("status") == "completed"
    and isinstance(runtime_report, dict)
    and runtime_report.get("artifact_sha256") == os.environ["LOCAL_ARTIFACT_SHA256"]
    and server_report.get("delivery") == "runtime_local"
    and server_report.get("verification") == "runtime_reported"
):
    print("Server report matches the local artifact digest.")
else:
    print("Completion is not confirmed for this local artifact.")
# Reconcile by reading state; do not repeat training or invent a result.

الأخطاء والتكامل الآمن

استند إلى حالة HTTP وتفاصيل التحقق المعادة بدل افتراض أن كل خطأ مؤقت. توقّع 401 للطلبات غير المصادق عليها، و403 لرفض الوصول، و404 للموارد الغائبة أو غير المملوكة، و409 للحالة غير المتوافقة، و422 للمدخلات غير الصالحة، و429 لتجاوز حد الطلبات. قد تعيد إخفاقات المزوّد أو بيئة التشغيل أخطاء أخرى. يعرض SDK الاستثناء APIError دون إعادة مخرجات الجهة الخارجية الخام التي قد تحتوي على أسرار.

  • تسمح الأحداث بالحالات running وevaluating وfailed؛ ومفاتيح المقاييس هي loss وeval_loss.
  • يقتصر step وtotal_steps على 2000؛ ويجب أن تكون قيمة total_steps موجبة.
  • يتطلب جسم complete قيمة artifact_name وجميع حقول التقرير الظاهرة في المثال.
مثال · text
401  Authentication missing or invalid
403  Account/key scope or access denied
404  Resource missing, non-owned or intentionally hidden
409  Invalid session transition, runtime, paid-access or model configuration
410  Writable session expired
422  Invalid request fields or completion criteria not met
429  Request rate limited
502  Upstream reference data malformed or preparation failed

Do not retry a write blindly. Read session state and inspect the response.
Keep error_code distinct from the HTTP status. Never log authorization.
مثال · text
POST /api/v1/training/sessions/{session}/complete
artifact_name                 safe filename ending in .zip, max 160 characters
report.training_steps         integer 1..2000
report.weights_before_sha256  lowercase SHA-256 of actual pre-training weights
report.weights_after_sha256   lowercase SHA-256 of actual changed weights
report.artifact_sha256        lowercase SHA-256 of the real local ZIP
report.artifact_bytes         integer 1..107374182400
report.eval_loss_before       finite number >0 and <=1000000
report.eval_loss_after        finite number >=0 and <=1000000
report.base_repository        pinned student repository, max 255 characters
report.base_revision          lowercase immutable 40-character revision
report.method                 SFT | LoRA | QLoRA

Values must match the approved session and actual local training.
Additional report keys are rejected. This body does not upload the ZIP.
مثال · python
import os
from fusionpointai_training import TrainingClient
from fusionpointai_training.errors import APIError

client = TrainingClient(
    api_key=os.environ["FUSIONPOINTAI_API_KEY"],
    timeout=30.0,
    max_get_retries=2,
)
try:
    session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
except APIError:
    # GET retries are bounded. Do not blindly retry a write after an error.
    print("Session inspection failed; check access and current server state.")
else:
    print("Status:", session["status"])
# Never print the API key, authorization headers, or response secrets.

مرجع API

نقطة النهايةالغرض والسلوك
POST /api/v1/training/quotes Authorization: Bearer ai:training تحقق من أهلية النموذج المرجعي والخطة والإعداد، ثم أعد معرّف UUID لعرض السعر والعملة والقيمتين fixed_total وexpires_at. استخدم الخطة المعتمدة وإعدادات المتعلّم المؤهلة، لا أسعارًا يحددها العميل من تلقاء نفسه.
GET /api/v1/training/jobs Authorization: Bearer ai:training اعرض مهام العميل المصادَق عليه. افحص القائمة المعادة ومعرّفات الموارد بدل تخمين المعرّفات الرقمية.
POST /api/v1/training/jobs Authorization: Bearer ai:training أنشئ مهمة مملوكة للحساب انطلاقًا من معرّف UUID صالح لعرض السعر. تتضمن الاستجابة معرّف المهمة وحالتها ورقم الفاتورة والطوابع الزمنية؛ وإنشاء المهمة لا يثبت إتمام الدفع.
GET /api/v1/training/jobs/{job} Authorization: Bearer ai:training اقرأ مهمة واحدة مملوكة باستخدام معرّف UUID الخاص بها، بما يشمل التقدم المباشر وحالة التسليم.
GET /api/v1/training/jobs/{job}/artifacts/{file} Authorization: Bearer ai:training نزّل ملفًا منشورًا تابعًا لهذه المهمة المملوكة. لا يُرفع ملف ZIP المحلي لـ SDK تلقائيًا ولا يتاح عبر هذا المسار.
POST /api/v1/training/sessions Authorization: Bearer ai:training يتضمن متن الطلب معرّف UUID للمهمة وruntime وقيمة موجبة اختيارية لـreference_model_id. أعد الجلسة الجديدة أو المعاد استخدامها؛ ولا يُسمح بتغيير المرجع إلا قبل بدء الإعداد.
GET /api/v1/training/sessions/{session} Authorization: Bearer ai:training اقرأ الجلسة المملوكة وإعداداتها ومجموعات بياناتها وتقريرها وحالتها. قراءة الحالة لا تبدأ التدريب.
POST /api/v1/training/sessions/{session}/prepare Authorization: Bearer ai:training أرسل كائن JSON فارغًا لطلب دفعة إعداد محدودة. كرر الطلب ما دام التقدم مستمرًا حتى الجاهزية، مع الالتزام بالحد المخصص للطلبات.
GET /api/v1/training/sessions/{session}/datasets/{split} Authorization: Bearer ai:training نزّل train أو validation بصيغة application/x-ndjson. تحقق من عدد البايتات وبصمة SHA-256 وعدد الصفوف بمقارنتها بملف بيان الجلسة.
POST /api/v1/training/sessions/{session}/events Authorization: Bearer ai:training أبلغ عن حالة التشغيل الفعلية وstep وtotal_steps ومقاييس loss وeval_loss الاختيارية. استخدم قيم الحالة ورموز الخطأ المدعومة فقط.
POST /api/v1/training/sessions/{session}/complete Authorization: Bearer ai:training أرسل artifact_name وتقرير التدريب الحقيقي كاملًا. تتحقق الخدمة من طريقة التدريب ومراجعة النموذج الأساسي وتغيّر الأوزان وبصمة الملف الناتج ومعايير التقييم.
POST /api/v1/training/sessions/{session}/cancel Authorization: Bearer ai:training أرسل كائن JSON فارغًا لإلغاء حالة خدمة مؤهلة. أوقف عملية GPU المنفصلة بنفسك عند الحاجة؛ فهذا ليس إيقافًا مؤقتًا واستئنافًا.
POST /api/v1/training/projects/authorize Authorization: Bearer ai:training أرسل POST إلى /api/v1/training/projects/authorize مع provider وreference_model_id موجب. يعيد التحقق من صلاحية الحساب الموثّق للوصول إلى مرجع التدريب المدفوع، ويعيد المهمة المملوكة للحساب وgrant وprovider والنموذج المرجعي ووقت الانتهاء. لا ينشئ فاتورة ولا يغيّر دفعة.
POST /api/v1/training/projects/teacher Authorization: Bearer ai:training أرسل POST إلى /api/v1/training/projects/teacher مع provider وreference_model_id وaction (curriculum أو lessons) وobjective وtopic اختياري وcount (من 1 إلى 4) وحتى ثمانية approved_examples (بحد أقصى 2,000 حرف لكل منها). يعيد موضوعات أو صفوف نصوص الدروس والموضوعات. أرسل مواد تدريب معتمدة فقط، ولا ترسل بيانات validation أو الاختبار النهائي.