AI CorePHP SDK · v1.0.1
Official AI Core PHP SDK

از اولین Composer require تا Production، همه‌چیز اینجاست.

راهنمای کامل SDK رسمی PHP برای اتصال امن و قابل‌اتکا به AI Core Gateway؛ با پوشش Chat، Streaming، System One، Auto Switch Failover، Vision، Image، Audio، Embedding، Batch، Webhook و چرخه کامل Request.

v1.0.1 نسخه فعلی37 Endpoint عمومیPHP 8.0+ RuntimeLaravel 8–13 IntegrationMIT License
InstallComposer
composer require amirkateb/ai-core-client
PHP 8.0+Laravel 8–13 (اختیاری)ext-curlext-jsonComposer 2.x

Base URL می‌تواند https://ai.avaztek.ir باشد؛ Client به‌صورت خودکار /api/v1 را مدیریت می‌کند.

01 · Quick Start

در چند دقیقه اولین درخواست را ارسال کنید

SDK هیچ وابستگی Framework ندارد؛ فقط PHP، cURL و JSON. بعد از نصب، Client را با Base URL و API Key بسازید و یک درخواست async ثبت کنید.

1

نصب

پکیج رسمی را از Packagist با Composer اضافه کنید.

2

Client

کلید API را فقط در backend/secret manager نگه دارید.

3

Submit

متدهای inference یک RequestHandle برمی‌گردانند.

4

Result

با wait، stream یا get نتیجه را دریافت کنید.

ساخت Client
<?php

use AmirKateb\AiCoreClient\Client;

$ai = new Client(
    'https://ai.avaztek.ir',
    getenv('AI_CORE_API_KEY'),
    timeoutSeconds: 300,
    connectTimeoutSeconds: 10,
);
اولین Chat
$request = $ai->chat([
    'model' => 'provider:model',
    'message' => 'سلام! یک پاسخ کوتاه بده.',
    'temperature' => 0.4,
    'metadata' => ['user_id' => 'u_123'],
], Client::idempotencyKey());

$result = $request->wait();

echo $result['result']['content'] ?? '';
02 · Client Configuration

Client کوچک، صریح و قابل‌کنترل است

Constructor زمان اتصال و کل timeout را کنترل می‌کند. برای correlation، شناسه درخواست سمت Client و Origin از cloneهای immutable استفاده کنید.

Constructornew Client(string $baseUrl, string $apiKey, int $timeoutSeconds = 300, int $connectTimeoutSeconds = 10)
Headerهای سفارشی و Trace ID
$ai = $ai
    ->withClientRequestId('order_4815')
    ->withOrigin('https://app.example.com')
    ->withHeaders(['X-Correlation-ID' => 'corr_123']);
پارامتر مشترکنوع / Ruleکاربرد
modelstring|nullحداکثر 340 کاراکتر

مدل هدف. می‌تواند provider:model یا auto_switch:<profile_uuid> باشد؛ در صورت خالی‌بودن Gateway از مدل مجاز شرکت استفاده می‌کند.

system_promptstring|nullحداکثر 60,000 کاراکتر

دستور سیستم برای عملیات‌های متنی پشتیبانی‌شده.

thinking_levelstring|nullحداکثر 30 کاراکتر

سطح reasoning برای Provider/Modelهای پشتیبانی‌شده.

temperaturenumber|null0 تا 2

کنترل تنوع پاسخ.

top_pnumber|null0 تا 1

Nucleus sampling.

max_tokensinteger|null1 تا 200,000

سقف token خروجی/پردازش طبق سیاست مدل و شرکت.

metadataarray|nullحداکثر 50 کلید

Metadata سفارشی برای ردیابی درخواست.

03 · Request Lifecycle

درخواست‌ها durable و async هستند

متدهای inference در صورت پذیرش Gateway سریعاً HTTP 202 می‌گیرند و SDK یک RequestHandle برمی‌گرداند. Handle شناسه public درخواست و پاسخ اولیه را نگه می‌دارد.

01

Submit

ثبت درخواست و Idempotency.

02

Queued

درخواست قبل از Provider durable است.

03

Processing

Attempt و Provider execution.

04

Terminal

success / failed / cancelled.

$handle->get()$handle->wait()$handle->cancel()$handle->retry()$handle->stream()$handle->downloadMedia()
Idempotency

