/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/models/Task.php
289 строк
8 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\models; use common\behaviors\CloneBehavior; use common\helpers\UuidHelper; use common\interfaces\TitleInterface; use common\kdf\KTaskType; use common\models\link\LinkTaskGlossary; use common\models\tm\LinkTaskTm; use common\models\tm\Tm; use common\traits\TitleRecordTrait; use common\validators\UidValidator; use Yii; use yii\db\ActiveQuery; use yii\helpers\ArrayHelper; /** * Таблица - задачи * * @property string $title Заголовок * @property integer $type_id * @property string $guid * @property integer $is_debug * @property integer $provider_id * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2024 */ class Task extends \common\models\base\BaseModel implements TitleInterface { use TitleRecordTrait; const ChatGPT = '42c16c1e-eda1-43ee-8e85-a08079124322'; const RFI_Assistant = '8b4b58c5-3435-4ee8-a705-36ebcb872049'; const XBench_Analysis = 'b5f48f3f-a4ed-4d11-bb95-d81731a9187e'; /** * @inheritdoc */ public $softDelete = true; /** * {@inheritdoc} */ public static function tableName() { return 'task'; } /** * {@inheritdoc} */ public function rules() { return ArrayHelper::merge(parent::rules(), [ ['guid', 'default', 'value' => UuidHelper::uuid()], ['type_id', 'default', 'value' => KTaskType::T_MODEL], ['provider_id', 'default', 'value' => Provider::GPT], ['is_debug', 'default', 'value' => 0], ['title', 'trim'], [['title', 'guid', 'type_id', 'is_debug', 'provider_id'], 'required'], [['is_debug', 'provider_id'], 'number'], [['title', 'guid'], 'string', 'max' => 255], ['guid', UidValidator::class], [['guid'], 'unique'], ]); } /** * {@inheritdoc} */ public function attributeLabels() { return ArrayHelper::merge(parent::attributeLabels(), [ 'title' => Yii::t('app', 'Title'), 'type_id' => Yii::t('app', 'Task type'), 'guid' => Yii::t('app', 'GUID'), 'is_debug' => Yii::t('app', 'Is Debug'), 'provider_id' => Yii::t('app', 'Provider'), ]); } /** * {@inheritdoc} */ public function behaviors() { return ArrayHelper::merge(parent::behaviors(), [ 'CloneBehavior' => [ 'class' => CloneBehavior::class, 'copy_self' => true, 'children' => [ TaskModel::class, TaskAssistant::class, LinkTaskGlossary::class, LinkTaskTm::class ], 'default_values' => [ 'guid' => null, ], ], ]); } /** * {@inheritdoc} */ public function __toString() { return $this->title; } /** * {@inheritdoc} */ public function fields() { switch ($this->type_id) { case KTaskType::T_MODEL: $a = ModelAI::getAlias(); $model = ModelAI::find() ->select([ 'title', 'top_p', 'temperature' ]) ->alias($a) ->innerJoin(['tm' => TaskModel::tableName()], $a . '.id = tm.model_id and tm.is_default = 1') ->andWhere([ 'task_id' => $this->id ]) ->asArray() ->one(); return [ 'guid', 'title', 'model' => function () use ($model) { return ArrayHelper::getValue($model, 'title'); }, 'top_p' => function () use ($model) { return ArrayHelper::getValue($model, 'top_p'); }, 'temperature' => function () use ($model) { return ArrayHelper::getValue($model, 'temperature'); }, ]; case KTaskType::T_ASSISTANT: $a = Assistant::getAlias(); /** @var $assistant $assistant */ $assistant = Assistant::find() ->alias($a) ->innerJoin(['ta' => TaskAssistant::tableName()], $a . '.id = ta.assistant_id and ta.is_default = 1') ->andWhere([ 'task_id' => $this->id ]) ->one(); return [ 'guid', 'title', 'assistant' => function () use ($assistant) { return $assistant->title; }, 'top_p' => function () use ($assistant) { return $assistant->top_p; }, 'temperature' => function () use ($assistant) { return $assistant->temperature; }, ]; } } /** * @return ActiveQuery */ public function getTaskType() { return $this->hasOne(KTaskType::class, ['id' => 'type_id']); } /** * @return ActiveQuery */ public function getTaskModel() { return $this->hasMany(TaskModel::class, ['task_id' => 'id']); } /** * @return ActiveQuery */ public function getTaskAssistant() { return $this->hasMany(TaskAssistant::class, ['task_id' => 'id']); } /** * @return ActiveQuery */ public function getUserTask() { return $this->hasOne(UserTask::class, ['task_id' => 'id']); } /** * @return ActiveQuery */ public function getUser() { return $this->hasOne(User::class, ['id' => 'user_id']) ->viaTable(UserTask::tableName(), ['task_id' => 'id']); } /** * @return ActiveQuery */ public function getTaskGlossary() { return $this->hasOne(LinkTaskGlossary::class, ['task_id' => 'id']); } /** * @return ActiveQuery */ public function getTaskTm() { return $this->hasOne(LinkTaskTm::class, ['task_id' => 'id']); } /** * @return ActiveQuery */ public function getGlossary() { return $this->hasOne(Glossary::class, ['id' => 'glossary_id']) ->viaTable(LinkTaskGlossary::tableName(), ['task_id' => 'id']); } /** * @return ActiveQuery */ public function getTm() { return $this->hasOne(Tm::class, ['id' => 'tm_id']) ->viaTable(LinkTaskTm::tableName(), ['task_id' => 'id']); } /** * Системная задача * @return bool */ public function isSystem() { return $this->guid == self::XBench_Analysis; } /** * @return ActiveQuery */ public function getProvider() { return $this->hasOne(Provider::class, ['id' => 'provider_id']); } /** * Получить провайдера * @return array|\yii\db\ActiveRecord|null * @throws \yii\base\InvalidConfigException */ public function getProviderReal() { $a = Provider::getAlias(); return Provider::find() ->alias($a) ->innerJoin(['l' => LinkProviderModel::tableName()], $a . '.id = provider_id') ->innerJoin(['tm' => TaskModel::tableName()], 'l.model_id = tm.model_id') ->andWhere([ 'is_default' => 1, 'task_id' => $this->id ]) ->one(); } }