getSupportedCapabilities(); foreach ($capabilities as $capability) { if ($capability->isTextGeneration()) { return new ZAITextGenerationModel($modelMetadata, $providerMetadata); } } // phpcs:disable WordPress.Security.EscapeOutput.ExceptionNotEscaped throw new RuntimeException( 'Unsupported model capabilities: ' . implode(', ', $capabilities) ); // phpcs:enable WordPress.Security.EscapeOutput.ExceptionNotEscaped } /** * {@inheritDoc} * * @since 1.0.0 */ protected static function createProviderMetadata(): ProviderMetadata { $providerMetadataArgs = [ 'zai', 'Z.AI', ProviderTypeEnum::cloud(), 'https://z.ai/subscribe', ]; // Authentication method support was added in 0.4.0. if (class_exists(RequestAuthenticationMethod::class)) { $providerMetadataArgs[] = RequestAuthenticationMethod::apiKey(); } // Provider description support was added in 1.2.0. if (defined(AiClient::class . '::VERSION') && version_compare(AiClient::VERSION, '1.2.0', '>=')) { if (function_exists('__')) { $providerMetadataArgs[] = __('Text generation with Z.AI GLM models. The API type is auto-detected from your API key.', 'ai-provider-for-zai'); } else { $providerMetadataArgs[] = 'Text generation with Z.AI GLM models. The API type is auto-detected from your API key.'; } // Provider logo support was added in 1.3.0. if (version_compare(AiClient::VERSION, '1.3.0', '>=')) { $providerMetadataArgs[] = dirname(__DIR__, 2) . '/assets/logo.svg'; } } return new ProviderMetadata(...$providerMetadataArgs); } /** * {@inheritDoc} * * @since 1.0.0 */ protected static function createProviderAvailability(): ProviderAvailabilityInterface { // Check valid API access by attempting to list models. return new ListModelsApiBasedProviderAvailability( static::modelMetadataDirectory() ); } /** * {@inheritDoc} * * @since 1.0.0 */ protected static function createModelMetadataDirectory(): ModelMetadataDirectoryInterface { return new ZAIModelMetadataDirectory(); } }