برای submitهای قابل تکرار از Client::idempotencyKey() یا کلید پایدار دامنه خود استفاده کنید. یک Idempotency-Key با payload متفاوت می‌تواند با 409 idempotency_conflict رد شود.

04 · Streaming

SSE قابل Resume با Last-Event-ID

SDK فریم‌های SSE را به SseEvent تبدیل می‌کند. پارامتر after برای ادامه جریان پس از آخرین sequence قابل استفاده است.

Chat Streaming
use AmirKateb\AiCoreClient\Value\SseEvent;

$request = $ai->chatStream([
    'model' => 'provider:model',
    'message' => 'یک توضیح مرحله‌ای بده.',
], Client::idempotencyKey('stream'));

$request->stream(function (SseEvent $event): void {
    if ($event->event === 'delta') {
        echo $event->data['text'] ?? '';
        flush();
    }
});
event نوع رویدادid sequence قابل Resumedata payload decode‌شدهrawData متن خام data
05 · Capabilities

یک Client برای تمام سطح API

متدها مطابق capabilityهای واقعی Gateway گروه‌بندی شده‌اند. برای کشف مدل‌های مجاز قبل از submit از models() و capabilities() استفاده کنید.

01

Client و Utilities

ساخت Client، Headerهای سفارشی، wait مستقیم و Idempotency helper.

__construct()withHeaders()withClientRequestId()withOrigin()waitForRequest()waitForBatch()idempotencyKey()
02

وضعیت و Discovery

خواندن وضعیت Gateway، مدل‌ها، قابلیت‌ها، مصرف و محدودیت‌ها.

status()health()models()capabilities()usage()limits()
03

Auto Switch و Failover

کشف پروفایل‌های مجاز شرکت، مشاهده تمام مدل‌های هر پروفایل و اجرای زنجیره ترتیبی Failover.

autoSwitchProfiles()autoSwitchProfile()chatWithProfile()chatStreamWithProfile()textWithProfile()
04

System One

موتور تصمیم‌گیری ساختاریافته v1m با primitiveهای Noul، Choice و Score؛ مستقل از Chat.

systemOne()
05

متن و مکالمه

درخواست‌های async برای Chat، Text و Responses API.

chat()chatStream()text()createResponse()
06

تصویر و Vision

تولید، ویرایش و تحلیل تصویر.

imageGeneration()imageEdit()visionAnalyze()ocr()
07

صوت

Speech، تحلیل، transcription و translation.

audioAnalyze()speech()transcription()audioTranslation()
08

Embedding، Moderation و Rerank

عملیات برداری، ایمنی محتوا و رتبه‌بندی.

embeddings()moderation()rerank()
09

Document و Video

تحلیل سند، تحلیل و تولید ویدئو.

documentAnalyze()videoAnalyze()videoGeneration()
12

RequestHandle

Helper سطح درخواست که از متدهای inference برمی‌گردد.

get()cancel()retry()wait()stream()downloadMedia()
13

BatchBuilder و BatchHandle

Helperهای immutable برای ساخت Batch و مدیریت چرخه آن.

BatchBuilder::metadata()BatchBuilder::chat()BatchBuilder::text()BatchBuilder::systemOne()BatchBuilder::response()BatchBuilder::embeddings()BatchBuilder::moderation()BatchBuilder::rerank()BatchBuilder::send()BatchBuilder::items()BatchHandle::get()BatchHandle::cancel()BatchHandle::wait()
14

WebhookVerifier

اعتبارسنجی امضای HMAC و timestamp وبهوک.

WebhookVerifier::verify()WebhookVerifier::fromHeaders()
06 · Public Core Health

Health عمومی و ماشین‌خوان AI Core

برای مانیتورینگ زیرساخت خود AI Core، بدون API Key از endpoint عمومی https://ai.avaztek.ir/health استفاده کنید. URL از APP_URL محیط فعلی ساخته می‌شود و دامنه Production داخل SDK یا مستندات hard-code نشده است.

با health() داخل SDK اشتباه نشود

GET /health سلامت عمومی Core و زیرساخت را نشان می‌دهد؛ اما $ai->health() به GET /api/v1/health می‌رود و سلامت Providerها/مدل‌های مجاز همان شرکت را با API Key بررسی می‌کند.

