/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
backend/forms/gpt/SyncVectorStoreForm.php
134 строки
4 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace backend\forms\gpt; use common\components\OpenAIComponent; use common\forms\base\BaseModel; use common\helpers\ArrayHelper; use common\helpers\FileHelper; use common\kdf\KModelStatus; use common\models\File; use common\models\Project; use common\models\VectorStore; use common\models\VectorStoreFile; use OpenAI\Client; use OpenAI\Exceptions\ErrorException; use OpenAI\Responses\VectorStores\Files\VectorStoreFileListResponse; use Yii; use yii\helpers\VarDumper; use yii\web\NotFoundHttpException; /** * Форма синхронизации файлов * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2025 */ class SyncVectorStoreForm extends BaseModel { /** * @var string */ public $type = 'vector_store'; /** * @inheritdoc */ public function rules() { return ArrayHelper::merge(parent::rules(), [ [['type'], 'string'], ]); } /** * @inheritdoc */ protected function doSave() { $pl = Project::find() ->published() ->all(); /** @var Project $p */ foreach ($pl as $p) { try { $openAI = Yii::createObject([ 'class' => OpenAIComponent::class, 'project_id' => $p->key ]); /** @var Client $client */ $client = $openAI->getClient(); $response = $client->vectorStores()->list(); foreach ($response->data as $result) { Yii::debug(VarDumper::dumpAsString([ 'result' => $result ])); $vs = VectorStore::findOrNew([ 'key' => $result->id, ]); $vs->setAttributes([ 'project_id' => $p->id, 'name' => ($result->name ?: $result->id), 'rec_status' => $result->status == 'deleted' ? KModelStatus::ARCHIVE : KModelStatus::PUBLISHED ]); if (!$vs->save()) { $this->addErrors($vs->errors); return false; } /** @var VectorStoreFileListResponse $file_response */ $file_response = $client->vectorStores()->files()->list($result->id, [ 'limit' => 100, ]); foreach ($file_response->data as $f_result) { Yii::debug(VarDumper::dumpAsString([ 'result' => $f_result ])); $f_key = $f_result->id; $file = File::findOne([ 'key' => $f_key, 'project_id' => $p->id ]); if (!$file) { throw new NotFoundHttpException(Yii::t('app', 'File not found «{0}»', [ $f_key ])); } $link = VectorStoreFile::findOrNew([ 'vector_store_id' => $vs->id, 'file_id' => $file->id, ]); if (!$link->save()) { $this->addErrors($link->errors); return false; } } } } catch (ErrorException $e) { Yii::debug(VarDumper::dumpAsString([ 'error' => $e->getMessage() ])); $p->updateAttributes([ 'rec_status' => KModelStatus::ARCHIVE ]); } } return true; } }