Переглянути джерело

Ticket #4770 - Usage of assistants in Live Search and Studio Help.

AntonLV 2 роки тому
батько
коміт
64a4084f7d

+ 32 - 10
inc/classes/BxDolAI.php

@@ -85,24 +85,40 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
         BxDolAIAssistant::pruning();
     }
 
-    public function getProfileId()
+    public static function getDefaultApiKey()
     {
-        return $this->_iProfileId;
+        return getParam('sys_agents_api_key');
     }
 
-    public function getDefaultApiKey()
+    public static function getDefaultModel()
     {
-        return getParam('sys_agents_api_key');
+        return (int)getParam('sys_agents_model');
     }
 
-    public function getDefaultModel()
+    public static function getAssistantForStudio()
     {
-        return (int)getParam('sys_agents_model');
+        return ($iId = (int)getParam('sys_agents_studio_assistant')) != 0 ? $iId : BX_DOL_AI_ASST_ID_UNA;
+    }
+
+    public static function getAssistantForLiveSearch()
+    {
+        return ($iId = (int)getParam('sys_agents_live_search_assistant')) != 0 ? $iId : BX_DOL_AI_ASST_ID_UNA;
+    }
+
+    public function getProfileId()
+    {
+        return $this->_iProfileId;
     }
 
-    public function getModels()
+    public function getModels($aParams = [])
     {
-        return $aModel = $this->_oDb->getModelsBy(['sample' => 'all_pairs']);
+        $aParamsDb = ['sample' => 'all_pairs'];
+        if(isset($aParams['active']))
+            $aParamsDb['active'] = $aParams['active'] === true ? 1 : 0;
+        if(isset($aParams['hidden']))
+            $aParamsDb['hidden'] = $aParams['hidden'] === true ? 1 : 0;
+
+        return $aModel = $this->_oDb->getModelsBy($aParamsDb);
     }
 
     public function getModel($iId)
@@ -132,9 +148,15 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
         return BxDolAIProvider::getObjectInstance($iId);
     }   
 
-    public function getAssistants()
+    public function getAssistants($aParams = [])
     {
-        return $aModel = $this->_oDb->getAssistantsBy(['sample' => 'all_pairs', 'active' => 1]);
+        $aParamsDb = ['sample' => 'all_pairs'];
+        if(isset($aParams['active']))
+            $aParamsDb['active'] = $aParams['active'] === true ? 1 : 0;
+        if(isset($aParams['hidden']))
+            $aParamsDb['hidden'] = $aParams['hidden'] === true ? 1 : 0;
+
+        return $aModel = $this->_oDb->getAssistantsBy($aParamsDb);
     }
 
     public function getAssistantById($iId)

+ 2 - 0
inc/classes/BxDolAIAssistant.php

@@ -7,6 +7,8 @@
  * @{
  */
 
+define('BX_DOL_AI_ASST_ID_UNA', 1);
+
 define('BX_DOL_AI_ASST_TYPE_PERMANENT', 1);
 define('BX_DOL_AI_ASST_TYPE_TRANSIENT', 10);
 

+ 1 - 1
inc/classes/BxDolAIModel.php

@@ -28,7 +28,7 @@ class BxDolAIModel extends BxDol
         $this->_iId = (int)$aModel['id'];
         $this->_sName = $aModel['name'];
         $this->_sCaption = _t($aModel['title']);
-        $this->_sKey = !empty($aModel['key']) ? $aModel['key'] : BxDolAI::getInstance()->getDefaultApiKey();
+        $this->_sKey = !empty($aModel['key']) ? $aModel['key'] : BxDolAI::getDefaultApiKey();
         $this->_aParams = !empty($aModel['params']) ? json_decode($aModel['params'], true) : [];
     }
 

+ 20 - 12
inc/classes/BxDolAIQuery.php

@@ -92,21 +92,24 @@ class BxDolAIQuery extends BxDolDb
                 $aMethod['name'] = 'getPairs';
                 $aMethod['params'][1] = 'id';
                 $aMethod['params'][2] = 'title';
