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

+ 13 - 2
install/sql/system.sql

@@ -5838,11 +5838,22 @@ INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
 ('sys_studio_agents_agents', 'bulk', 'delete', '_Delete', '', 0, 1, 1),
 ('sys_studio_agents_agents', 'single', 'manual', '_Run', 'play', 1, 0, 1),
-('sys_studio_agents_agents', 'single', 'edit', '_Edit', 'pencil-alt', 1, 0, 2),
-('sys_studio_agents_agents', 'single', 'wipe_chat_history', '_sys_agents_agents_act_wipe_chat_history', 'eraser', 1, 1, 3),
+('sys_studio_agents_agents', 'single', 'logs', '_Logs', 'file-alt', 1, 0, 2),
+('sys_studio_agents_agents', 'single', 'edit', '_Edit', 'pencil-alt', 1, 0, 3),
+('sys_studio_agents_agents', 'single', 'wipe_chat_history', '_sys_agents_agents_act_wipe_chat_history', 'eraser', 1, 1, 4),
 ('sys_studio_agents_agents', 'single', 'delete', '_Delete', 'remove', 1, 1, 5),
 ('sys_studio_agents_agents', 'independent', 'add', '_adm_form_btn_field_add', '', 0, 0, 1);
 
+-- GRID: Agents Logs
+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
+('sys_studio_agents_logs', 'Sql', 'SELECT * FROM `sys_logger` WHERE `channel` = ''sys_agents_{agent_id}'' ', 'sys_logger', 'id', 'id', '', '', 10, NULL, 'start', '', 'message,context', '', 'like', '', '', 128, 1, 1, 'BxTemplStudioAgentsLogs', '');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `hidden_on`, `order`) VALUES
+('sys_studio_agents_logs', 'level', '_Level', '5%', 0, 0, '', '', 10),
+('sys_studio_agents_logs', 'message', '_sys_agents_helpers_field_message', '15%', 0, 0, '', '', 20),
+('sys_studio_agents_logs', 'context', '_Context', '70%', 0, 0, '', '', 30),
+('sys_studio_agents_logs', 'created_at', '_Date', '10%', 0, 0, '', '', 40);
+
 -- GRID: Agents Tools
 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
 ('sys_studio_agents_tools', 'Sql', 'SELECT * FROM `sys_agents_tools` WHERE 1 ', 'sys_agents_tools', 'id', 'id', 'active', '', 20, NULL, 'start', '', 'title,type', '', 'like', '', '', 128, 1, 1, 'BxTemplStudioAgentsTools', '');

+ 3 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -66,7 +66,9 @@
 	<string name="_Incorrect Email"><![CDATA[Incorrect Email]]></string>
 	<string name="_Info"><![CDATA[Info]]></string>
 	<string name="_Keyword"><![CDATA[Keyword]]></string>
+	<string name="_Level"><![CDATA[Level]]></string>
         <string name="_lifetime"><![CDATA[lifetime]]></string>
+        <string name="_Logs"><![CDATA[Logs]]></string>
 	<string name="_LookinFemale"><![CDATA[Woman]]></string>
 	<string name="_LookinMale"><![CDATA[Man]]></string>
 	<string name="_MEMBERSHIP_EXPIRES_IN_DAYS"><![CDATA[expires: in {0} day(s)]]></string>
@@ -2497,6 +2499,7 @@
     <string name="_sys_agents_assistants_popup_add_knowledge"><![CDATA[Add Knowledge]]></string>
     <string name="_sys_agents_assistants_popup_ask"><![CDATA[Ask Assistant]]></string>
     <string name="_sys_agents_assistants_msg_knowledge_added"><![CDATA[Knowledge was added.]]></string>
