'NVIDIA Build', 'openai' => 'OpenAI', 'anthropic' => 'Anthropic', 'openrouter' => 'OpenRouter', 'vertex' => 'Google Vertex AI', 'custom' => 'Custom (OpenAI compatible)', ]; public const DEFAULT_MODELS = [ 'nvidia' => 'nvidia/nemotron-3-ultra-550b-a55b', 'openai' => 'gpt-4o-mini', 'anthropic' => 'claude-3-5-sonnet-latest', 'openrouter' => 'openai/gpt-4o-mini', 'vertex' => 'gemini-2.0-flash', 'custom' => 'gpt-4o-mini', ]; public static function current_id(): string { $id = (string) Options::get('aap_ai_provider', 'nvidia'); return isset(self::LABELS[$id]) ? $id : 'nvidia'; } public static function make(?string $provider_id = null): ?Provider { $id = $provider_id ?? self::current_id(); $timeout = max(10, Options::int('aap_ai_timeout')); $model = trim((string) Options::get('aap_model', '')); return match ($id) { 'openai' => new OpenAiProvider((string) Options::get('aap_openai_api_key', ''), $model, $timeout), 'anthropic' => new AnthropicProvider((string) Options::get('aap_anthropic_api_key', ''), $model, $timeout), 'openrouter' => new OpenRouterProvider((string) Options::get('aap_openrouter_api_key', ''), $model, $timeout), 'vertex' => new VertexProvider( (string) Options::get('aap_vertex_project', ''), (string) Options::get('aap_vertex_location', 'us-central1'), (string) Options::get('aap_vertex_service_account', ''), $model, $timeout ), 'custom' => new CustomProvider((string) Options::get('aap_custom_api_key', ''), $model, $timeout), default => new NvidiaProvider((string) Options::get('aap_nvidia_api_key', ''), $model, $timeout), }; } }