+                $aMethod['params'][3] = [];
 
                 if(isset($aParams['for_asst'])) {
-                    $aMethod['params'][3] = [
-                        'for_asst' => $aParams['for_asst']
-                    ];
+                    $aMethod['params'][3]['for_asst'] = $aParams['for_asst'];
 
-                    $sWhereClause = " AND `for_asst`=:for_asst";
+                    $sWhereClause .= " AND `for_asst`=:for_asst";
                 }
 
                 if(isset($aParams['active'])) {
-                    $aMethod['params'][3] = [
-                        'active' => $aParams['active']
-                    ];
+                    $aMethod['params'][3]['active'] = $aParams['active'];
 
-                    $sWhereClause = " AND `active`=:active";
+                    $sWhereClause .= " AND `active`=:active";
+                }
+
+                if(isset($aParams['hidden'])) {
+                    $aMethod['params'][3]['hidden'] = $aParams['hidden'];
+
+                    $sWhereClause .= " AND `hidden`=:hidden";
                 }
                 break;
         }
@@ -594,13 +597,18 @@ class BxDolAIQuery extends BxDolDb
                 $aMethod['name'] = 'getPairs';
                 $aMethod['params'][1] = 'id';
                 $aMethod['params'][2] = 'name';
+                $aMethod['params'][3] = [];
 
                 if(isset($aParams['active'])) {
-                    $aMethod['params'][3] = [
-                        'active' => $aParams['active']
-                    ];
+                    $aMethod['params'][3]['active'] = $aParams['active'];
+
+                    $sWhereClause .= " AND `ta`.`active`=:active";
+                }
+
+                if(isset($aParams['hidden'])) {
+                    $aMethod['params'][3]['hidden'] = $aParams['hidden'];
 
-                    $sWhereClause = " AND `ta`.`active`=:active";
+                    $sWhereClause .= " AND `ta`.`hidden`=:hidden";
                 }
                 break;
         }

+ 1 - 1
inc/classes/BxDolSearch.php

