| Server IP : 5.144.175.180 / Your IP : 216.73.216.41 Web Server : Apache/2.4.63 (Unix) OpenSSL/1.1.1 System : Linux vpsgpz1.itsimplycom.it 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 User : edilchimica ( ) PHP Version : 7.4.33 Disable Function : getmyuid,passthru,leak,listen,diskfreespace,tmpfile,link,shell_exec,dl,exec,system,highlight_file,source,show_source,fpassthru,virtual,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,proc_open,proc_close,proc_nice,proc_terminate,escapeshellcmd,ini_alter,popen,pcntl_exec,socket_accept,socket_bind,socket_clear_error,socket_close,socket_connect,symlink,posix_geteuid,ini_alter,socket_listen,socket_create_listen,socket_read,socket_create_pair,stream_socket_server MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /home/edilchimica/webapps/edilchimica/wp-includes/php-ai-client/src/Providers/ |
Upload File : |
<?php
declare (strict_types=1);
namespace WordPress\AiClient\Providers;
use WordPress\AiClient\Providers\Contracts\ModelMetadataDirectoryInterface;
use WordPress\AiClient\Providers\Contracts\ProviderAvailabilityInterface;
use WordPress\AiClient\Providers\Contracts\ProviderInterface;
use WordPress\AiClient\Providers\DTO\ProviderMetadata;
use WordPress\AiClient\Providers\Models\Contracts\ModelInterface;
use WordPress\AiClient\Providers\Models\DTO\ModelConfig;
use WordPress\AiClient\Providers\Models\DTO\ModelMetadata;
/**
* Base class for a provider.
*
* @since 0.1.0
*/
abstract class AbstractProvider implements ProviderInterface
{
/**
* @var array<string, ProviderMetadata> Cache for provider metadata per class.
*/
private static array $metadataCache = [];
/**
* @var array<string, ProviderAvailabilityInterface> Cache for provider availability per class.
*/
private static array $availabilityCache = [];
/**
* @var array<string, ModelMetadataDirectoryInterface> Cache for model metadata directory per class.
*/
private static array $modelMetadataDirectoryCache = [];
/**
* {@inheritDoc}
*
* @since 0.1.0
*/
final public static function metadata(): ProviderMetadata
{
$className = static::class;
if (!isset(self::$metadataCache[$className])) {
self::$metadataCache[$className] = static::createProviderMetadata();
}
return self::$metadataCache[$className];
}
/**
* {@inheritDoc}
*
* @since 0.1.0
*/
final public static function model(string $modelId, ?ModelConfig $modelConfig = null): ModelInterface
{
$providerMetadata = static::metadata();
$modelMetadata = static::modelMetadataDirectory()->getModelMetadata($modelId);
$model = static::createModel($modelMetadata, $providerMetadata);
if ($modelConfig) {
$model->setConfig($modelConfig);
}
return $model;
}
/**
* {@inheritDoc}
*
* @since 0.1.0
*/
final public static function availability(): ProviderAvailabilityInterface
{
$className = static::class;
if (!isset(self::$availabilityCache[$className])) {
self::$availabilityCache[$className] = static::createProviderAvailability();
}
return self::$availabilityCache[$className];
}
/**
* {@inheritDoc}
*
* @since 0.1.0
*/
final public static function modelMetadataDirectory(): ModelMetadataDirectoryInterface
{
$className = static::class;
if (!isset(self::$modelMetadataDirectoryCache[$className])) {
self::$modelMetadataDirectoryCache[$className] = static::createModelMetadataDirectory();
}
return self::$modelMetadataDirectoryCache[$className];
}
/**
* Creates a model instance based on the given model metadata and provider metadata.
*
* @since 0.1.0
*
* @param ModelMetadata $modelMetadata The model metadata.
* @param ProviderMetadata $providerMetadata The provider metadata.
* @return ModelInterface The new model instance.
*/
abstract protected static function createModel(ModelMetadata $modelMetadata, ProviderMetadata $providerMetadata): ModelInterface;
/**
* Creates the provider metadata instance.
*
* @since 0.1.0
*
* @return ProviderMetadata The provider metadata.
*/
abstract protected static function createProviderMetadata(): ProviderMetadata;
/**
* Creates the provider availability instance.
*
* @since 0.1.0
*
* @return ProviderAvailabilityInterface The provider availability.
*/
abstract protected static function createProviderAvailability(): ProviderAvailabilityInterface;
/**
* Creates the model metadata directory instance.
*
* @since 0.1.0
*
* @return ModelMetadataDirectoryInterface The model metadata directory.
*/
abstract protected static function createModelMetadataDirectory(): ModelMetadataDirectoryInterface;
}