38 lines
1.7 KiB
PHP
38 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
return [
|
|
// Uses same queue family as vision jobs by default; keeps embedding work async and non-blocking.
|
|
'queue' => env('RECOMMENDATIONS_QUEUE', env('VISION_QUEUE', 'default')),
|
|
|
|
'embedding' => [
|
|
'enabled' => env('RECOMMENDATIONS_EMBEDDING_ENABLED', true),
|
|
'model' => env('RECOMMENDATIONS_EMBEDDING_MODEL', 'clip'),
|
|
'model_version' => env('RECOMMENDATIONS_EMBEDDING_MODEL_VERSION', 'v1'),
|
|
'algo_version' => env('RECOMMENDATIONS_ALGO_VERSION', 'clip-cosine-v1'),
|
|
|
|
// Preferred CLIP endpoint for embeddings. The service also accepts an embedding payload from the analyze endpoint response.
|
|
'endpoint' => env('CLIP_EMBED_ENDPOINT', '/embed'),
|
|
'timeout_seconds' => (int) env('CLIP_EMBED_TIMEOUT_SECONDS', 8),
|
|
'connect_timeout_seconds' => (int) env('CLIP_EMBED_CONNECT_TIMEOUT_SECONDS', 2),
|
|
'retries' => (int) env('CLIP_EMBED_HTTP_RETRIES', 1),
|
|
'retry_delay_ms' => (int) env('CLIP_EMBED_HTTP_RETRY_DELAY_MS', 200),
|
|
|
|
// Guardrails for malformed service responses.
|
|
'min_dim' => (int) env('RECOMMENDATIONS_MIN_DIM', 64),
|
|
'max_dim' => (int) env('RECOMMENDATIONS_MAX_DIM', 4096),
|
|
],
|
|
|
|
// Backfill chunk size for resumable queue fan-out.
|
|
'backfill_batch_size' => (int) env('RECOMMENDATIONS_BACKFILL_BATCH', 200),
|
|
|
|
// A/B support for recommendation ranking variants.
|
|
'ab' => [
|
|
'algo_versions' => array_values(array_filter(array_map(
|
|
static fn (string $value): string => trim($value),
|
|
explode(',', (string) env('RECOMMENDATIONS_AB_ALGO_VERSIONS', env('RECOMMENDATIONS_ALGO_VERSION', 'clip-cosine-v1')))
|
|
))),
|
|
],
|
|
];
|