$drivers Keyed by AiProvider::PROVIDERS value. */ public function __construct(private readonly array $drivers) {} public function driverFor(AiProvider $provider): AiProviderDriver { if (! isset($this->drivers[$provider->provider])) { throw new AiGenerationException("No driver registered for AI provider '{$provider->provider}'."); } return $this->drivers[$provider->provider]; } /** * @param array $options */ public function generate(AiProvider $provider, string $prompt, array $options = []): AiGenerationResult { if (! $provider->is_active) { throw new AiGenerationException("AI provider '{$provider->name}' is not active."); } return $this->driverFor($provider)->generate($provider, $prompt, $options); } }