/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
backend/forms/gpt/SyncModelForm.php
138 строк
4 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace backend\forms\gpt; use common\components\AnthropicComponent; use common\components\DeepseekComponent; use common\components\GoogleAlComponent; use common\components\JanusAIComponent; use common\components\OpenAIComponent; use common\components\OpenRouteComponent; use common\forms\base\BaseModel; use common\helpers\ArrayHelper; use common\kdf\KModelStatus; use common\models\LinkProviderModel; use common\models\ModelAI; use common\models\Provider; use DeepSeek\DeepSeekClient; use fholbrook\Openrouter\OpenRouter; use OpenAI\Client; use Yii; use yii\helpers\Json; use yii\helpers\VarDumper; /** * Форма синхронизации моделей * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2024 */ class SyncModelForm extends BaseModel { /** * @var string */ public $type = 'model'; /** * @var int */ public $provider_id = null; /** * @inheritdoc */ public function rules() { return ArrayHelper::merge(parent::rules(), [ [['type'], 'string'], ['provider_id', 'number'], [['provider_id', 'type'], 'required'] ]); } /** * @inheritdoc */ public function loadModel($condition) { parent::loadModel($condition); $this->provider_id = ArrayHelper::getValue($condition, 'provider_id'); } /** * @inheritdoc */ protected function doSave() { $sub = LinkProviderModel::find() ->select('model_id') ->andWhere([ 'provider_id' => $this->provider_id ]); ModelAI::updateAll(['rec_status' => KModelStatus::DRAFT], ['id' => $sub]); $data = []; switch ((int)$this->provider_id) { case Provider::GPT: $openAI = new OpenAIComponent(); /** @var Client $client */ $client = $openAI->getClient(); $data = ArrayHelper::getValue($client->models()->list(), 'data'); break; case Provider::OPEN_ROUTER: $openAI = new OpenRouteComponent(); /** @var OpenRouter $client */ $client = $openAI->getClient(); $data = ArrayHelper::getValue($client->models->list(), 'data'); break; case Provider::ANTHROPIC: $openAI = new AnthropicComponent(); $data = $openAI->models(); break; case Provider::DEEPSEEK: $openAI = new DeepseekComponent(); /** @var DeepSeekClient $client */ $client = $openAI->getClient(); $response = $client->getModelsList()->run(); $data = (array)ArrayHelper::getValue(Json::decode($response), 'data'); break; case Provider::GOOGLE_AI: $openAI = new GoogleAlComponent(); /** @var \Gemini\Client $client */ $client = $openAI->getClient(); $data = (array)ArrayHelper::getValue($client->models()->list()->toArray(), 'models'); break; case Provider::JANUS_AI: $openAI = new JanusAIComponent(); $data = $openAI->getModels(); $data = (array)ArrayHelper::getValue($data, 'models'); break; } foreach ($data as $result) { Yii::debug(VarDumper::dumpAsString([ 'model' => $result ])); ModelAI::findOrCreate($result, [ 'provider_id' => $this->provider_id, ]); } ModelAI::updateAll([ 'rec_status' => KModelStatus::ARCHIVE ], [ 'id' => $sub, 'rec_status' => KModelStatus::DRAFT ]); return true; } }