getSupportedCapabilities(); foreach ($capabilities as $capability) { if ($capability->isImageGeneration()) { return new CloudflareWorkersAiImageGenerationModel($modelMetadata, $providerMetadata); } if ($capability->isTextGeneration()) { if (CloudflareWorkersAiTranslationModel::supports($modelMetadata->getId())) { return new CloudflareWorkersAiTranslationModel($modelMetadata, $providerMetadata); } return new CloudflareWorkersAiTextGenerationModel($modelMetadata, $providerMetadata); } } throw new RuntimeException( 'Unsupported model capabilities: ' . implode(', ', $capabilities) ); } protected static function createProviderMetadata(): ProviderMetadata { return new ProviderMetadata( self::ID, 'Cloudflare Workers AI', ProviderTypeEnum::cloud(), 'https://dash.cloudflare.com/?to=/:account/ai/workers-ai/api-quick-start', RequestAuthenticationMethod::apiKey(), __('Text, image and translation models on Cloudflare Workers AI, with a free daily allowance.', 'aipcf-ai-provider-for-cloudflare'), plugin_dir_path(\AIPCF_FILE) . 'assets/images/cloudflare.svg' ); } protected static function createProviderAvailability(): ProviderAvailabilityInterface { return new ListModelsApiBasedProviderAvailability( static::modelMetadataDirectory() ); } protected static function createModelMetadataDirectory(): ModelMetadataDirectoryInterface { return new CloudflareWorkersAiModelMetadataDirectory(); } }