+    <string name="_sys_agents_logs_popup"><![CDATA["{0}" agent logs]]></string>
     <string name="_sys_agents_err_failed"><![CDATA[Error occurred. Try to check log file for more info.]]></string>
 
   <string name="_sys_audit_content_info_popup_title"><![CDATA[Information]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -64,7 +64,9 @@
 	<string name="_Incorrect Email"><![CDATA[Введите правильный адрес электронной почты]]></string>
 	<string name="_Info"><![CDATA[Инфо]]></string>
 	<string name="_Keyword"><![CDATA[Ключевое слово]]></string>
+	<string name="_Level"><![CDATA[Уровень]]></string>
         <string name="_lifetime"><![CDATA[пожизненно]]></string>
+        <string name="_Logs"><![CDATA[Логи]]></string>
 	<string name="_LookinFemale"><![CDATA[Женщина]]></string>
 	<string name="_LookinMale"><![CDATA[Мужчина]]></string>
 	<string name="_MEMBERSHIP_EXPIRES_IN_DAYS"><![CDATA[окончание срока: через {0} дней]]></string>
@@ -2473,6 +2475,7 @@
         <string name="_sys_agents_assistants_popup_add_knowledge"><![CDATA[Добавить знания]]></string>
         <string name="_sys_agents_assistants_popup_ask"><![CDATA[Ask Assistant]]></string>
         <string name="_sys_agents_assistants_msg_knowledge_added"><![CDATA[Знания были добавлены.]]></string>
+        <string name="_sys_agents_logs_popup"><![CDATA[Логи агента "{0}"]]></string>
         <string name="_sys_agents_err_failed"><![CDATA[Произошла ошибка. Попробуйте проверить файл журнала для получения дополнительной информации.]]></string>
 
   <string name="_sys_audit_content_info_popup_title"><![CDATA[Информация]]></string>

+ 21 - 0
studio/template/scripts/BxBaseStudioAgentsAgents.php

@@ -187,6 +187,27 @@ class BxBaseStudioAgentsAgents extends BxDolStudioAgentsAgents
         return echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
     }
 
+    public function performActionLogs()
+    {
+        $iId = $this->_getId();
+        $aAgent = BxDolAiQuery::getAgentObject($iId);
+        if (!$aAgent) {
+            echoJson(['msg' => _t('_sys_txt_error_occured')]);
+            return;
+        }
+
+        $oGrid = BxDolGrid::getObjectInstance('sys_studio_agents_logs');
+        $oGrid->addMarkers(['agent_id' => $iId]);
+        $oGrid->setBrowseParams(['agent_id' => $iId]);
+        $sGrid = $oGrid->getCode();
+
+        $sContent = BxTemplStudioFunctions::getInstance()->popupBox('popup_files_' . $iId, _t('_sys_agents_logs_popup', $aAgent['name']), $this->_oTemplate->parseHtmlByName('agents_popup_grid.html', [
+            'grid' => $sGrid,
+        ]));
+
+        return echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
+    }
+
     protected function _getCellSwitcher ($mixedValue, $sKey, $aField, $aRow)
     {
         // if(empty($aRow['code']) || $aRow['status'] != BX_DOL_AI_AUTOMATOR_STATUS_READY)

+ 85 - 0
studio/template/scripts/BxBaseStudioAgentsLogs.php

@@ -0,0 +1,85 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaView UNA Studio Representation classes
+ * @ingroup     UnaStudio
+ * @{
+ */
+
+class BxBaseStudioAgentsLogs extends BxDolStudioAgentsGrid
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        parent::__construct ($aOptions, $oTemplate);
+        $this->addMarkers($this->_aBrowseParams);
+    }
+
+    protected function _getCellLevel ($mixedValue, $sKey, $aField, $aRow) 
+    {
+        switch ($mixedValue) {
+            case 'info':
+                $mixedValue = '<span title="Info">ℹ️</span>';
+                break;
+            case 'error':
+                $mixedValue = '<span title="Error">❗️</span>';
+                break;
+            default:
+                $mixedValue = '<span title="' . bx_html_attribute($mixedValue) . '">⚠️</span>';
+                break;
+        }        
+        return parent::_getCellDefault ($mixedValue, $sKey, $aField, $aRow);
+    } 
+
+    protected function _getCellMessage ($mixedValue, $sKey, $aField, $aRow) 
+    {
+        switch ($mixedValue) {
+            case 'workflow-end':
+                $mixedValue = '⏹️ ' . $mixedValue;
+                break;
+            case 'workflow-start':
+                $mixedValue = '▶️ ' . $mixedValue;
+                break;
+            case 'error':
+                $mixedValue = '❗️ ' . $mixedValue;
+                break;
+            case 'tool-calling':
+            case 'tool-called':
+                $mixedValue = '🛠️ ' . $mixedValue;
+                break;
+            default:
+                if (preg_match('/^message-/', $mixedValue)) {
+                    $mixedValue = '💬 ' . $mixedValue;
+                } elseif (preg_match('/^rag-/', $mixedValue)) {
+                    $mixedValue = '🔍 ' . $mixedValue;
+                }
+                elseif (preg_match('/^inference-/', $mixedValue)) {
+                    $mixedValue = '⚛️ ' . $mixedValue;
+                }
+                break;
+        }        
+        return parent::_getCellDefault ($mixedValue, $sKey, $aField, $aRow);
+    } 
+
+    protected function _getCellContext ($mixedValue, $sKey, $aField, $aRow) 
+    {
+        $sPopupString = '<pre>' . $mixedValue . '</pre>';
+        /*
+        if (preg_match('/^\[message\]\s{/', $mixedValue)) {
+            // $sPopupString = json_encode(json_decode(preg_replace('/^\[message\]\s/', '', $mixedValue), true), JSON_PRETTY_PRINT);
+            $sPopupString = preg_replace('/^\[message\]\s/', '', $mixedValue);
+            //$sPopupString = json_last_error_msg();//json_encode(json_decode(preg_replace('/^\[message\]\s/', '', $mixedValue), true), JSON_PRETTY_PRINT);
+        } 
+        */
+        $mixedValue = BxTemplFunctions::getInstance()->getStringWithLimitedLength($mixedValue, 55, true, true, $sPopupString);
+        return parent::_getCellDefault ($mixedValue, $sKey, $aField, $aRow);
+    } 
+
+    protected function _getCellCreatedAt ($mixedValue, $sKey, $aField, $aRow) 
+    {
+        return parent::_getCellDefault ($mixedValue, $sKey, $aField, $aRow);
+    } 
+}
+
+/** @} */

