getSupportedCapabilities(); foreach ($capabilities as $capability) { if ($capability->isTextGeneration()) { return new CursorTextGenerationModel($modelMetadata, $providerMetadata); } } throw new RuntimeException( esc_html( 'Unsupported model capabilities: ' . implode( ', ', array_map( static fn ($capability): string => sanitize_text_field((string) $capability), $capabilities ) ) ) ); } /** * {@inheritDoc} * * @since 0.1.0 */ protected static function createProviderMetadata(): ProviderMetadata { $providerMetadataArgs = array( 'cursor', 'Cursor', ProviderTypeEnum::cloud(), 'https://cursor.com/dashboard/api', RequestAuthenticationMethod::apiKey(), ); // Provider description support was added in 1.2.0. if (version_compare(AiClient::VERSION, '1.2.0', '>=')) { if (function_exists('__')) { $providerMetadataArgs[] = __( 'Text generation via Cursor Cloud Agents for the WordPress AI Client.', 'ai-provider-for-cursor' ); } else { $providerMetadataArgs[] = 'Text generation via Cursor Cloud Agents for the WordPress AI Client.'; } } // Provider logoPath support was added in 1.3.0. if (version_compare(AiClient::VERSION, '1.3.0', '>=')) { $providerMetadataArgs[] = dirname(__DIR__, 2) . '/assets/images/cursor.svg'; } return new ProviderMetadata(...$providerMetadataArgs); } /** * {@inheritDoc} * * @since 0.1.0 */ protected static function createProviderAvailability(): ProviderAvailabilityInterface { return new ListModelsApiBasedProviderAvailability( static::modelMetadataDirectory() ); } /** * {@inheritDoc} * * @since 0.1.0 */ protected static function createModelMetadataDirectory(): ModelMetadataDirectoryInterface { return new CursorModelMetadataDirectory(); } }