درخواست Health عمومی
GET https://ai.avaztek.ir/health
Accept: application/json
نمونه پاسخ healthy
{
    "name": "Avaztek Ai Core",
    "contract": "ai-core-health/v1",
    "ok": true,
    "healthy": true,
    "status": "healthy",
    "score": 100,
    "checked_at": "ISO-8601 timestamp",
    "time": "ISO-8601 timestamp",
    "checks": {
        "application": "ok",
        "database": "ok",
        "redis": "ok",
        "storage": "ok",
        "queue": "ok",
        "scheduler": "ok",
        "nginx": "ok",
        "php_fpm": "ok",
        "ssl": "ok"
    }
}
healthyHTTP 200 · همه checkها okdegradedHTTP 200 · حداقل یک warning/unknownunhealthyHTTP 503 · حداقل یک downCachesnapshot داخلی حداکثر 15 ثانیه
Contract

ai-core-health/v1 · هدر پاسخ X-AICore-Health-Contract: 1 است و پاسخ با Cache-Control: no-store, max-age=0 برمی‌گردد. هر عضو checks یکی از ok، warning، down یا unknown است.

Checkمنبعمعنی
applicationLaravel Coreboot/runtime

Application توانسته request سلامت را تا مرحله probe اجرا کند.

databaseDBSELECT 1

اتصال واقعی دیتابیس اصلی.

redisRedisPING

اتصال واقعی Redis با تنظیمات runtime.

storageFilesystemwritable + disk

قابل‌نوشتن بودن storage/bootstrap cache و وضعیت فضای دیسک.

queueHeartbeatworker processors

Backend صف و heartbeat workerهای Local/API/Webhook/Site AI.

schedulerCron + metric freshnessmonitoring sample

فعال بودن cron و تازه بودن sample زمان‌بندی‌شده.

nginx / php_fpmsystemdservice state

فعال بودن سرویس‌های HTTP و PHP runtime.

sslTLS certificateAPP_URL host

اعتبار certificate؛ نزدیک‌شدن به ۷ روز پایانی warning می‌شود.

07 · System One

تصمیم‌گیری ساختاریافته با v1m

مدل‌های v1m در AI Core به‌عنوان Chat مدل ثبت نمی‌شوند؛ capability مستقل system_one دارند. هر درخواست شامل state و مجموعه questions از نوع Noul، Choice یا Score است و نتیجه ساختاریافته در result.answers قرار می‌گیرد.

Noul احتمال کالیبره‌شده بله/خیرChoice انتخاب گزینه با confidence/distributionScore امتیاز پیوسته در بازه تعریف‌شدهScopeinference:system_one
System One با Noul / Choice / Score
$request = $ai->systemOne([
    'model' => 'v1m:v1m-latest',
    'state' => 'تراکنش غیرعادی در نیمه‌شب ثبت شده است.',
    'questions' => [
        'is_fraud' => ['type' => 'noul', 'instructions' => 'احتمال تقلب بالا است؟'],
        'action' => ['type' => 'choice', 'choices' => ['block', 'verify', 'pass']],
        'risk' => ['type' => 'score', 'min' => 0, 'max' => 100],
    ],
], Client::idempotencyKey('system-one'));

$result = $request->wait();
print_r($result['result']['answers'] ?? []);
مدل مجاز شرکت

ابتدا یکی از مدل‌های v1m:... باید برای شرکت فعال شده باشد. با $ai->models('system_one') فقط مدل‌های مجاز این capability را دریافت کنید.

08 · Auto Switch

Failover ترتیبی با پروفایل‌های مجاز شرکت

پروفایل Auto Switch یک مدل مجازی با شناسه auto_switch:<profile_uuid> است. Gateway مدل‌های داخل پروفایل را دقیقاً به ترتیب امتحان می‌کند و با اولین پاسخ موفق متوقف می‌شود. قوانین Proxy/Xray هر Provider در هر تلاش بدون دورزدن حفظ می‌شوند.

01

Profile

پروفایل باید برای شرکت مجاز شده باشد.

02

Candidate #1

اولین Provider/Model اجرا می‌شود.

03

Failover

در خطا candidate بعدی اجرا می‌شود.

04

Winner

resolved_model مدل پاسخ‌دهنده را مشخص می‌کند.

کشف پروفایل‌ها و مدل‌های داخل آن
$profiles = $ai->autoSwitchProfiles('chat');