+ 19 - 0
studio/template/scripts_templ/BxTemplStudioAgentsLogs.php

@@ -0,0 +1,19 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaStudioView UNA Studio Representation classes
+ * @ingroup     UnaStudio
+ * @{
+ */
+
+class BxTemplStudioAgentsLogs extends BxBaseStudioAgentsLogs
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 2 - 2
template/scripts/BxBaseFunctions.php

@@ -346,7 +346,7 @@ class BxBaseFunctions extends BxDolFactory implements iBxDolSingleton
     /**
      * functions for limiting maximal string length
      */
-    function getStringWithLimitedLength($mixedString, $iWidth = 45, $isPopupOnOverflow = false, $bReturnString = true)
+    function getStringWithLimitedLength($mixedString, $iWidth = 45, $isPopupOnOverflow = false, $bReturnString = true, $sPopupString = null)
     {
         if(is_array($mixedString))
             list($sStrPlane, $sStrOriginal) = $mixedString;
@@ -386,7 +386,7 @@ class BxBaseFunctions extends BxDolFactory implements iBxDolSingleton
         // add button width popup
         $sId = 'bx-str-limit-' . rand(1, PHP_INT_MAX);
         $sPopup = '<a class="bx-str-limit pl-2" href="javascript:void(0)" onclick="$(\'#' . $sId . '\').dolPopup({pointer:{el:$(this), offset:\'10 1\'}})"><i class="sys-icon ellipsis-h"></i></a>';
-        $sPopup .= BxTemplFunctions::getInstance()->transBox($sId, '<div class="bx-def-padding">' . $sStrOriginal . '</div>', true);
+        $sPopup .= BxTemplFunctions::getInstance()->transBox($sId, '<div class="bx-def-padding">' . ($sPopupString ?? $sStrOriginal) . '</div>', true);
 
         return $bReturnString ? $sResult . $sPopup : [$sResult, $sPopup];
     }