/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
backend/forms/data/task/TaskModelForm.php
240 строк
6 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace backend\forms\data\task; use common\helpers\ArrayHelper; use common\helpers\NumHelper; use common\kdf\KPromtFormat; use common\kdf\KTaskType; use common\models\Glossary; use common\models\link\LinkTaskGlossary; use common\models\ModelAI; use common\models\Project; use common\models\Provider; use common\models\Task; use common\models\TaskModel; use common\models\TextSegment; use common\models\tm\LinkTaskTm; use common\models\tm\Tm; use Yii; /** * Форма редактирования сервиса * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2024 */ class TaskModelForm extends BaseTaskForm { /** * Провайдер * @var null */ public $provider_id = null; /** * Проект * @var null */ public $project_id = null; /** * Модель * @var null */ public $model_id = null; /** * ТопП * @var array */ public $top_p = null; /** * промт * @var null */ public $promt = null; /** * формат промта * @var null */ public $promt_format_id = null; /** * Температура * @var null */ public $temperature = null; /** * @inheritdoc */ protected $type_id = KTaskType::T_MODEL; /** * @inheritdoc */ public function rules() { return ArrayHelper::merge(parent::rules(), [ [['model_id', 'promt', 'promt_format_id', 'provider_id'], 'required'], [['promt'], 'string'], [['model_id', 'promt_format_id', 'provider_id'], 'integer'], [['temperature', 'top_p'], 'number'] ]); } /** * @inheritdoc */ public function attributeLabels() { return ArrayHelper::merge(parent::attributeLabels(), [ 'model_id' => Yii::t('app', 'Model AI'), 'provider_id' => Yii::t('app', 'Provider'), 'project_id' => Yii::t('app', 'Project'), 'top_p' => Yii::t('app', 'topP'), 'promt' => Yii::t('app', 'Promt'), 'promt_format_id' => Yii::t('app', 'Promt format'), 'temperature' => Yii::t('app', 'Temperature') ]); } /** * @inheritdoc */ public function attributeHints() { return ArrayHelper::merge(parent::attributeHints(), [ 'promt' => Yii::t('app', 'use {source_lang}, {target_lang} and {subject_area} as parameters'), 'project_id' => Yii::t('app', 'use «Default Project» to view All available GPT-Models'), ]); } /** * @inheritdoc */ public function initState($object) { if ($object instanceof Task) { /** @var TaskModel $taskModel */ $taskModel = $object->getTaskModel() ->andWhere(['is_default' => 1]) ->one(); if ($taskModel) { $this->provider_id = $taskModel->model->getProviderId(); $this->project_id = $taskModel->project_id; $this->model_id = $taskModel->model_id; $this->promt_format_id = $taskModel->promt_format_id; $this->top_p = $taskModel->top_p; $this->promt = $taskModel->promt; $this->temperature = $taskModel->temperature; } /** @var LinkTaskGlossary $tg */ if ($tg = $object->taskGlossary) { $this->glossary_id = $tg->glossary_id; $this->passing_score = $tg->passing_score; } /** @var LinkTaskTm $tm */ if ($tm = $object->taskTm) { $this->tm_id = $tm->tm_id; $this->passing_score_tm = $tm->passing_score; } } parent::initState($object); // TODO: Change the autogenerated stub } /** * @inheritdoc */ public function getPublicFields() { return ArrayHelper::merge(parent::getPublicFields(), [ 'top_p', 'promt', 'temperature', 'provider_id' => function () { return $this->prepareSelectField(Provider::find(), 'provider_id', 'title'); }, 'project_id' => function () { return $this->prepareSelectField(Project::find(), 'project_id', 'title'); }, 'model_id' => function () { return $this->prepareSelectField(ModelAI::find(), 'model_id', 'title'); }, 'promt_format_id' => function () { return $this->prepareSelectField(KPromtFormat::find(), 'promt_format_id', 'title'); }, 'glossary_id' => function () { return $this->prepareSelectField(Glossary::find(), 'glossary_id', 'title'); }, 'tm_id' => function () { return $this->prepareSelectField(Tm::find(), 'tm_id', 'title'); }, ]); } /** * @inheritdoc */ protected function doSave() { $result = parent::doSave(); if ($result) { $tm = TaskModel::findOrNew([ 'task_id' => $this->model->id, 'is_default' => 1 ]); $segment = TextSegment::findOrNew($tm->promt_id); $segment->setAttributes([ 'segment' => $this->promt ]); if (!$segment->save()) { $this->addErrors($segment->errors); return false; } $tm->setAttributes([ 'project_id' => $this->project_id, 'model_id' => $this->model_id, 'promt_format_id' => $this->promt_format_id, 'top_p' => NumHelper::toPoint($this->top_p), 'temperature' => NumHelper::toPoint($this->temperature), 'promt_id' => $segment->id ]); if (!$tm->save()) { $this->addErrors($tm->errors); return false; } Task::updateAll([ 'provider_id' => $tm->model->getProviderId() ], [ 'id' => $this->model->id ]); } return $result; } /** * @inheritdoc */ protected function doDelete() { $this->model->delete(false); return true; } }