[ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 'scheme' => 'https', ], 'postmark' => [ 'token' => env('POSTMARK_TOKEN'), ], 'ses' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], 'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_REDIRECT_URI'), ], 'openai' => [ 'api_key' => env('OPENAI_API_KEY'), 'base_url' => env('OPENAI_BASE_URL', 'https://api.openai.com/v1'), 'model' => env('OPENAI_MODEL', 'gpt-4o'), 'video_model' => env('OPENAI_VIDEO_MODEL', 'sora-2'), 'video_poll_interval' => env('OPENAI_VIDEO_POLL_INTERVAL', 5), 'chat_api_key' => env('OPENAI_CHAT_API_KEY'), 'chat_base_url' => env('OPENAI_CHAT_BASE_URL'), 'chat_model' => env('OPENAI_CHAT_MODEL'), 'chat_fallback_model' => env('OPENAI_CHAT_FALLBACK_MODEL'), 'assistant_provider' => env('OPENAI_ASSISTANT_PROVIDER', 'deepseek'), 'assistant_api_key' => env('OPENAI_ASSISTANT_API_KEY'), 'assistant_base_url' => env('OPENAI_ASSISTANT_BASE_URL'), 'assistant_id' => env('OPENAI_ASSISTANT_ID'), 'assistant_use_hosted_threads' => env('OPENAI_ASSISTANT_USE_HOSTED_THREADS', false), 'assistant_model' => env('OPENAI_ASSISTANT_MODEL', 'deepseek-chat'), 'assistant_system_prompt' => env('OPENAI_ASSISTANT_SYSTEM_PROMPT', 'Kamu adalah assistant premium untuk Medilis. Jawaban harus spesifik, tajam, tidak generik, dan langsung bisa dipakai.'), 'assistant_timeout' => env('OPENAI_ASSISTANT_TIMEOUT', 18), 'assistant_run_timeout' => env('OPENAI_ASSISTANT_RUN_TIMEOUT', 90), 'assistant_poll_interval_ms' => env('OPENAI_ASSISTANT_POLL_INTERVAL_MS', 350), 'image_model' => env('OPENAI_IMAGE_MODEL', 'gpt-image-1.5'), 'system_prompt' => env('OPENAI_SYSTEM_PROMPT', 'Kamu adalah asisten AI yang membantu, jelas, dan singkat.'), 'history_limit' => env('OPENAI_HISTORY_LIMIT', 6), 'max_tokens' => env('OPENAI_MAX_TOKENS', 180), 'timeout' => env('OPENAI_TIMEOUT', 40), 'image_timeout' => env('OPENAI_IMAGE_TIMEOUT', 120), 'svg_max_tokens' => env('OPENAI_SVG_MAX_TOKENS', 900), 'daily_message_limit' => env('OPENAI_DAILY_MESSAGE_LIMIT', 40), ], 'pollinations' => [ 'api_key' => env('POLLINATIONS_API_KEY'), 'base_url' => env('POLLINATIONS_BASE_URL', 'https://image.pollinations.ai/prompt'), 'model' => env('POLLINATIONS_MODEL', 'flux'), 'timeout' => env('POLLINATIONS_TIMEOUT', 45), ], 'freepik' => [ 'api_key' => env('FREEPIK_API_KEY'), 'base_url' => env('FREEPIK_BASE_URL', 'https://api.freepik.com/v1/ai/text-to-image'), 'timeout' => env('FREEPIK_TIMEOUT', 90), 'music_generate_endpoint' => env('FREEPIK_MUSIC_GENERATE_ENDPOINT', 'https://api.freepik.com/v1/ai/music-generation/generate'), 'music_status_endpoint' => env('FREEPIK_MUSIC_STATUS_ENDPOINT', 'https://api.freepik.com/v1/ai/music-generation'), ], 'huggingface' => [ 'api_token' => env('HF_TOKEN', env('HF_API_TOKEN')), 'model' => env('HF_MODEL', 'black-forest-labs/FLUX.1-schnell'), 'base_url' => env('HF_BASE_URL', 'https://router.huggingface.co/hf-inference/models'), 'timeout' => env('HF_TIMEOUT', 60), 'media_enabled' => env('HF_MEDIA_ENABLED', false), 'media_driver' => env('HF_MEDIA_DRIVER', 'repo'), 'media_repo_id' => env('HF_MEDIA_REPO_ID', 'adwandw/teknolis-media'), 'media_repo_type' => env('HF_MEDIA_REPO_TYPE', 'dataset'), 'media_bucket_id' => env('HF_MEDIA_BUCKET_ID', env('HF_BUCKET', '')), 'media_path_prefix' => env('HF_MEDIA_PATH_PREFIX', 'laravel-media'), 'media_delete_local' => env('HF_MEDIA_DELETE_LOCAL', true), 'cli_binary' => env('HF_CLI_BINARY', '/usr/local/bin/hf'), 'media_owner_email' => env('HF_MEDIA_OWNER_EMAIL', 'admin@dev.local'), // Enable HF‑only mode (disable Freepik stock integration). Reads from TOOLS_HF_ONLY env variable. 'hf_only' => env('TOOLS_HF_ONLY', false), ], 'edge_tts' => [ 'binary' => env('EDGE_TTS_BINARY', ''), 'voice' => env('EDGE_TTS_VOICE', 'id-ID-GadisNeural'), 'timeout' => env('EDGE_TTS_TIMEOUT', 120), ], 'replicate' => [ 'api_key' => env('REPLICATE_API_KEY'), 'base_url' => 'https://api.replicate.com/v1', 'i2v_model' => env('REPLICATE_I2V_MODEL', 'wavespeedai/wan-2.1-i2v-480p'), 'tryon_model' => env('REPLICATE_TRYON_MODEL', 'cedoysch/flux-fill-redux-try-on'), 'tryon_version' => env('REPLICATE_TRYON_VERSION', 'cf5cb07a25e726fe2fac166a8c5ab52ddccd48657741670fb09d9954d4d8446f'), 'timeout' => env('REPLICATE_TIMEOUT', 180), 'poll_interval' => 4, // seconds between status polls ], 'fal' => [ 'api_key' => env('FAL_KEY'), 'base_url' => env('FAL_BASE_URL', 'https://queue.fal.run'), 'model' => env('FAL_MODEL', 'fal-ai/flux/schnell'), 'tryon_model' => env('FAL_TRYON_MODEL', 'fal-ai/image-apps-v2/virtual-try-on'), 'timeout' => env('FAL_TIMEOUT', 180), 'poll_interval_ms' => env('FAL_POLL_INTERVAL_MS', 1500), ], 'gemini' => [ 'api_key' => env('GEMINI_API_KEY', env('GOOGLE_API_KEY')), 'base_url' => env('GEMINI_BASE_URL', 'https://generativelanguage.googleapis.com/v1beta'), 'veo_model' => env('GEMINI_VEO_MODEL', 'veo-3.1-generate-preview'), 'veo_fast_model' => env('GEMINI_VEO_FAST_MODEL', 'veo-3.1-fast-generate-preview'), 'timeout' => env('GEMINI_TIMEOUT', 180), 'poll_interval' => env('GEMINI_POLL_INTERVAL', 10), ], 'ollama' => [ 'base_url' => env('OLLAMA_BASE_URL', 'http://127.0.0.1:11434'), 'model' => env('OLLAMA_MODEL', 'llama3.2'), 'system_prompt' => env('OLLAMA_SYSTEM_PROMPT', 'Kamu adalah asisten AI yang membantu, jelas, dan singkat.'), 'history_limit' => env('OLLAMA_HISTORY_LIMIT', 12), 'num_predict' => env('OLLAMA_NUM_PREDICT', 256), 'timeout' => env('OLLAMA_TIMEOUT', 90), ], 'deepseek' => [ 'api_key' => env('DEEPSEEK_API_KEY'), 'base_url' => env('DEEPSEEK_BASE_URL', 'https://api.deepseek.com'), 'model' => env('DEEPSEEK_MODEL', 'deepseek-chat'), ], ];