Aleksandr Trofimov 7 месяцев назад
Родитель
Сommit
c2f58a0415

+ 2 - 0
inc/classes/BxDolAI.php

@@ -121,6 +121,8 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
         $aParamsDb = ['sample' => 'all_pairs'];
         if(isset($aParams['active']))
             $aParamsDb['active'] = $aParams['active'] === true ? 1 : 0;
+        if(isset($aParams['capabilities']))
+            $aParamsDb['capabilities'] = $aParams['capabilities'];
 
         return $aModel = $this->_oDb->getModelsBy($aParamsDb);
     }

+ 6 - 0
inc/classes/BxDolAIQuery.php

@@ -108,6 +108,12 @@ class BxDolAIQuery extends BxDolDb
                     $sWhereClause .= " AND `active`=:active";
                 }
 
+                if(isset($aParams['capabilities'])) {
+                    $aMethod['params'][3]['capabilities'] = $aParams['capabilities'];
+
+                    $sWhereClause .= " AND `capabilities` = :capabilities";
+                }
+
                 break;
         }
 

+ 6 - 5
install/sql/system.sql

@@ -5785,16 +5785,15 @@ INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable
 ('sys_studio_agents_vector_store', 'switcher', '_sys_active', '10%', 0, 0, '', '', 10),
 ('sys_studio_agents_vector_store', 'title', '_Title', '20%', 0, 0, '', '', 20),
 ('sys_studio_agents_vector_store', 'type', '_adm_form_txt_fields_type', '10%', 0, 0, '', '', 30),
-('sys_studio_agents_vector_store', 'topk', '_sys_agents_vector_store_txt_topk', '5%', 0, 0, '', '', 40),
+('sys_studio_agents_vector_store', 'embedding_provider_id', '_sys_agents_vector_store_txt_embedding_provider', '5%', 0, 0, '', '', 40),
 ('sys_studio_agents_vector_store', 'files_num', '_sys_agents_vector_store_txt_files_num', '5%', 0, 0, '', '', 50),
 ('sys_studio_agents_vector_store', 'actions', '', '25%', 0, 0, '', '', 60);
 
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `active`, `order`) VALUES
 ('sys_studio_agents_vector_store', 'single', 'add_data', '_sys_uploader_simple_attach_one_more_file', 'plus', 1, 0, 1, 10),