foreach ($profiles['data'] as $profile) {
    echo $profile['name'].' · '.$profile['model_count'].' models'.PHP_EOL;
    foreach ($profile['models'] as $candidate) {
        echo '#'.$candidate['position'].' '.$candidate['provider'].' / '.$candidate['model'];
        echo ' · direct='.($candidate['direct_access'] ? 'yes' : 'no').PHP_EOL;
    }
}
اجرای Chat با Auto Switch
$profileId = 'PROFILE_UUID';

$request = $ai->chatWithProfile($profileId, [
    'message' => 'با زنجیره اضطراری پاسخ بده.',
], Client::idempotencyKey('failover'));

$result = $request->wait();

echo $result['model'];          // auto_switch:<uuid>
echo $result['resolved_model']; // Provider/Model برنده
print_r($result['auto_switch']['attempts'] ?? []);
مجوز مستقل پروفایل

اگر یک مدل داخل پروفایل direct_access=false داشته باشد، شرکت همچنان می‌تواند آن مدل را از طریق همان پروفایل Failover استفاده کند؛ اما فراخوانی مستقیم provider:model برایش مجاز نیست. مجوز پروفایل هرگز به‌صورت ضمنی مجوز مستقیم مدل‌های داخلی را ایجاد نمی‌کند.

model_countتعداد مدل‌های پروفایلavailableآمادگی Provider/Modeldirect_accessمجوز فراخوانی مستقیمselected_attemptشماره تلاش برنده
09 · Files & Media

آپلود multipart و دانلود امن خروجی

متدهای file-based مسیر فایل محلی را می‌گیرند و Transport آن را با CURLFile ارسال می‌کند. فایل ناموجود قبل از شبکه با exception رد می‌شود.

Vision Analysis
$request = $ai->visionAnalyze(
    __DIR__.'/invoice.jpg',
    ['model' => 'provider:vision-model', 'prompt' => 'فاکتور را تحلیل کن'],
    Client::idempotencyKey('vision'),
);

$result = $request->wait();
Media Download
$request = $ai->imageGeneration([
    'model' => 'provider:image-model',
    'prompt' => 'A minimal futuristic AI gateway icon',
    'size' => '1024x1024',
]);

$result = $request->wait();
$request->downloadMedia(storage_path('app/generated.webp'));
20 MBImage / Edit / Vision / OCRفرمت‌های تصویر معتبر Laravel
50 MBAudio / Transcription / Translationفایل صوتی معتبر برای Provider
50 MBDocument AnalysisPDF, TXT, Markdown
20 MBVideo AnalysisMP4, MPEG, MOV, WebM, 3GPP
10 · Batch

چند عملیات، یک Batch قابل پیگیری

BatchBuilder immutable است و chat، text، system_one، responses، embeddings، moderation و rerank را پوشش می‌دهد. هر Batch حداکثر 100 آیتم دارد.

Batch Builder
$batch = $ai->batchBuilder()
    ->metadata(['job' => 'nightly-enrichment'])
    ->chat('provider:model', ['message' => 'خلاصه کن: ...'], 'item_1')
    ->embeddings('provider:embedding-model', ['input' => ['متن اول', 'متن دوم']], 'item_2')
    ->rerank('provider:rerank-model', [
        'query' => 'بهترین نتیجه',
        'documents' => ['سند اول', 'سند دوم'],
        'top_n' => 2,
    ], 'item_3')
    ->send(Client::idempotencyKey('batch'));

$result = $batch->wait();
queuedثبت شدهprocessingدر حال اجراcompletedهمه موفقcompleted_with_errorsبخشی ناموفقcancelledلغو شده
11 · Webhook Security

امضای HMAC را قبل از پردازش Payload بررسی کنید

WebhookVerifier ابتدا timestamp را با tolerance پیش‌فرض 300 ثانیه بررسی می‌کند، سپس HMAC SHA-256 روی timestamp.rawBody را با signature مقایسه می‌کند.

Webhook Verification
use AmirKateb\AiCoreClient\WebhookVerifier;

$rawBody = file_get_contents('php://input');
$headers = getallheaders();

$payload = WebhookVerifier::fromHeaders(
    getenv('AI_CORE_WEBHOOK_SECRET'),
    $headers,
    $rawBody,
);

// Signature + timestamp are valid here.
مهم

برای verify حتماً raw body اصلی را استفاده کنید؛ decode و encode مجدد JSON امضا را تغییر می‌دهد. Secret را در repository یا frontend قرار ندهید.

