getSupportedCapabilities(); foreach ($capabilities as $capability) { if ($capability->isTextGeneration()) { return new OpenAiCompatibleServersTextGenerationModel($modelMetadata, $providerMetadata); } } throw new RuntimeException( esc_html('Unsupported model capabilities: ' . implode(', ', $capabilities)) ); } /** * {@inheritDoc} * * @since 1.0.0 */ protected static function createProviderMetadata(): ProviderMetadata { $id = 'openai-compatible-servers'; $name = 'OpenAI Compatible'; $type = ProviderTypeEnum::server(); $credentialsUrl = ''; // Local server, no central console $authMethod = RequestAuthenticationMethod::apiKey(); $description = 'Local OpenAI-compatible servers (LM Studio, Ollama, vLLM, etc.)'; if (function_exists('__')) { $description = __( 'Local OpenAI-compatible servers (LM Studio, Ollama, vLLM, etc.)', 'ai-provider-for-openai-compatible-servers' ); } $logoPath = dirname(__DIR__, 2) . '/assets/images/logo.svg'; return new ProviderMetadata( $id, $name, $type, $credentialsUrl, $authMethod, $description, $logoPath ); } /** * {@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 OpenAiCompatibleServersModelMetadataDirectory(); } }