Save workspace changes

This commit is contained in:
2026-04-18 17:02:56 +02:00
parent f02ea9a711
commit 87d60af5a9
4220 changed files with 1388603 additions and 1554 deletions

113
config/ai_biography.php Normal file
View File

@@ -0,0 +1,113 @@
<?php
declare(strict_types=1);
return [
/*
|--------------------------------------------------------------------------
| AI Biography enabled flag
|--------------------------------------------------------------------------
| Set to false to skip generation globally (e.g. while deploying).
*/
'enabled' => env('AI_BIOGRAPHY_ENABLED', true),
/*
|--------------------------------------------------------------------------
| LLM provider
|--------------------------------------------------------------------------
| Supported providers:
| - together (Together.ai primary, google/gemma-3n-E4B-it)
| - vision_gateway (Skinbase Vision gateway, uses VISION_GATEWAY_URL / API key)
| - gemini (direct Google Gemini API)
| - home (remote LM Studio / OpenAI-compatible endpoint)
*/
'provider' => env('AI_BIOGRAPHY_LLM_PROVIDER', 'together'),
/*
|--------------------------------------------------------------------------
| Together.ai provider (primary)
|--------------------------------------------------------------------------
| Used when AI_BIOGRAPHY_LLM_PROVIDER=together (the default).
|
| Example:
| TOGETHER_API_KEY=your_key_here
| AI_BIOGRAPHY_TOGETHER_MODEL=google/gemma-3n-E4B-it
*/
'together' => [
'base_url' => env('AI_BIOGRAPHY_TOGETHER_BASE_URL', 'https://api.together.xyz'),
'endpoint' => env('AI_BIOGRAPHY_TOGETHER_ENDPOINT', '/v1/chat/completions'),
'model' => env('AI_BIOGRAPHY_TOGETHER_MODEL', 'google/gemma-3n-E4B-it'),
'api_key' => env('TOGETHER_API_KEY', env('AI_BIOGRAPHY_TOGETHER_API_KEY', '')),
'timeout_seconds' => (int) env('AI_BIOGRAPHY_TOGETHER_TIMEOUT', env('AI_BIOGRAPHY_LLM_TIMEOUT', 90)),
'connect_timeout_seconds' => (int) env('AI_BIOGRAPHY_TOGETHER_CONNECT_TIMEOUT', 5),
],
/*
|--------------------------------------------------------------------------
| Vision LLM gateway endpoint
|--------------------------------------------------------------------------
| Primary endpoint: /ai/chat (preferred for the Skinbase Vision gateway)
| Fallback: /v1/chat/completions (OpenAI-compatible)
|
| Base URL and API key are shared with the existing Vision gateway config:
| VISION_GATEWAY_URL / VISION_GATEWAY_API_KEY
*/
'llm_endpoint' => env('AI_BIOGRAPHY_LLM_ENDPOINT', '/ai/chat'),
'llm_fallback_endpoint' => env('AI_BIOGRAPHY_LLM_FALLBACK_ENDPOINT', '/v1/chat/completions'),
'llm_timeout_seconds' => (int) env('AI_BIOGRAPHY_LLM_TIMEOUT', 90),
'llm_model' => env('AI_BIOGRAPHY_LLM_MODEL', 'vision-gateway'),
/*
|--------------------------------------------------------------------------
| Gemini direct API (optional alternative provider)
|--------------------------------------------------------------------------
| Used when AI_BIOGRAPHY_LLM_PROVIDER=gemini.
|
| Example:
| GEMINI_API_KEY=...
| AI_BIOGRAPHY_GEMINI_MODEL=gemini-flash-latest
*/
'gemini' => [
'base_url' => env('AI_BIOGRAPHY_GEMINI_BASE_URL', 'https://generativelanguage.googleapis.com'),
'model' => env('AI_BIOGRAPHY_GEMINI_MODEL', 'gemini-flash-latest'),
'api_key' => env('GEMINI_API_KEY', env('AI_BIOGRAPHY_GEMINI_API_KEY', '')),
],
/*
|--------------------------------------------------------------------------
| Home LM Studio API (optional alternative provider)
|--------------------------------------------------------------------------
| Used when AI_BIOGRAPHY_LLM_PROVIDER=home.
| This targets a remote LM Studio / OpenAI-compatible endpoint.
|
| Example:
| AI_BIOGRAPHY_HOME_BASE_URL=http://home.klevze.si:8200
| AI_BIOGRAPHY_HOME_MODEL=qwen/qwen3.5-9b
*/
'home' => [
'base_url' => env('AI_BIOGRAPHY_HOME_BASE_URL', 'http://home.klevze.si:8200'),
'endpoint' => env('AI_BIOGRAPHY_HOME_ENDPOINT', '/v1/chat/completions'),
'model' => env('AI_BIOGRAPHY_HOME_MODEL', 'qwen/qwen3.5-9b'),
'api_key' => env('AI_BIOGRAPHY_HOME_API_KEY', ''),
'verify_ssl' => env('AI_BIOGRAPHY_HOME_VERIFY_SSL', true),
'timeout_seconds' => (int) env('AI_BIOGRAPHY_HOME_TIMEOUT', env('AI_BIOGRAPHY_LLM_TIMEOUT', 90)),
'connect_timeout_seconds' => (int) env('AI_BIOGRAPHY_HOME_CONNECT_TIMEOUT', 3),
],
/*
|--------------------------------------------------------------------------
| Queue
|--------------------------------------------------------------------------
| Queue name for GenerateAiBiographyJob.
*/
'queue' => env('AI_BIOGRAPHY_QUEUE', 'default'),
/*
|--------------------------------------------------------------------------
| Stale threshold (days)
|--------------------------------------------------------------------------
| A biography is considered stale if older than this many days
| AND the source hash has changed. The batch refresh command uses this.
*/
'stale_threshold_days' => (int) env('AI_BIOGRAPHY_STALE_DAYS', 30),
];