12 · Errors

خطای API را از خطای Transport جدا کنید

ApiException شامل HTTP status، error code و response decode‌شده است. TransportException برای خطاهای شبکه/cURL و پاسخ non-JSON استفاده می‌شود.

Error Handling
use AmirKateb\AiCoreClient\Exception\ApiException;
use AmirKateb\AiCoreClient\Exception\TransportException;

try {
    $result = $ai->chat(['message' => 'سلام'])->wait();
} catch (ApiException $e) {
    error_log('HTTP '.$e->statusCode.' / '.($e->errorCode ?? 'unknown'));
    error_log($e->getMessage());
} catch (TransportException $e) {
    error_log('Network error: '.$e->getMessage());
}
AiCoreException

کلاس پایه خطاهای SDK.

ApiException

statusCode، errorCode و response را نگه می‌دارد.

TransportException

Network، cURL، فایل مقصد یا پاسخ غیر JSON.

13 · Laravel Integration

Client را Singleton کنید، Secret را در env نگه دارید

SDK مستقل از Framework است، اما در Laravel 8 تا 13 به‌صورت خودکار discover می‌شود و Client را در Container bind می‌کند. Facade اختیاری AiCore هم آماده است؛ Secret همچنان فقط در env نگه داشته می‌شود.

Laravel 8–13 Auto Discovery + DI
// .env
AI_CORE_URL=https://ai.avaztek.ir
AI_CORE_API_KEY=aik_...
AI_CORE_TIMEOUT=300

// Laravel 8–13: package auto-discovery binds Client automatically.
use AmirKateb\AiCoreClient\Client;

final class SummarizeService
{
    public function __construct(private Client $ai) {}

    public function run(string $text): array
    {
        return $this->ai->chat(['message' => $text])->wait();
    }
}

// Optional facade: AiCore::chat([...])->wait();
AI_CORE_URL=https://ai.avaztek.irAI_CORE_API_KEY=aik_...php artisan vendor:publish --tag=ai-core-configLaravel 8–13 بدون ثبت دستی Service Provider پشتیبانی می‌شود. فایل .env را commit نکنید.
14 · Complete Reference

مرجع کامل متدهای SDK

Signature، endpoint و کاربرد تمام متدهای public Client در یک نما.

Client و Utilities

ساخت Client، Headerهای سفارشی، wait مستقیم و Idempotency helper.

7 method
__construct(string $baseUrl, string $apiKey, int $timeoutSeconds = 300, int $connectTimeoutSeconds = 10)SDK

ساخت Client؛ /api/v1 در صورت نیاز خودکار به Base URL افزوده می‌شود.

withHeaders(array $headers): ClientSDK

ساخت clone با Headerهای پیش‌فرض اضافی.

withClientRequestId(string $id): ClientSDK

تنظیم X-Client-Request-ID برای correlation سمت مصرف‌کننده.

withOrigin(string $origin): ClientSDK

تنظیم Origin برای Site policyهای Gateway.

waitForRequest(string $id, int $timeoutSeconds = 300, float $pollSeconds = 1.0): arrayGET /requests/{requestId}

Polling مستقیم تا success/failed/cancelled.

waitForBatch(string $id, int $timeoutSeconds = 600, float $pollSeconds = 1.5): arrayGET /batches/{batchId}

Polling مستقیم Batch تا وضعیت terminal.

idempotencyKey(string $prefix = "req"): stringSDK

تولید کلید تصادفی امن برای Idempotency-Key.

وضعیت و Discovery

خواندن وضعیت Gateway، مدل‌ها، قابلیت‌ها، مصرف و محدودیت‌ها.

6 method
status(): arrayGET /status

نمای کلی وضعیت شرکت، Providerها و تعداد مدل‌های در دسترس.

health(): arrayGET /health

Health واقعی Providerهای فعال؛ ممکن است در وضعیت degraded با HTTP 503 پاسخ دهد.

models(?string $capability = null): arrayGET /models

مدل‌های مجاز شرکت، با امکان فیلتر براساس capability.

capabilities(): arrayGET /capabilities

لیست capabilityها و تعداد مدل‌های پشتیبان هرکدام.

usage(string $range = "30d"): arrayGET /usage

مصرف، token، success rate و latency در today/24h/7d/30d/month.

limits(): arrayGET /limits

Limit، used و remaining در سطح شرکت و مدل.

