Save workspace changes
This commit is contained in:
113
config/ai_biography.php
Normal file
113
config/ai_biography.php
Normal 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),
|
||||
];
|
||||
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'viewer' => [
|
||||
'guest_mode' => env('MATURITY_GUEST_MODE', 'hide'),
|
||||
'default_mode' => env('MATURITY_DEFAULT_MODE', 'blur'),
|
||||
'default_warn_on_detail' => env('MATURITY_DEFAULT_WARN_ON_DETAIL', true),
|
||||
],
|
||||
|
||||
@@ -96,11 +96,16 @@ return [
|
||||
'tags',
|
||||
'category',
|
||||
'content_type',
|
||||
'published_as_type',
|
||||
'orientation',
|
||||
'resolution',
|
||||
'author_id',
|
||||
'is_public',
|
||||
'is_approved',
|
||||
'is_mature',
|
||||
'is_mature_effective',
|
||||
'maturity_level',
|
||||
'maturity_status',
|
||||
'has_missing_thumbnails',
|
||||
'created_at',
|
||||
],
|
||||
|
||||
@@ -73,6 +73,19 @@ return [
|
||||
'collections_endpoint' => env('VISION_VECTOR_GATEWAY_COLLECTIONS_ENDPOINT', '/vectors/collections'),
|
||||
],
|
||||
|
||||
'tag_suggestions' => [
|
||||
'provider' => env('VISION_TAG_SUGGESTIONS_PROVIDER', 'lm_studio'),
|
||||
],
|
||||
|
||||
'together' => [
|
||||
'base_url' => env('VISION_TOGETHER_BASE_URL', 'https://api.together.xyz'),
|
||||
'endpoint' => env('VISION_TOGETHER_ENDPOINT', '/v1/chat/completions'),
|
||||
'model' => env('VISION_TOGETHER_MODEL', 'meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo'),
|
||||
'api_key' => env('VISION_TOGETHER_API_KEY', env('TOGETHER_API_KEY', '')),
|
||||
'timeout' => (int) env('VISION_TOGETHER_TIMEOUT', 90),
|
||||
'connect_timeout' => (int) env('VISION_TOGETHER_CONNECT_TIMEOUT', 5),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LM Studio – local multimodal inference (tag generation)
|
||||
|
||||
140
config/worlds.php
Normal file
140
config/worlds.php
Normal file
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'default_section_order' => [
|
||||
'featured_artworks',
|
||||
'featured_collections',
|
||||
'featured_creators',
|
||||
'featured_groups',
|
||||
'news',
|
||||
'challenge',
|
||||
'events',
|
||||
'releases',
|
||||
'cards',
|
||||
],
|
||||
|
||||
'sections' => [
|
||||
'featured_artworks' => [
|
||||
'label' => 'Featured artworks',
|
||||
'description' => 'Standout pieces curated for this world.',
|
||||
'relation_types' => ['artwork'],
|
||||
],
|
||||
'featured_collections' => [
|
||||
'label' => 'Curated collections',
|
||||
'description' => 'Collections that deepen the theme and reward longer exploration.',
|
||||
'relation_types' => ['collection'],
|
||||
],
|
||||
'featured_creators' => [
|
||||
'label' => 'Featured creators',
|
||||
'description' => 'Creators shaping the atmosphere of this world.',
|
||||
'relation_types' => ['user'],
|
||||
],
|
||||
'featured_groups' => [
|
||||
'label' => 'Featured groups',
|
||||
'description' => 'Collectives, scenes, and crews connected to the moment.',
|
||||
'relation_types' => ['group'],
|
||||
],
|
||||
'news' => [
|
||||
'label' => 'Related news',
|
||||
'description' => 'Editorial context, announcements, and stories tied to the world.',
|
||||
'relation_types' => ['news'],
|
||||
],
|
||||
'challenge' => [
|
||||
'label' => 'Challenge spotlight',
|
||||
'description' => 'Active or recent challenge participation for this world.',
|
||||
'relation_types' => ['challenge'],
|
||||
],
|
||||
'events' => [
|
||||
'label' => 'Related events',
|
||||
'description' => 'Upcoming sessions, launches, and live moments around the theme.',
|
||||
'relation_types' => ['event'],
|
||||
],
|
||||
'releases' => [
|
||||
'label' => 'Release spotlights',
|
||||
'description' => 'Projects and releases that belong in this campaign space.',
|
||||
'relation_types' => ['release'],
|
||||
],
|
||||
'cards' => [
|
||||
'label' => 'Themed cards',
|
||||
'description' => 'Collectible Nova cards that extend the world identity.',
|
||||
'relation_types' => ['card'],
|
||||
],
|
||||
],
|
||||
|
||||
'relation_types' => [
|
||||
'artwork' => 'Artwork',
|
||||
'collection' => 'Collection',
|
||||
'user' => 'Creator',
|
||||
'group' => 'Group',
|
||||
'news' => 'News article',
|
||||
'challenge' => 'Challenge',
|
||||
'event' => 'Event',
|
||||
'release' => 'Release',
|
||||
'card' => 'Card',
|
||||
],
|
||||
|
||||
'themes' => [
|
||||
'halloween' => [
|
||||
'label' => 'Halloween',
|
||||
'accent_color' => '#f97316',
|
||||
'accent_color_secondary' => '#7c2d12',
|
||||
'background_motif' => 'embers',
|
||||
'icon_name' => 'fa-solid fa-ghost',
|
||||
'related_tags_json' => ['halloween', 'spooky', 'autumn'],
|
||||
'suggested_badge_label' => 'Season highlight',
|
||||
'suggested_cta_label' => 'Enter Halloween world',
|
||||
],
|
||||
'christmas' => [
|
||||
'label' => 'Christmas',
|
||||
'accent_color' => '#dc2626',
|
||||
'accent_color_secondary' => '#14532d',
|
||||
'background_motif' => 'frost',
|
||||
'icon_name' => 'fa-solid fa-tree',
|
||||
'related_tags_json' => ['christmas', 'winter', 'holiday'],
|
||||
'suggested_badge_label' => 'Holiday spotlight',
|
||||
'suggested_cta_label' => 'Explore Christmas highlights',
|
||||
],
|
||||
'summer' => [
|
||||
'label' => 'Summer',
|
||||
'accent_color' => '#f59e0b',
|
||||
'accent_color_secondary' => '#0f766e',
|
||||
'background_motif' => 'sunwash',
|
||||
'icon_name' => 'fa-solid fa-sun',
|
||||
'related_tags_json' => ['summer', 'sunwash', 'festival'],
|
||||
'suggested_badge_label' => 'Seasonal spotlight',
|
||||
'suggested_cta_label' => 'Explore summer picks',
|
||||
],
|
||||
'retro-month' => [
|
||||
'label' => 'Retro Month',
|
||||
'accent_color' => '#fb7185',
|
||||
'accent_color_secondary' => '#312e81',
|
||||
'background_motif' => 'scanlines',
|
||||
'icon_name' => 'fa-solid fa-compact-disc',
|
||||
'related_tags_json' => ['retro', 'demoscene', 'scanlines'],
|
||||
'suggested_badge_label' => 'Editorial pick',
|
||||
'suggested_cta_label' => 'Enter Retro Month',
|
||||
],
|
||||
'pixel-week' => [
|
||||
'label' => 'Pixel Week',
|
||||
'accent_color' => '#22c55e',
|
||||
'accent_color_secondary' => '#166534',
|
||||
'background_motif' => 'pixels',
|
||||
'icon_name' => 'fa-solid fa-table-cells',
|
||||
'related_tags_json' => ['pixel', 'pixel-art', 'week'],
|
||||
'suggested_badge_label' => 'Pixel spotlight',
|
||||
'suggested_cta_label' => 'Explore Pixel Week',
|
||||
],
|
||||
'demoscene-tribute-week' => [
|
||||
'label' => 'Demoscene Tribute Week',
|
||||
'accent_color' => '#38bdf8',
|
||||
'accent_color_secondary' => '#1d4ed8',
|
||||
'background_motif' => 'crt',
|
||||
'icon_name' => 'fa-solid fa-wave-square',
|
||||
'related_tags_json' => ['demoscene', 'tribute', 'crt'],
|
||||
'suggested_badge_label' => 'Tribute spotlight',
|
||||
'suggested_cta_label' => 'Enter tribute week',
|
||||
],
|
||||
],
|
||||
];
|
||||
Reference in New Issue
Block a user