نصب
پکیج رسمی را از Packagist با Composer اضافه کنید.
راهنمای کامل SDK رسمی PHP برای اتصال امن و قابلاتکا به AI Core Gateway؛ با پوشش Chat، Streaming، System One، Auto Switch Failover، Vision، Image، Audio، Embedding، Batch، Webhook و چرخه کامل Request.
composer require amirkateb/ai-core-clientBase URL میتواند https://ai.avaztek.ir باشد؛ Client بهصورت خودکار /api/v1 را مدیریت میکند.
SDK هیچ وابستگی Framework ندارد؛ فقط PHP، cURL و JSON. بعد از نصب، Client را با Base URL و API Key بسازید و یک درخواست async ثبت کنید.
پکیج رسمی را از Packagist با Composer اضافه کنید.
کلید API را فقط در backend/secret manager نگه دارید.
متدهای inference یک RequestHandle برمیگردانند.
با wait، stream یا get نتیجه را دریافت کنید.
<?php
use AmirKateb\AiCoreClient\Client;
$ai = new Client(
'https://ai.avaztek.ir',
getenv('AI_CORE_API_KEY'),
timeoutSeconds: 300,
connectTimeoutSeconds: 10,
);$request = $ai->chat([
'model' => 'provider:model',
'message' => 'سلام! یک پاسخ کوتاه بده.',
'temperature' => 0.4,
'metadata' => ['user_id' => 'u_123'],
], Client::idempotencyKey());
$result = $request->wait();
echo $result['result']['content'] ?? '';Constructor زمان اتصال و کل timeout را کنترل میکند. برای correlation، شناسه درخواست سمت Client و Origin از cloneهای immutable استفاده کنید.
new Client(string $baseUrl, string $apiKey, int $timeoutSeconds = 300, int $connectTimeoutSeconds = 10)$ai = $ai
->withClientRequestId('order_4815')
->withOrigin('https://app.example.com')
->withHeaders(['X-Correlation-ID' => 'corr_123']);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 تا 1Nucleus sampling.
max_tokensinteger|null1 تا 200,000سقف token خروجی/پردازش طبق سیاست مدل و شرکت.
metadataarray|nullحداکثر 50 کلیدMetadata سفارشی برای ردیابی درخواست.
متدهای inference در صورت پذیرش Gateway سریعاً HTTP 202 میگیرند و SDK یک RequestHandle برمیگرداند. Handle شناسه public درخواست و پاسخ اولیه را نگه میدارد.
ثبت درخواست و Idempotency.
درخواست قبل از Provider durable است.
Attempt و Provider execution.
success / failed / cancelled.
$handle->get()$handle->wait()$handle->cancel()$handle->retry()$handle->stream()$handle->downloadMedia()برای submitهای قابل تکرار از Client::idempotencyKey() یا کلید پایدار دامنه خود استفاده کنید. یک Idempotency-Key با payload متفاوت میتواند با 409 idempotency_conflict رد شود.
SDK فریمهای SSE را به SseEvent تبدیل میکند. پارامتر after برای ادامه جریان پس از آخرین sequence قابل استفاده است.
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();
}
});متدها مطابق capabilityهای واقعی Gateway گروهبندی شدهاند. برای کشف مدلهای مجاز قبل از submit از models() و capabilities() استفاده کنید.
ساخت Client، Headerهای سفارشی، wait مستقیم و Idempotency helper.
__construct()withHeaders()withClientRequestId()withOrigin()waitForRequest()waitForBatch()idempotencyKey()خواندن وضعیت Gateway، مدلها، قابلیتها، مصرف و محدودیتها.
status()health()models()capabilities()usage()limits()کشف پروفایلهای مجاز شرکت، مشاهده تمام مدلهای هر پروفایل و اجرای زنجیره ترتیبی Failover.
autoSwitchProfiles()autoSwitchProfile()chatWithProfile()chatStreamWithProfile()textWithProfile()موتور تصمیمگیری ساختاریافته v1m با primitiveهای Noul، Choice و Score؛ مستقل از Chat.
systemOne()درخواستهای async برای Chat، Text و Responses API.
chat()chatStream()text()createResponse()تولید، ویرایش و تحلیل تصویر.
imageGeneration()imageEdit()visionAnalyze()ocr()Speech، تحلیل، transcription و translation.
audioAnalyze()speech()transcription()audioTranslation()عملیات برداری، ایمنی محتوا و رتبهبندی.
embeddings()moderation()rerank()تحلیل سند، تحلیل و تولید ویدئو.
documentAnalyze()videoAnalyze()videoGeneration()Helper سطح درخواست که از متدهای inference برمیگردد.
get()cancel()retry()wait()stream()downloadMedia()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()اعتبارسنجی امضای HMAC و timestamp وبهوک.
WebhookVerifier::verify()WebhookVerifier::fromHeaders()برای مانیتورینگ زیرساخت خود AI Core، بدون API Key از endpoint عمومی https://ai.avaztek.ir/health استفاده کنید. URL از APP_URL محیط فعلی ساخته میشود و دامنه Production داخل SDK یا مستندات hard-code نشده است.
GET /health سلامت عمومی Core و زیرساخت را نشان میدهد؛ اما $ai->health() به GET /api/v1/health میرود و سلامت Providerها/مدلهای مجاز همان شرکت را با API Key بررسی میکند.
GET https://ai.avaztek.ir/health
Accept: application/json{
"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"
}
}ai-core-health/v1 · هدر پاسخ X-AICore-Health-Contract: 1 است و پاسخ با Cache-Control: no-store, max-age=0 برمیگردد. هر عضو checks یکی از ok، warning، down یا unknown است.
applicationLaravel Coreboot/runtimeApplication توانسته request سلامت را تا مرحله probe اجرا کند.
databaseDBSELECT 1اتصال واقعی دیتابیس اصلی.
redisRedisPINGاتصال واقعی Redis با تنظیمات runtime.
storageFilesystemwritable + diskقابلنوشتن بودن storage/bootstrap cache و وضعیت فضای دیسک.
queueHeartbeatworker processorsBackend صف و 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 میشود.
مدلهای v1m در AI Core بهعنوان Chat مدل ثبت نمیشوند؛ capability مستقل system_one دارند. هر درخواست شامل state و مجموعه questions از نوع Noul، Choice یا Score است و نتیجه ساختاریافته در result.answers قرار میگیرد.
inference:system_one$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 را دریافت کنید.
پروفایل Auto Switch یک مدل مجازی با شناسه auto_switch:<profile_uuid> است. Gateway مدلهای داخل پروفایل را دقیقاً به ترتیب امتحان میکند و با اولین پاسخ موفق متوقف میشود. قوانین Proxy/Xray هر Provider در هر تلاش بدون دورزدن حفظ میشوند.
پروفایل باید برای شرکت مجاز شده باشد.
اولین Provider/Model اجرا میشود.
در خطا candidate بعدی اجرا میشود.
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;
}
}$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 برایش مجاز نیست. مجوز پروفایل هرگز بهصورت ضمنی مجوز مستقیم مدلهای داخلی را ایجاد نمیکند.
متدهای file-based مسیر فایل محلی را میگیرند و Transport آن را با CURLFile ارسال میکند. فایل ناموجود قبل از شبکه با exception رد میشود.
$request = $ai->visionAnalyze(
__DIR__.'/invoice.jpg',
['model' => 'provider:vision-model', 'prompt' => 'فاکتور را تحلیل کن'],
Client::idempotencyKey('vision'),
);
$result = $request->wait();$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'));BatchBuilder immutable است و chat، text، system_one، responses، embeddings، moderation و rerank را پوشش میدهد. هر Batch حداکثر 100 آیتم دارد.
$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();WebhookVerifier ابتدا timestamp را با tolerance پیشفرض 300 ثانیه بررسی میکند، سپس HMAC SHA-256 روی timestamp.rawBody را با signature مقایسه میکند.
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 قرار ندهید.
ApiException شامل HTTP status، error code و response decodeشده است. TransportException برای خطاهای شبکه/cURL و پاسخ non-JSON استفاده میشود.
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.
ApiExceptionstatusCode، errorCode و response را نگه میدارد.
TransportExceptionNetwork، cURL، فایل مقصد یا پاسخ غیر JSON.
SDK مستقل از Framework است، اما در Laravel 8 تا 13 بهصورت خودکار discover میشود و Client را در Container bind میکند. Facade اختیاری AiCore هم آماده است؛ Secret همچنان فقط در env نگه داشته میشود.
// .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 نکنید.Signature، endpoint و کاربرد تمام متدهای public Client در یک نما.
ساخت Client، Headerهای سفارشی، wait مستقیم و Idempotency helper.
__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.
خواندن وضعیت Gateway، مدلها، قابلیتها، مصرف و محدودیتها.
status(): arrayGET /statusنمای کلی وضعیت شرکت، Providerها و تعداد مدلهای در دسترس.
health(): arrayGET /healthHealth واقعی 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 /limitsLimit، used و remaining در سطح شرکت و مدل.
کشف پروفایلهای مجاز شرکت، مشاهده تمام مدلهای هر پروفایل و اجرای زنجیره ترتیبی Failover.
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 /chatChat با مدل مجازی 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 /textText Generation با همان ترتیب Failover پروفایل.
موتور تصمیمگیری ساختاریافته v1m با primitiveهای Noul، Choice و Score؛ مستقل از Chat.
systemOne(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /system-oneارسال state و questions ساختاریافته به مدل مجاز v1m؛ نتیجه در result.answers قرار میگیرد.
درخواستهای async برای Chat، Text و Responses API.
chat(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /chatChat با message الزامی، history اختیاری و تنظیمات مشترک.
chatStream(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /chat/streamنسخه Streaming که درخواست را با stream=true ثبت میکند.
text(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /textText generation با فیلد text.
createResponse(array $payload, ?string $idempotencyKey = null): RequestHandlePOST /responsesResponses با history، tools و structured response_format.
تولید، ویرایش و تحلیل تصویر.
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 /ocrOCR تصویر و استخراج متن/ساختار.
Speech، تحلیل، transcription و translation.
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ترجمه فایل صوتی.
عملیات برداری، ایمنی محتوا و رتبهبندی.
embeddings(array $payload, ?string $key = null): RequestHandlePOST /embeddingsتا 96 ورودی؛ dimensions حداکثر 4096.
moderation(array $payload, ?string $key = null): RequestHandlePOST /moderationsModeration با input از نوع string یا array.
rerank(array $payload, ?string $key = null): RequestHandlePOST /rerankرتبهبندی تا 1000 document با top_n اختیاری.
تحلیل سند، تحلیل و تولید ویدئو.
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 ثانیه.
لیست، مشاهده، انتظار، لغو، retry، stream و دریافت Media.
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}/streamSSE resumable با after / Last-Event-ID.
downloadMedia(string $id, string $target): stringGET /requests/{requestId}/mediaدانلود امن خروجی رسانه در فایل مقصد.
ارسال چند عملیات متنی در یک Batch و مدیریت وضعیت آن.
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.
Helper سطح درخواست که از متدهای inference برمیگردد.
get(): arrayGET /requests/{requestId}خواندن وضعیت و جزئیات Request فعلی.
cancel(): arrayPOST /requests/{requestId}/cancelدرخواست لغو Request.
retry(): RequestHandlePOST /requests/{requestId}/retryRetry و دریافت 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 در مسیر مقصد.
Helperهای immutable برای ساخت Batch و مدیریت چرخه آن.
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.
اعتبارسنجی امضای HMAC و timestamp وبهوک.
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.
متدی با این عبارت پیدا نشد.
کلید را هرگز در JavaScript عمومی، Mobile bundle یا repository قرار ندهید.
برای هر شرکت/Site فقط capability و quota لازم را فعال کنید.
Retry شبکه نباید یک inference پرهزینه را دوباره ایجاد کند.
برای Video/Image generation timeout کل را متناسب با workload تنظیم کنید.
Signature و timestamp را قبل از هر side-effect بررسی کنید.
status/errorCode/request ID مفیدند؛ API Key و Webhook secret را log نکنید.
ثبت درخواست سریع و async است و RequestHandle برمیگرداند. برای نتیجه نهایی از wait()، برای وضعیت از get() و برای streaming از stream() استفاده کنید.
Gateway دو Queue مستقل دارد: local برای Ollama با یک execution همزمان و api برای Providerهای بیرونی با Worker Pool موازی. فیلد queue در resource درخواست مقدار local یا api را نشان میدهد.
مدلهای v1m با capability مستقل system_one عرضه میشوند و endpoint اختصاصی /system-one دارند. payload شامل state و questions از نوع noul/choice/score است و این مدلها در Chat/Text انتخاب نمیشوند.
پروفایل Auto Switch یک مجوز مستقل است. مدلهای داخل پروفایل میتوانند فقط در همان زنجیره استفاده شوند حتی اگر direct_access نداشته باشند؛ برای فراخوانی مستقیم provider:model باید همان مدل جداگانه برای شرکت مجاز شده باشد.
نسخه 1.0.1 با PHP 8.0+ framework-agnostic است و integration خودکار Service Provider/Facade برای Laravel 8 تا 13 دارد.
خیر. اگر Base URL بدون /api/v1 داده شود، Client آن را خودکار اضافه میکند؛ اگر از قبل وجود داشته باشد دوباره اضافه نمیشود.
برای عملیات submit از Client::idempotencyKey() یا یک کلید پایدار خودتان استفاده کنید. استفاده مجدد همان کلید با payload متفاوت میتواند 409 idempotency_conflict بدهد.
پس از موفقشدن RequestHandle، از downloadMedia($target) استفاده کنید. SDK پاسخ غیرموفق را به ApiException تبدیل میکند.
بله. stream() و streamRequest() پارامتر after دارند و Transport نیز Last-Event-ID را ارسال میکند.
از WebhookVerifier::fromHeaders() با secret و raw body استفاده کنید. timestamp با tolerance پیشفرض 300 ثانیه و HMAC SHA-256 بررسی میشود.
Repository و package به تنظیمات انتشار SDK متصلاند؛ لینکهای این صفحه با تنظیمات واقعی SDK همگام میمانند.