Auto Switch و Failover

کشف پروفایل‌های مجاز شرکت، مشاهده تمام مدل‌های هر پروفایل و اجرای زنجیره ترتیبی Failover.

5 method
autoSwitchProfiles(?string $capability = null): arrayGET /auto-switch/profiles

پروفایل‌های Auto Switch مجاز شرکت با تمام candidateها، ترتیب، available و direct_access.

autoSwitchProfile(string $profileId, ?string $capability = null): arrayGET /auto-switch/profiles/{profileId}

جزئیات یک پروفایل مجاز و فهرست کامل مدل‌های داخل آن.

chatWithProfile(string $profileId, array $payload, ?string $idempotencyKey = null): RequestHandlePOST /chat

Chat با مدل مجازی auto_switch:<profile_uuid> و Failover خودکار به ترتیب پروفایل.

chatStreamWithProfile(string $profileId, array $payload, ?string $idempotencyKey = null): RequestHandlePOST /chat/stream

نسخه SSE؛ eventهای attempt_start/attempt_failed/attempt_success و پاسخ نهایی را ارائه می‌دهد.

textWithProfile(string $profileId, array $payload, ?string $idempotencyKey = null): RequestHandlePOST /text

Text Generation با همان ترتیب Failover پروفایل.

System One

موتور تصمیم‌گیری ساختاریافته v1m با primitiveهای Noul، Choice و Score؛ مستقل از Chat.

