[ 'label' => 'Anthropic Claude', 'endpoint' => 'https://api.anthropic.com/v1/messages', 'models' => [ 'claude-haiku-4-5-20251001', 'claude-sonnet-4-20250514' ], 'default' => 'claude-haiku-4-5-20251001', 'auth' => 'x-api-key', 'format' => 'anthropic', ], 'openai' => [ 'label' => 'OpenAI', 'endpoint' => 'https://api.openai.com/v1/chat/completions', 'models' => [ 'gpt-4o-mini', 'gpt-4o' ], 'default' => 'gpt-4o-mini', 'auth' => 'Authorization', 'format' => 'openai', ], 'gemini' => [ 'label' => 'Google Gemini', 'endpoint' => 'https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent', 'models' => [ 'gemini-2.5-flash', 'gemini-2.5-pro' ], 'default' => 'gemini-2.5-flash', 'auth' => 'key', 'format' => 'gemini', ], 'ollama' => [ 'label' => 'Ollama (local)', 'endpoint' => 'http://localhost:11434/api/chat', 'models' => [ 'llama3.2', 'mistral', 'phi3' ], 'default' => 'llama3.2', 'auth' => null, 'format' => 'ollama', ], ]; } public static function get( string $provider ): ?array { return self::all()[ $provider ] ?? null; } public static function is_valid( string $provider ): bool { return array_key_exists( $provider, self::all() ); } }