BxDolAIToolFactory.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaCore UNA Core
  7. * @{
  8. */
  9. class BxDolAIToolFactory extends BxDolFactory
  10. {
  11. public static function getToolInstance(int $iId): NeuronAI\Tools\ToolInterface
  12. {
  13. if (isset($GLOBALS['bxDolClasses'][__CLASS__ . '_AiAgentTool_' . $iId]))
  14. return $GLOBALS['bxDolClasses'][__CLASS__ . '_AiAgentTool_' . $iId];
  15. $a = BxDolAiQuery::getToolObject($iId);
  16. if (!$a) {
  17. bx_log('sys_agents', "Tool with id {$iId} not found", BX_LOG_ERR);
  18. throw new Exception("Tool with id {$iId} not found");
  19. }
  20. $aParametersSystem = !empty($a['params']) ? json_decode($a['params'], true) : [];
  21. $aParametersUser = !empty($a['params_user']) ? json_decode($a['params_user'], true) : [];
  22. $aParameters = array_merge($aParametersSystem, $aParametersUser);
  23. switch($a['type']) {
  24. case 'mysql_schema':
  25. $o = NeuronAI\Tools\Toolkits\MySQL\MySQLSchemaTool::make(
  26. pdo: BxDolDb::getInstance()->getLink(),
  27. tables: $aParameters['tables'] ?? null
  28. );
  29. break;
  30. case 'mysql_select':
  31. $o = NeuronAI\Tools\Toolkits\MySQL\MySQLSelectTool::make(
  32. pdo: BxDolDb::getInstance()->getLink(),
  33. );
  34. break;
  35. case 'mysql_write':
  36. $o = NeuronAI\Tools\Toolkits\MySQL\MySQLWriteTool::make(
  37. pdo: BxDolDb::getInstance()->getLink(),
  38. );
  39. break;
  40. case 'tavily_web_search':
  41. $o = NeuronAI\Tools\Toolkits\Tavily\TavilySearchTool::make(
  42. key: $aParameters['key'] ?? ''
  43. );
  44. break;
  45. case 'tavily_extract':
  46. $o = NeuronAI\Tools\Toolkits\Tavily\TavilyExtractTool::make(
  47. key: $aParameters['key'] ?? ''
  48. );
  49. break;
  50. case 'jina_web_search':
  51. $o = NeuronAI\Tools\Toolkits\Jina\JinaWebSearch::make(
  52. key: $aParameters['key'] ?? ''
  53. );
  54. break;
  55. case 'jina_url_reader':
  56. $o = NeuronAI\Tools\Toolkits\Jina\JinaUrlReader::make(
  57. key: $aParameters['key'] ?? ''
  58. );
  59. break;
  60. default:
  61. if (!empty($a['class_name'])) {
  62. if (!empty($a['class_file']))
  63. require_once(BX_DIRECTORY_PATH_ROOT . $a['class_file']);
  64. $o = $a['class_name']::make();
  65. }
  66. else {
  67. bx_log('sys_agents', "Tool type {$a['type']} is not supported", BX_LOG_ERR);
  68. throw new Exception("Tool type {$a['type']} is not supported");
  69. }
  70. }
  71. $GLOBALS['bxDolClasses'][__CLASS__ . '_AiAgentTool_' . $iId] = $o;
  72. return $o;
  73. }
  74. }