getSupportedCapabilities(); foreach ( $capabilities as $capability ) { if ( $capability->isTextGeneration() ) { return new LMStudioTextGenerationModel( $model_metadata, $provider_metadata ); } } throw new \WordPress\AiClient\Common\Exception\RuntimeException( // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- Exception message, not output. 'Unsupported model capabilities for LM Studio model: ' . $model_metadata->getId() ); } /** * {@inheritDoc} * * @since 1.0.0 */ protected static function createProviderMetadata(): ProviderMetadata { return new ProviderMetadata( 'lmstudio', 'LM Studio', ProviderTypeEnum::server(), 'https://lmstudio.ai/docs/developer/core/authentication', RequestAuthenticationMethod::apiKey(), __( 'LM Studio is a self-hosted platform for managing and deploying large language models (LLMs).', 'ai-provider-for-lm-studio' ), AI_PROVIDER_FOR_LM_STUDIO_PLUGIN_DIR . 'assets/images/lmstudio-logo.svg' ); } /** * {@inheritDoc} * * @since 1.0.0 */ protected static function createProviderAvailability(): ProviderAvailabilityInterface { return new LMStudioProviderAvailability(); } /** * {@inheritDoc} * * @since 1.0.0 */ protected static function createModelMetadataDirectory(): ModelMetadataDirectoryInterface { return new LMStudioModelMetadataDirectory(); } }