@@ -89,7 +89,7 @@ class BxDolSearch extends BxDol
     {
         $sCode = $this->_bDataProcessing ? [] : '';
 
-        if($this->_bLiveSearch && ($iAssistant = (int)getParam('sys_agents_live_search_assistant')) != 0) {
+        if($this->_bLiveSearch && ($iAssistant = BxDolAI::getAssistantForLiveSearch()) != 0) {
             $sKeyword = '';
             if(($sKeyword = bx_get('keyword')) !== false)
                 $sKeyword = bx_process_input($sKeyword);

+ 11 - 3
install/sql/system.sql

@@ -6413,15 +6413,19 @@ CREATE TABLE IF NOT EXISTS `sys_agents_models` (
   `params` text NOT NULL,
   `for_asst` tinyint(4) NOT NULL DEFAULT '0',
   `active` tinyint(4) NOT NULL DEFAULT '1',
+  `hidden` tinyint(4) NOT NULL DEFAULT '0',
   `class_name` varchar(128) NOT NULL default '',
   `class_file` varchar(255) NOT NULL  default '',
   PRIMARY KEY (`id`),
   UNIQUE KEY `name`(`name`)
 );
 
-INSERT INTO `sys_agents_models`(`name`, `title`, `key`, `params`, `for_asst`, `class_name`, `class_file`) VALUES
-('gpt-3.5-turbo', 'GPT-3.5-TURBO', '', '{"call":{"temperature":0.1}}', 0, 'BxDolAIModelGpt35', ''),
-('gpt-4o', 'GPT-4.O', '', '{"call":{},"assistants":{"event_init":"asst_HcEyaghqWZefkAyoEML40joY","event":"asst_wqaXtKjcsBKceMtJ2NxID2LT","scheduler_init":"asst_kEbDH1hUy2Y45nOKk9jaSTB8","scheduler":"asst_M6zOv4osQwZmRItaiYptjjOS","webhook_init":"asst_sSkOblPyXmYovS5IiEiVW17n","webhook":"asst_w7F3RiylJfdDEb9Eaa4RvO1q"}}', 1, 'BxDolAIModelGpt40', '');
+INSERT INTO `sys_agents_models`(`name`, `title`, `key`, `params`, `for_asst`, `active`, `hidden`, `class_name`, `class_file`) VALUES
+('gpt-3.5-turbo', 'GPT-3.5-TURBO', '', '{"call":{"temperature":0.1}}', 0, 1, 0, 'BxDolAIModelGpt35', '');
+
+INSERT INTO `sys_agents_models`(`name`, `title`, `key`, `params`, `for_asst`, `active`, `hidden`, `class_name`, `class_file`) VALUES
+('gpt-4o', 'GPT-4.O', '', '{"call":{},"assistants":{"event_init":"asst_HcEyaghqWZefkAyoEML40joY","event":"asst_wqaXtKjcsBKceMtJ2NxID2LT","scheduler_init":"asst_kEbDH1hUy2Y45nOKk9jaSTB8","scheduler":"asst_M6zOv4osQwZmRItaiYptjjOS","webhook_init":"asst_sSkOblPyXmYovS5IiEiVW17n","webhook":"asst_w7F3RiylJfdDEb9Eaa4RvO1q"}}', 1, 1, 0, 'BxDolAIModelGpt40', '');
+SET @iModelId = LAST_INSERT_ID();
 
 CREATE TABLE IF NOT EXISTS `sys_agents_automators` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
@@ -6565,10 +6569,14 @@ CREATE TABLE IF NOT EXISTS `sys_agents_assistants` (
   `ai_asst_id` varchar(64) NOT NULL DEFAULT '',
   `added` int(11) NOT NULL DEFAULT 0,
   `active` tinyint(4) NOT NULL DEFAULT 0,
+  `hidden` tinyint(4) NOT NULL DEFAULT 0,
   PRIMARY KEY (`id`),
   UNIQUE KEY `name`(`name`)
 );
 
+INSERT INTO `sys_agents_assistants`(`name`, `model_id`, `profile_id`, `description`, `prompt`, `ai_vs_id`, `ai_asst_id`, `added`, `active`, `hidden`) VALUES
+('UNA-Help', @iModelId, 0, 'UNA Help', '', 'vs_Rp3wwQWAeTIq711tsqkqFft6', 'asst_SbNl1hHkHGUmDdhNPvr8lwQN', 0, 1, 1);
+
 CREATE TABLE IF NOT EXISTS `sys_agents_assistants_files` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `name` varchar(128) NOT NULL DEFAULT '',

+ 12 - 0
studio/classes/BxDolStudioAgentsAssistants.php

@@ -13,6 +13,8 @@ class BxDolStudioAgentsAssistants extends BxTemplStudioGrid
 
     protected $_iProfileIdAi;
 
+    protected $_bShowHidden;
+
     public function __construct ($aOptions, $oTemplate = false)
     {
         parent::__construct ($aOptions, $oTemplate);
@@ -22,6 +24,16 @@ class BxDolStudioAgentsAssistants extends BxTemplStudioGrid
         $this->_oDb = new BxDolStudioAgentsQuery();
 
         $this->_iProfileIdAi = BxDolAI::getInstance()->getProfileId();
+
+        $this->_bShowHidden = false;
+    }
+
+    protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
+    {
+        if(!$this->_bShowHidden)
+            $this->_aOptions['source'] .= " AND `hidden`=0 ";
+
+        return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
     }
 }
 

+ 1 - 1
studio/classes/BxDolStudioPage.php

@@ -54,7 +54,7 @@ class BxDolStudioPage extends BxDol
         $this->sPageRssHelpUrl = 'http://feed.una.io/?section={page_name}';
         $this->iPageRssHelpLength = 5;
 
-        $this->iPageAssistantId = (int)getParam('sys_agents_studio_assistant');
+        $this->iPageAssistantId = BxDolAI::getAssistantForStudio();
         $this->iPageAssistantChatName = 'sys_studio_page_assistant';
 
         $this->_sTypesPreList = 'sys_studio_widget_types';

+ 2 - 2
studio/template/scripts/BxBaseStudioAgentsAssistants.php

@@ -282,8 +282,8 @@ class BxBaseStudioAgentsAssistants extends BxDolStudioAgentsAssistants
                     'name' => 'model_id',
                     'caption' => _t('_sys_agents_assistants_field_model_id'),
                     'info' => '',
-                    'value' => isset($aHelper['model_id']) ? $aHelper['model_id'] : BxDolAI::getInstance()->getDefaultModel(),
-                    'values' => $this->_oDb->getModelsBy(['sample' => 'all_pairs', 'for_asst' => 1]),
+                    'value' => isset($aHelper['model_id']) ? $aHelper['model_id'] : BxDolAI::getDefaultModel(),
+                    'values' => $this->_oDb->getModelsBy(['sample' => 'all_pairs', 'for_asst' => 1, 'active' => 1, 'hidden' => 0]),
                     'required' => '1',
                     'db' => [
                         'pass' => 'Int',

+ 2 - 2
studio/template/scripts/BxBaseStudioAgentsAutomators.php

@@ -522,8 +522,8 @@ class BxBaseStudioAgentsAutomators extends BxDolStudioAgentsAutomators
                     'name' => 'model_id',
                     'caption' => _t('_sys_agents_automators_field_model_id'),
                     'info' => '',
-                    'value' => isset($aAutomator['model_id']) ? $aAutomator['model_id'] : BxDolAI::getInstance()->getDefaultModel(),
-                    'values' => $this->_oDb->getModelsBy(['sample' => 'all_pairs']),
+                    'value' => isset($aAutomator['model_id']) ? $aAutomator['model_id'] : BxDolAI::getDefaultModel(),
+                    'values' => $this->_oDb->getModelsBy(['sample' => 'all_pairs', 'active' => 1, 'hidden' => 0]),
                     'required' => '1',
                     'checker' => [
                         'func' => 'Avail',

+ 2 - 2
studio/template/scripts/BxBaseStudioAgentsHelpers.php

@@ -226,8 +226,8 @@ class BxBaseStudioAgentsHelpers extends BxDolStudioAgentsHelpers
                     'name' => 'model_id',
                     'caption' => _t('_sys_agents_helpers_field_model_id'),
                     'info' => '',
-                    'value' => isset($aHelper['model_id']) ? $aHelper['model_id'] : BxDolAI::getInstance()->getDefaultModel(),
-                    'values' => $this->_oDb->getModelsBy(['sample' => 'all_pairs']),
+                    'value' => isset($aHelper['model_id']) ? $aHelper['model_id'] : BxDolAI::getDefaultModel(),
+                    'values' => $this->_oDb->getModelsBy(['sample' => 'all_pairs', 'active' => 1, 'hidden' => 0]),
                     'required' => '1',
                     'db' => [
                         'pass' => 'Int',

+ 1 - 1
template/scripts/BxBaseSearch.php

@@ -140,7 +140,7 @@ class BxBaseSearch extends BxDolSearch
             unset($aForm['inputs']['section']);
             unset($aForm['inputs']['search']);
             unset($aForm['inputs']['keyword']['caption']);
-            $aForm['inputs']['keyword']['attrs']['placeholder'] = _t('_sys_search' . (getParam('sys_agents_live_search_assistant') != '' ? '_or_ask' : '')  . '_placeholder');
+            $aForm['inputs']['keyword']['attrs']['placeholder'] = _t('_sys_search' . (BxDolAI::getAssistantForLiveSearch() ? '_or_ask' : '')  . '_placeholder');
             $aForm['inputs']['keyword']['attrs']['onkeydown'] = "return bx_search_on_type(event, $sJsParams);";
             $aForm['inputs']['keyword']['attrs']['onpaste'] = $aForm['inputs']['keyword']['attrs']['onkeydown'];
         }

+ 3 - 3
template/scripts/BxBaseServices.php

@@ -1319,7 +1319,7 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
 
     public function serviceGetOptionsAgentsModel()
     {
-        return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getModels();
+        return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getModels(['active' => true, 'hidden' => false]);
     }
 
     public function serviceGetOptionsAgentsProfile($bSelectOne = true)
@@ -1344,12 +1344,12 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
 
     public function serviceGetOptionsStudioAssistant()
     {
-        return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getAssistants();
+        return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getAssistants(['active' => true, 'hidden' => false]);
     }
 
     public function serviceGetOptionsLiveSearchAssistant()
     {
-        return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getAssistants();
+        return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getAssistants(['active' => true, 'hidden' => false]);
     }
 
     public function serviceRedirect($sUrl = false)