-('sys_studio_agents_vector_store', 'single', 'files', '_adm_lmi_cpt_files', 'folder', 1, 0, 1, 20),
-('sys_studio_agents_vector_store', 'single', 'edit', '_Edit', 'pencil-alt', 1, 0, 1, 30),
-('sys_studio_agents_vector_store', 'single', 'delete', '_Delete', 'remove', 1, 1, 1, 40),
-('sys_studio_agents_vector_store', 'single', 'duplicate', '_Duplicate', 'copy', 1, 0, 1, 50);
+('sys_studio_agents_vector_store', 'single', 'edit', '_Edit', 'pencil-alt', 1, 0, 1, 20),
+('sys_studio_agents_vector_store', 'single', 'delete', '_Delete', 'remove', 1, 1, 1, 30),
+('sys_studio_agents_vector_store', 'single', 'duplicate', '_Duplicate', 'copy', 1, 0, 1, 40);
 
 -- GRID: Agents Vector Store Data
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `responsive`, `show_total_count`, `override_class_name`, `override_class_file`) VALUES
@@ -7090,8 +7089,10 @@ CREATE TABLE IF NOT EXISTS `sys_agents_vector_store_data` (
 
 CREATE TABLE IF NOT EXISTS `sys_agents_vector_store` (
   `id` int(11) NOT NULL AUTO_INCREMENT,  
+  `embedding_provider_id` int(11) NOT NULL,
   `type` varchar(128) NOT NULL,
   `title` varchar(255) NOT NULL DEFAULT '',
+  `docs` text DEFAULT NULL,
   `topk` tinyint(4) DEFAULT 4,
   `params` text DEFAULT NULL,
   `params_user` text DEFAULT NULL,

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

@@ -56,7 +56,7 @@ class BxBaseStudioAgentsModels extends BxDolStudioAgentsModels
         $oForm->initChecker();
 
         if($oForm->isSubmittedAndValid()) {
-            $aValsToAdd = [];
+            $aValsToAdd = ['changed' => time()];
             
             if($oForm->update($iId, $aValsToAdd) !== false)
                 $aRes = ['grid' => $this->getCode(false), 'blink' => $iId];
@@ -97,7 +97,7 @@ class BxBaseStudioAgentsModels extends BxDolStudioAgentsModels
 
         $oParsedown = new Parsedown();
         $oParsedown->setSafeMode(false);
-        $sDocs = $oParsedown->text($aModel['docs']);
+        $sDocs = $oParsedown->text($aModel['docs']);        
 
         $aForm = array(
             'form_attrs' => array(

+ 41 - 3
studio/template/scripts/BxBaseStudioAgentsVectorStore.php

@@ -90,7 +90,7 @@ class BxBaseStudioAgentsVectorStore extends BxDolStudioAgentsVectorStore
                     $iFilesAdded++;
                 }
             }
-            return echoJson(['msg' => _t('_sys_agents_vector_store_data_queued', $iFilesAdded) . ' / num:' . $iFilesAdded]);
+            return echoJson(['msg' => _t('_sys_agents_vector_store_data_queued', $iFilesAdded)]);
 
             if($oForm->add($iId) === false)
                 return echoJson(['msg' => _t('_sys_txt_error_occured')]);
@@ -168,6 +168,16 @@ class BxBaseStudioAgentsVectorStore extends BxDolStudioAgentsVectorStore
         $data = json_decode($aVectorStore['params_user'], true);
         $aVectorStore['params_user'] = json_encode($data, JSON_PRETTY_PRINT);
 
+        $oParsedown = new Parsedown();
+        $oParsedown->setSafeMode(false);
+        $sDocs = $oParsedown->text($aVectorStore['docs']);
+
+        $aEmbeddingProviders = ['' => _t('_sys_please_select')];
+        $a = BxDolAI::getInstance()->getModels(['capabilities' => 'embeddings', 'active' => true]);
+        foreach ($a as $k => $v) {
+            $aEmbeddingProviders[$k] = $v;
+        }
+
         return [
             'form_attrs' => [
                 'id' => 'bx_std_agents_helpers_' . $sAction,
@@ -182,10 +192,28 @@ class BxBaseStudioAgentsVectorStore extends BxDolStudioAgentsVectorStore
                 ),
             ),
             'inputs' => [
+                'docs' => [
+                    'type' => 'custom',
+                    'name' => 'docs',
+                    'caption' => '',
+                    'content' => $sDocs,
+                ],
+                'embedding_provider_id' => [
+                    'type' => 'select',
+                    'name' => 'embedding_provider_id',
+                    'caption' => '_sys_agents_vector_store_field_embedding_provider_id',
+                    'info' => '_sys_agents_vector_store_field_embedding_provider_id_info',
+                    'value' => !empty($aVectorStore['embedding_provider_id']) ? $aVectorStore['embedding_provider_id'] : '',
+                    'values' => $aEmbeddingProviders,
+                    'db' => [
+                        'pass' => 'Int'
+                    ]
+                ],
                 'topk' => [
                     'type' => 'text',
                     'name' => 'topk',
                     'caption' => '_sys_agents_vector_store_field_topk',
+                    'info' => '_sys_agents_vector_store_field_topk_info',
                     'required' => true,
                     'value' => !empty($aVectorStore['topk']) ? $aVectorStore['topk'] : '',
                     'db' => [
@@ -196,6 +224,7 @@ class BxBaseStudioAgentsVectorStore extends BxDolStudioAgentsVectorStore
                     'type' => 'textarea',
                     'name' => 'params_user',
                     'caption' => '_sys_agents_vector_store_field_params',
+                    'info' => '_sys_agents_vector_store_field_params_info',
                     'required' => false,
                     'value' => !empty($aVectorStore['params_user']) ? $aVectorStore['params_user'] : '',
                     'checker' => [
@@ -320,10 +349,19 @@ class BxBaseStudioAgentsVectorStore extends BxDolStudioAgentsVectorStore
         return $html->getText();
     }
 
+    protected function _getCellEmbeddingProviderId($mixedValue, $sKey, $aField, $aRow) 
+    {
+        $aProvider = $this->_oDb->getModelsBy(['sample' => 'id', 'id' => $mixedValue]);
+        $s = !empty($aProvider) ? $aProvider['title'] : _t('_undefined');
+        return parent::_getCellDefault($s, $sKey, $aField, $aRow);
+    }
+    
     protected function _getCellFilesNum($mixedValue, $sKey, $aField, $aRow)
     {
-        $mixedValue = $this->_oDb->getVectorStoreDataNum($aRow['id']);
-        return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+        $s = $this->_oDb->getVectorStoreDataNum($aRow['id']);
+        if ((int)$s !== 0)
+            $s = '<a href="javascript:void(0)" onclick="glGrids.' . $this->_sObject . '.actionWithId (' . $aRow['id'] . ', \'files\', {}, \'\', false, 0);">' . $s . '</a>';
+        return parent::_getCellDefault($s, $sKey, $aField, $aRow);
     }
     
     protected function _getActionDelete ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())