1 method
systemOne(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /system-one

ارسال state و questions ساختاریافته به مدل مجاز v1m؛ نتیجه در result.answers قرار می‌گیرد.

متن و مکالمه

درخواست‌های async برای Chat، Text و Responses API.

4 method
chat(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /chat

Chat با message الزامی، history اختیاری و تنظیمات مشترک.

chatStream(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /chat/stream

نسخه Streaming که درخواست را با stream=true ثبت می‌کند.

text(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /text

Text generation با فیلد text.

createResponse(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /responses

Responses با history، tools و structured response_format.

تصویر و Vision

تولید، ویرایش و تحلیل تصویر.

4 method
imageGeneration(array $payload, ?string $key = null): RequestHandlePOST /images/generations

تولید تصویر با prompt، size و quality.

imageEdit(string $file, array $payload, ?string $key = null): RequestHandlePOST /images/edits

ویرایش تصویر multipart با prompt.

visionAnalyze(string $file, array $payload, ?string $key = null): RequestHandlePOST /vision/analyze

تحلیل تصویر با prompt اختیاری.

ocr(string $file, array $payload, ?string $key = null): RequestHandlePOST /ocr

OCR تصویر و استخراج متن/ساختار.

صوت

Speech، تحلیل، transcription و translation.

4 method
audioAnalyze(string $file, array $payload, ?string $key = null): RequestHandlePOST /audio/analyze

تحلیل فایل صوتی با prompt اختیاری.

speech(array $payload, ?string $key = null): RequestHandlePOST /audio/speech

تبدیل متن به صوت با voice/style/speed.

transcription(string $file, array $payload, ?string $key = null): RequestHandlePOST /audio/transcriptions

تبدیل صوت به متن با language و prompt اختیاری.

audioTranslation(string $file, array $payload, ?string $key = null): RequestHandlePOST /audio/translations

ترجمه فایل صوتی.

Embedding، Moderation و Rerank

عملیات برداری، ایمنی محتوا و رتبه‌بندی.

3 method
embeddings(array $payload, ?string $key = null): RequestHandlePOST /embeddings

تا 96 ورودی؛ dimensions حداکثر 4096.

moderation(array $payload, ?string $key = null): RequestHandlePOST /moderations

Moderation با input از نوع string یا array.

rerank(array $payload, ?string $key = null): RequestHandlePOST /rerank

رتبه‌بندی تا 1000 document با top_n اختیاری.

Document و Video

تحلیل سند، تحلیل و تولید ویدئو.

3 method
documentAnalyze(string $file, array $payload, ?string $key = null): RequestHandlePOST /documents/analyze

تحلیل PDF/TXT/Markdown تا 50MB.

videoAnalyze(string $file, array $payload, ?string $key = null): RequestHandlePOST /video/analyze

تحلیل ویدئو تا 20MB با prompt اختیاری.

videoGeneration(array $payload, ?string $key = null): RequestHandlePOST /videos/generations

تولید با aspect_ratio 16:9/9:16، resolution 720p/1080p/4k و duration 4/6/8 ثانیه.

چرخه Request

لیست، مشاهده، انتظار، لغو، retry، stream و دریافت Media.

6 method
requests(array $query = []): arrayGET /requests

لیست cursor-based با فیلتر status/capability/provider/model/client_request_id.

request(string $id): arrayGET /requests/{requestId}

جزئیات کامل نتیجه، usage، timing و error.

cancelRequest(string $id): arrayPOST /requests/{requestId}/cancel

لغو درخواست queued/retry/processing.

retryRequest(string $id): RequestHandlePOST /requests/{requestId}/retry

ساخت retry جدید از درخواست قبلی.

streamRequest(string $id, callable $listener, int $after = 0): voidGET /requests/{requestId}/stream

SSE resumable با after / Last-Event-ID.

downloadMedia(string $id, string $target): stringGET /requests/{requestId}/media

دانلود امن خروجی رسانه در فایل مقصد.

Batch

ارسال چند عملیات متنی در یک Batch و مدیریت وضعیت آن.

5 method
batchBuilder(): BatchBuilder—

Builder immutable برای chat/text/system_one/responses/embeddings/moderation/rerank.

createBatch(array $items, array $metadata = [], ?string $idempotencyKey = null): BatchHandlePOST /batches

حداکثر 100 آیتم در هر Batch.

batches(array $query = []): arrayGET /batches

لیست Batchها با cursor pagination.

batch(string $id): arrayGET /batches/{batchId}

جزئیات Batch و درخواست‌های فرزند.

cancelBatch(string $id): arrayPOST /batches/{batchId}/cancel

لغو درخواست‌های فعال Batch.

RequestHandle

Helper سطح درخواست که از متدهای inference برمی‌گردد.

6 method
get(): arrayGET /requests/{requestId}

خواندن وضعیت و جزئیات Request فعلی.

cancel(): arrayPOST /requests/{requestId}/cancel

درخواست لغو Request.

retry(): RequestHandlePOST /requests/{requestId}/retry

Retry و دریافت Handle جدید.

wait(int $timeoutSeconds = 300, float $pollSeconds = 1.0): arrayGET /requests/{requestId}

Polling تا وضعیت terminal.

stream(callable $listener, int $after = 0): voidGET /requests/{requestId}/stream

مصرف SSE با قابلیت Resume.

downloadMedia(string $target): stringGET /requests/{requestId}/media

دانلود خروجی Media در مسیر مقصد.

BatchBuilder و BatchHandle

Helperهای immutable برای ساخت Batch و مدیریت چرخه آن.

13 method
BatchBuilder::metadata(array $metadata): BatchBuilderSDK

افزودن metadata به Batch.

BatchBuilder::chat(string $model, array $payload, ?string $clientRequestId = null): BatchBuilderSDK

افزودن Chat item.

BatchBuilder::text(string $model, array $payload, ?string $clientRequestId = null): BatchBuilderSDK

افزودن Text item.

BatchBuilder::systemOne(string $model, array $payload, ?string $clientRequestId = null): BatchBuilderSDK

افزودن System One item با مدل v1m.

BatchBuilder::response(string $model, array $payload, ?string $clientRequestId = null): BatchBuilderSDK

افزودن Responses item.

BatchBuilder::embeddings(string $model, array $payload, ?string $clientRequestId = null): BatchBuilderSDK

افزودن Embeddings item.

BatchBuilder::moderation(string $model, array $payload, ?string $clientRequestId = null): BatchBuilderSDK

افزودن Moderation item.

BatchBuilder::rerank(string $model, array $payload, ?string $clientRequestId = null): BatchBuilderSDK

افزودن Rerank item.

BatchBuilder::send(?string $idempotencyKey = null): BatchHandlePOST /batches

ارسال Batch ساخته‌شده.

BatchBuilder::items(): arraySDK

خواندن آیتم‌های فعلی Builder.

BatchHandle::get(): arrayGET /batches/{batchId}

خواندن وضعیت Batch.

BatchHandle::cancel(): arrayPOST /batches/{batchId}/cancel

لغو Batch.

BatchHandle::wait(int $timeoutSeconds = 600, float $pollSeconds = 1.5): arrayGET /batches/{batchId}

انتظار تا وضعیت terminal Batch.

WebhookVerifier

اعتبارسنجی امضای HMAC و timestamp وبهوک.

2 method
WebhookVerifier::verify(string $secret, string $timestamp, string $rawBody, string $signature, int $toleranceSeconds = 300): arraySDK

بررسی timestamp و HMAC SHA-256 و decode payload.

WebhookVerifier::fromHeaders(string $secret, array $headers, string $rawBody, int $toleranceSeconds = 300): arraySDK

نسخه convenience برای استخراج X-AI-Timestamp و X-AI-Signature از headers.

15 · Production Checklist

قبل از Production این موارد را قطعی کنید

01

API Key فقط Backend

کلید را هرگز در JavaScript عمومی، Mobile bundle یا repository قرار ندهید.

02

Scope و Limit حداقلی

برای هر شرکت/Site فقط capability و quota لازم را فعال کنید.

03

Idempotency برای عملیات حساس

Retry شبکه نباید یک inference پرهزینه را دوباره ایجاد کند.

04

Timeout متناسب با Media

برای Video/Image generation timeout کل را متناسب با workload تنظیم کنید.

05

Webhook Verification

Signature و timestamp را قبل از هر side-effect بررسی کنید.

06

ApiException را log کنید، Secret را نه

status/errorCode/request ID مفیدند؛ API Key و Webhook secret را log نکنید.

16 · FAQ

سؤالات متداول SDK

آیا SDK درخواست‌ها را synchronous ارسال می‌کند؟+

ثبت درخواست سریع و async است و RequestHandle برمی‌گرداند. برای نتیجه نهایی از wait()، برای وضعیت از get() و برای streaming از stream() استفاده کنید.

Queue اجرای Requestها چگونه تفکیک می‌شود؟+

Gateway دو Queue مستقل دارد: local برای Ollama با یک execution هم‌زمان و api برای Providerهای بیرونی با Worker Pool موازی. فیلد queue در resource درخواست مقدار local یا api را نشان می‌دهد.

System One چه تفاوتی با Chat دارد؟+

مدل‌های v1m با capability مستقل system_one عرضه می‌شوند و endpoint اختصاصی /system-one دارند. payload شامل state و questions از نوع noul/choice/score است و این مدل‌ها در Chat/Text انتخاب نمی‌شوند.

مجوز Auto Switch چه تفاوتی با مجوز مدل مستقیم دارد؟+

پروفایل Auto Switch یک مجوز مستقل است. مدل‌های داخل پروفایل می‌توانند فقط در همان زنجیره استفاده شوند حتی اگر direct_access نداشته باشند؛ برای فراخوانی مستقیم provider:model باید همان مدل جداگانه برای شرکت مجاز شده باشد.

SDK با کدام نسخه‌های Laravel سازگار است؟+

نسخه 1.0.1 با PHP 8.0+ framework-agnostic است و integration خودکار Service Provider/Facade برای Laravel 8 تا 13 دارد.

Base URL باید /api/v1 داشته باشد؟+

خیر. اگر Base URL بدون /api/v1 داده شود، Client آن را خودکار اضافه می‌کند؛ اگر از قبل وجود داشته باشد دوباره اضافه نمی‌شود.

برای جلوگیری از درخواست تکراری چه کنم؟+

برای عملیات submit از Client::idempotencyKey() یا یک کلید پایدار خودتان استفاده کنید. استفاده مجدد همان کلید با payload متفاوت می‌تواند 409 idempotency_conflict بدهد.

چطور خروجی تصویر یا صوت را دریافت کنم؟+

پس از موفق‌شدن RequestHandle، از downloadMedia($target) استفاده کنید. SDK پاسخ غیرموفق را به ApiException تبدیل می‌کند.

Streaming قابل Resume است؟+

بله. stream() و streamRequest() پارامتر after دارند و Transport نیز Last-Event-ID را ارسال می‌کند.

Webhook را چطور امن اعتبارسنجی کنم؟+

از WebhookVerifier::fromHeaders() با secret و raw body استفاده کنید. timestamp با tolerance پیش‌فرض 300 ثانیه و HMAC SHA-256 بررسی می‌شود.

AI Core PHP SDK · v1.0.1

برای شروع فقط Composer و یک API Key نیاز دارید.

Repository و package به تنظیمات انتشار SDK متصل‌اند؛ لینک‌های این صفحه با تنظیمات واقعی SDK همگام می‌مانند.