getSupportedCapabilities(); foreach ( $capabilities as $capability ) { if ( $capability->isTextGeneration() ) { return new HuggingFaceTextGenerationModel( $model_metadata, $provider_metadata ); } if ( $capability->isImageGeneration() ) { return new HuggingFaceImageGenerationModel( $model_metadata, $provider_metadata ); } } throw new RuntimeException( 'Unsupported model capabilities: ' . esc_html( implode( ', ', $capabilities ) ) ); } /** * Create provider metadata. * * @return ProviderMetadata */ protected static function createProviderMetadata(): ProviderMetadata { $args = array( 'hugging_face', 'Hugging Face', ProviderTypeEnum::cloud(), 'https://huggingface.co/settings/tokens', RequestAuthenticationMethod::apiKey(), ); if ( version_compare( AiClient::VERSION, '1.2.0', '>=' ) ) { $args[] = __( 'Text and image generation with open-source models via Hugging Face Inference API.', 'ai-provider-for-hugging-face' ); } // Provider logo support was added in 1.3.0. if ( version_compare( AiClient::VERSION, '1.3.0', '>=' ) ) { $args[] = plugin_dir_path( HUGGING_FACE_PROVIDER_FILE ) . 'images/hugging-face-logo.svg'; } return new ProviderMetadata( ...$args ); } /** * Create a provider availability instance. * * @return ProviderAvailabilityInterface */ protected static function createProviderAvailability(): ProviderAvailabilityInterface { return new HuggingFaceProviderAvailability(); } /** * Create the model metadata directory. * * @return ModelMetadataDirectoryInterface */ protected static function createModelMetadataDirectory(): ModelMetadataDirectoryInterface { return new HuggingFaceModelMetadataDirectory(); } }