This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 5dcc2a30c8 [type:feat] ai proxy selector config (#5942)
5dcc2a30c8 is described below
commit 5dcc2a30c81b36068751c19067cb76021519e3c3
Author: aias00 <[email protected]>
AuthorDate: Thu Feb 27 12:06:08 2025 +0800
[type:feat] ai proxy selector config (#5942)
* [type:feature] ai proxy selector config
* [type:feature] ai proxy selector config
* [type:feature] ai proxy selector config
* [type:feature] ai proxy selector config / refactor model invoke
* [type:feature] ai proxy selector config / refactor model invoke
* [type:feature] ai proxy selector config / refactor model invoke
---
db/init/mysql/schema.sql | 33 ++++-
db/init/ob/schema.sql | 34 ++++-
db/init/og/create-table.sql | 33 ++++-
db/init/oracle/schema.sql | 86 +++++++++++-
db/init/pg/create-table.sql | 32 ++++-
db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql | 35 ++++-
db/upgrade/2.7.0-upgrade-2.7.1-ob.sql | 35 ++++-
db/upgrade/2.7.0-upgrade-2.7.1-og.sql | 35 ++++-
db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql | 88 +++++++++++-
db/upgrade/2.7.0-upgrade-2.7.1-pg.sql | 35 ++++-
.../common/dto/convert/rule/AiProxyHandle.java | 102 ++++++++------
.../org/apache/shenyu/common/enums/PluginEnum.java | 2 +-
.../apache/shenyu/common/enums/RpcTypeEnum.java | 7 +-
.../shenyu/common/utils/PluginNameAdapterTest.java | 3 +-
.../shenyu/plugin/ai/proxy/AiProxyPlugin.java | 91 ++++++++----
.../ai/proxy/handler/AiProxyPluginHandler.java | 25 ++--
.../shenyu/plugin/ai/proxy/strategy/AiModel.java | 15 +-
.../plugin/ai/proxy/strategy/openai/OpenAI.java | 152 +++++----------------
.../org/apache/shenyu/plugin/api/ShenyuPlugin.java | 2 +-
.../strategy/NettyClientMessageWriter.java | 2 +-
.../response/strategy/WebClientMessageWriter.java | 2 +-
.../ai/proxy/AiProxyPluginConfiguration.java | 6 +-
22 files changed, 637 insertions(+), 218 deletions(-)
diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql
index cfbecafc5d..4059214b5d 100644
--- a/db/init/mysql/schema.sql
+++ b/db/init/mysql/schema.sql
@@ -860,6 +860,17 @@ INSERT INTO `permission` VALUES ('1697146375754129471',
'1346358560427216896', '
INSERT INTO `permission` VALUES ('1697146617543248162', '1346358560427216896',
'1844025989214130176', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
INSERT INTO `permission` VALUES ('1697146860569542740', '1346358560427216896',
'1844026099075534848', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542741', '1346358560427216896',
'1844026099075534849', '2023-08-31 06:59:01', '2023-08-31 06:59:01');
+INSERT INTO `permission` VALUES ('1697146860569542742', '1346358560427216896',
'1844026099075534850', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542743', '1346358560427216896',
'1844026099075534851', '2023-08-31 07:14:26', '2023-08-31 07:14:26');
+INSERT INTO `permission` VALUES ('1697146860569542744', '1346358560427216896',
'1844026099075534852', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542745', '1346358560427216896',
'1844026099075534853', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542746', '1346358560427216896',
'1844026099075534854', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542747', '1346358560427216896',
'1844026099075534855', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542748', '1346358560427216896',
'1844026099075534856', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542749', '1346358560427216896',
'1844026099075534857', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542750', '1346358560427216896',
'1844026099075534858', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+
-- ----------------------------
-- Table structure for plugin
@@ -923,7 +934,7 @@ INSERT INTO `plugin` VALUES ('42', 'tcp', NULL, 'Proxy',
320, 1, '2023-05-30 18:
INSERT INTO `plugin` VALUES ('43', 'loggingHuaweiLts',
'{\"totalSizeInBytes\":\"104857600\",\"maxBlockMs\":\"0\",\"ioThreadCount\":\"1\",\"batchSizeThresholdInBytes\":\"524288\",\"batchCountThreshold\":\"4096\",\"lingerMs\":\"2000\",\"retries\":\"100\",\"baseRetryBackoffMs\":\"100\",\"maxRetryBackoffMs\":\"100\",\"enableLocalTest\":\"true\",\"setGiveUpExtraLongSingleLog\":\"false\"}',
'Logging', 177, 0, '2023-07-05 14:03:53.686', '2023-07-06 12:42:07.234', NULL);
INSERT INTO `plugin` VALUES ('44', 'basicAuth',
'{\"defaultHandleJson\":\"{\\\"authorization\\\":\\\"test:test123\\\"}\"}',
'Authentication', 150, 0, '2022-07-24 19:00:00', '2022-07-24 19:00:00', null);
INSERT INTO `plugin` VALUES ('45', 'loggingRabbitMQ',
'{\"host\":\"127.0.0.1\",\"port\":5672,\"password\":\"admin\",\"username\":\"admin\",\"exchangeName\":\"exchange.logging.plugin\",\"queueName\":\"queue.logging.plugin\",\"routingKey\":\"topic.logging\",\"virtualHost\":\"/\",\"exchangeType\":\"direct\",\"durable\":\"true\",\"exclusive\":\"false\",\"autoDelete\":\"false\"}',
'Logging', 171, 0, '2023-11-06 15:49:56.454', '2023-11-10 10:40:58.447', NULL);
-INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
-- ----------------------------
-- Table structure for plugin_handle
@@ -1311,6 +1322,15 @@ INSERT INTO `plugin_handle` VALUES
('1722804548510507038', '50', 'maxTokens', 'm
INSERT INTO `plugin_handle` VALUES ('1722804548510507039', '50', 'stream',
'stream', 3, 3, 7, '{\"defaultValue\":\"false\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
INSERT INTO `plugin_handle` VALUES ('1722804548510507040', '50', 'prompt',
'prompt', 2, 3, 8, '{\"required\":\"0\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507041', '50', 'provider',
'provider', 3, 1, 0,
'{\"required\":\"1\",\"defaultValue\":\"OpenAI\",\"placeholder\":\"provider\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507042', '50', 'baseUrl',
'baseUrl', 2, 1, 1, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507043', '50', 'model',
'model', 2, 1, 2, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507044', '50', 'apiKey',
'apiKey', 2, 1, 3, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{\"required\":\"0\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507046', '50', 'maxTokens',
'maxTokens', 2, 1, 5, '{\"required\":\"0\",\"rule\":\"\",
\"placeholder\":\"optional,0,0.01~1\"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507047', '50', 'stream',
'stream', 3, 1, 6, '{\"defaultValue\":\"false\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507048', '50', 'prompt',
'prompt', 2, 1, 7, '{\"required\":\"0\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+
-- ----------------------------
-- Table structure for resource
-- ----------------------------
@@ -1856,6 +1876,17 @@ INSERT INTO `resource` VALUES ('1844025850382667776',
'1844015648095666176', 'SH
INSERT INTO `resource` VALUES ('1844025989214130176', '1844015648095666176',
'SHENYU.BUTTON.SYSTEM.DELETE', '', '', '', 2, 0, 'delete', 1, 0,
'system:scale:delete', 1, '2024-10-09 22:43:50.831000', '2024-10-09
22:43:50.831705');
INSERT INTO `resource` VALUES ('1844026099075534848', '1844015648095666176',
'SHENYU.BUTTON.SYSTEM.EDIT', '', '', '', 2, 0, 'edit', 1, 0,
'system:scale:edit', 1, '2024-10-09 22:44:17.024000', '2024-10-09
22:44:17.024555');
+INSERT INTO `resource` VALUES ('1844026099075534849', '1346775491550474240',
'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0, 'pic-center', 0, 0, '',
1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534850', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534851', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534852', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534853', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534854', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534855', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534856', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534857', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534858', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+
-- ----------------------------
-- Table structure for role
-- ----------------------------
diff --git a/db/init/ob/schema.sql b/db/init/ob/schema.sql
index a90a39bb6f..6842d16f41 100644
--- a/db/init/ob/schema.sql
+++ b/db/init/ob/schema.sql
@@ -854,6 +854,17 @@ INSERT INTO `permission` VALUES
('1792779493541343249','1346358560427216896','17
INSERT INTO `permission` VALUES
('1792779493541343250','1346358560427216896','1792749362441646348', '2022-05-25
18:02:58', '2022-05-25 18:02:58');
INSERT INTO `permission` VALUES
('1792779493541343251','1346358560427216896','1792749362441646349', '2022-05-25
18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `permission` VALUES ('1697146860569542741', '1346358560427216896',
'1844026099075534849', '2023-08-31 06:59:01', '2023-08-31 06:59:01');
+INSERT INTO `permission` VALUES ('1697146860569542742', '1346358560427216896',
'1844026099075534850', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542743', '1346358560427216896',
'1844026099075534851', '2023-08-31 07:14:26', '2023-08-31 07:14:26');
+INSERT INTO `permission` VALUES ('1697146860569542744', '1346358560427216896',
'1844026099075534852', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542745', '1346358560427216896',
'1844026099075534853', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542746', '1346358560427216896',
'1844026099075534854', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542747', '1346358560427216896',
'1844026099075534855', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542748', '1346358560427216896',
'1844026099075534856', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542749', '1346358560427216896',
'1844026099075534857', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542750', '1346358560427216896',
'1844026099075534858', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+
-- ----------------------------
-- Table structure for plugin
-- ----------------------------
@@ -916,7 +927,7 @@ INSERT INTO `plugin` VALUES ('42', 'tcp', NULL, 'Proxy',
320, 1, '2023-05-30 18:
INSERT INTO `plugin` VALUES ('43', 'loggingHuaweiLts',
'{\"totalSizeInBytes\":\"104857600\",\"maxBlockMs\":\"0\",\"ioThreadCount\":\"1\",\"batchSizeThresholdInBytes\":\"524288\",\"batchCountThreshold\":\"4096\",\"lingerMs\":\"2000\",\"retries\":\"100\",\"baseRetryBackoffMs\":\"100\",\"maxRetryBackoffMs\":\"100\",\"enableLocalTest\":\"true\",\"setGiveUpExtraLongSingleLog\":\"false\"}',
'Logging', 177, 0, '2023-07-05 14:03:53.686', '2023-07-06 12:42:07.234', NULL);
INSERT INTO `plugin` VALUES ('44', 'basicAuth',
'{\"defaultHandleJson\":\"{\\\"authorization\\\":\\\"test:test123\\\"}\"}',
'Authentication', 150, 0, '2022-07-24 19:00:00', '2022-07-24 19:00:00', null);
INSERT INTO `plugin` VALUES ('45', 'loggingRabbitMQ',
'{\"host\":\"127.0.0.1\",\"port\":5672,\"password\":\"admin\",\"username\":\"admin\",\"exchangeName\":\"exchange.logging.plugin\",\"queueName\":\"queue.logging.plugin\",\"routingKey\":\"topic.logging\",\"virtualHost\":\"/\",\"exchangeType\":\"direct\",\"durable\":\"true\",\"exclusive\":\"false\",\"autoDelete\":\"false\"}',
'Logging', 171, 0, '2023-11-06 15:49:56.454', '2023-11-10 10:40:58.447', NULL);
-INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
-- ----------------------------
-- Table structure for plugin_handle
@@ -1303,6 +1314,16 @@ INSERT INTO `plugin_handle` VALUES
('1722804548510507037', '50', 'temperature',
INSERT INTO `plugin_handle` VALUES ('1722804548510507038', '50', 'maxTokens',
'maxTokens', 2, 3, 6, '{\"required\":\"0\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
INSERT INTO `plugin_handle` VALUES ('1722804548510507039', '50', 'stream',
'stream', 3, 3, 7, '{\"defaultValue\":\"false\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
INSERT INTO `plugin_handle` VALUES ('1722804548510507040', '50', 'prompt',
'prompt', 2, 3, 8, '{\"required\":\"0\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+
+INSERT INTO `plugin_handle` VALUES ('1722804548510507041', '50', 'provider',
'provider', 3, 1, 0,
'{\"required\":\"1\",\"defaultValue\":\"OpenAI\",\"placeholder\":\"provider\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507042', '50', 'baseUrl',
'baseUrl', 2, 1, 1, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507043', '50', 'model',
'model', 2, 1, 2, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507044', '50', 'apiKey',
'apiKey', 2, 1, 3, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{\"required\":\"0\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507046', '50', 'maxTokens',
'maxTokens', 2, 1, 5, '{\"required\":\"0\",\"rule\":\"\",
\"placeholder\":\"optional,0,0.01~1\"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507047', '50', 'stream',
'stream', 3, 1, 6, '{\"defaultValue\":\"false\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507048', '50', 'prompt',
'prompt', 2, 1, 7, '{\"required\":\"0\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+
-- ----------------------------
-- Table structure for resource
-- ----------------------------
@@ -1842,6 +1863,17 @@ INSERT INTO `resource` VALUES ('1792749362441646347',
'1792749362361954333', 'SH
INSERT INTO `resource` VALUES ('1792749362441646348', '1792749362361954333',
'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:mockRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
INSERT INTO `resource` VALUES ('1792749362441646349', '1792749362361954333',
'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0, '', 1, 0,
'plugin:mock:modify', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534849', '1346775491550474240',
'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0, 'pic-center', 0, 0, '',
1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534850', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534851', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534852', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534853', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534854', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534855', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534856', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534857', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534858', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+
-- ----------------------------
-- Table structure for role
-- ----------------------------
diff --git a/db/init/og/create-table.sql b/db/init/og/create-table.sql
index 975bd8051f..40e476d58d 100644
--- a/db/init/og/create-table.sql
+++ b/db/init/og/create-table.sql
@@ -988,7 +988,7 @@ INSERT INTO "public"."plugin" VALUES ('42', 'tcp', null,
'Proxy', 320, 1, '2022-
INSERT INTO "public"."plugin" VALUES ('43', 'loggingHuaweiLts', '{
"totalSizeInBytes":
"104857600","maxBlockMs":"0","ioThreadCount":"1","batchSizeThresholdInBytes":"524288","batchCountThreshold":"4096","lingerMs":"2000","retries":"100","baseRetryBackoffMs":"100","maxRetryBackoffMs":"100","enableLocalTest":"true","setGiveUpExtraLongSingleLog":"false"}',
'Logging', 177, 0, '2023-07-05 14:03:53', '2023-07-06 12:42:07', null);
INSERT INTO "public"."plugin" VALUES ('44', 'basicAuth',
'{"defaultHandleJson":"{"authorization":"test:test123"}"}', 'Authentication',
150, 0, '2022-07-24 19:00:00', '2022-07-24 19:00:00', null);
INSERT INTO "public"."plugin" VALUES ('45', 'loggingRabbitMQ',
'{"host":"127.0.0.1","port":5672,"password":"admin","username":"admin","exchangeName":"exchange.logging.plugin","queueName":"queue.logging.plugin","routingKey":"topic.logging","virtualHost":"/","exchangeType":"direct","durable":"true","exclusive":"false","autoDelete":"false"}',
'Logging', 171, 0, '2023-11-06 15:49:56.454', '2023-11-10 10:40:58.447', NULL);
-INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
-- ----------------------------
-- Table structure for plugin_handle
@@ -2815,3 +2815,34 @@ COMMENT ON COLUMN
"public"."namespace_user_rel"."user_id" IS 'user_id';
COMMENT ON COLUMN "public"."namespace_user_rel"."date_created" IS 'create
time';
COMMENT ON COLUMN "public"."namespace_user_rel"."date_updated" IS 'update
time';
+
+INSERT INTO "public"."resource" VALUES ('1844026099075534849',
'1346775491550474240', 'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0,
'pic-center', 0, 0, '', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534850',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534851',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534852',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534853',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2,
0, '', 1, 0, 'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58',
'2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534854',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534855',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534856',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534857',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534858',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+
+INSERT INTO "public"."permission" VALUES ('1697146860569542741',
'1346358560427216896', '1844026099075534849', '2023-08-31 06:59:01',
'2023-08-31 06:59:01');
+INSERT INTO "public"."permission" VALUES ('1697146860569542742',
'1346358560427216896', '1844026099075534850', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542743',
'1346358560427216896', '1844026099075534851', '2023-08-31 07:14:26',
'2023-08-31 07:14:26');
+INSERT INTO "public"."permission" VALUES ('1697146860569542744',
'1346358560427216896', '1844026099075534852', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542745',
'1346358560427216896', '1844026099075534853', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542746',
'1346358560427216896', '1844026099075534854', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542747',
'1346358560427216896', '1844026099075534855', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542748',
'1346358560427216896', '1844026099075534856', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542749',
'1346358560427216896', '1844026099075534857', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542750',
'1346358560427216896', '1844026099075534858', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507041', '50',
'provider', 'provider', 3, 1, 0,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507042', '50',
'baseUrl', 'baseUrl', 2, 1, 1, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507043', '50',
'model', 'model', 2, 1, 2, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507044', '50',
'apiKey', 'apiKey', 2, 1, 3, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{"required":"0","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507046', '50',
'maxTokens', 'maxTokens', 2, 1, 5, '{"required":"0","rule":"",
"placeholder":"optional,0,0.01~1"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507047', '50',
'stream', 'stream', 3, 1, 6, '{"defaultValue":"false","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507048', '50',
'prompt', 'prompt', 2, 1, 7, '{"required":"0","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
diff --git a/db/init/oracle/schema.sql b/db/init/oracle/schema.sql
index a821df5682..3e298b6777 100644
--- a/db/init/oracle/schema.sql
+++ b/db/init/oracle/schema.sql
@@ -1169,7 +1169,7 @@ INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO
plugin (id, name, role
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO plugin (id, name,
role, sort, config, enabled) VALUES ('43', 'loggingHuaweiLts', 'Logging', 177,
'{"totalSizeInBytes":"104857600","maxBlockMs":"0","ioThreadCount":"1","batchSizeThresholdInBytes":"524288","batchCountThreshold":"4096","lingerMs":"2000","retries":"100","baseRetryBackoffMs":"100","maxRetryBackoffMs":"100","enableLocalTest":"true","setGiveUpExtraLongSingleLog":"false"}','0');
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO plugin (id, name,
role, sort, config, enabled) VALUES ('44', 'basicAuth', 'Authentication', 150,
'{"defaultHandleJson":"{\"authorization\":\"test:test123\"}"}','0');
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO plugin (id, name,
role, sort, config, enabled) VALUES ('45', 'loggingRabbitmq', 'Logging', 171,
'{"host":"127.0.0.1","port":5672,"password":"admin","username":"admin","exchangeName":"exchange.logging.plugin","queueName":"queue.logging.plugin","routingKey":"topic.logging","virtualHost":"/","exchangeType":"direct","durable":"true","exclusive":"false","autoDelete":"false"}',
'0');
-INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO plugin (id, name,
config, role, sort, enabled) VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0);
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO plugin (id, name,
config, role, sort, enabled) VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0);
/*insert plugin_handle data for sentinel*/
@@ -3083,3 +3083,87 @@ comment on column NAMESPACE_USER_REL.date_created
comment on column NAMESPACE_USER_REL.date_updated
is 'update time';
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534849', '1346775491550474240', 'aiProxy', 'aiProxy',
'/plug/aiProxy', 'aiProxy', 1, 0, 'pic-center', 0, 0, '', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534850', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:add', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534851', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:query', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534852', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:edit', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534853', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:delete', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534854', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:add', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534855', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:query', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534856', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:edit', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534857', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:delete', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534858', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxy:modify', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542741', '1346358560427216896', '1844026099075534849');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542742', '1346358560427216896', '1844026099075534850');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542743', '1346358560427216896', '1844026099075534851');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542744', '1346358560427216896', '1844026099075534852');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542745', '1346358560427216896', '1844026099075534853');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542746', '1346358560427216896', '1844026099075534854');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542747', '1346358560427216896', '1844026099075534855');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542748', '1346358560427216896', '1844026099075534856');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542749', '1346358560427216896', '1844026099075534857');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542750', '1346358560427216896', '1844026099075534858');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507041', '50', 'provider', 'provider', 3, 1, 0,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'),
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507042', '50', 'baseUrl', 'baseUrl', 2, 1, 1,
'{"required":"1","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507043', '50', 'model', 'model', 2, 1, 2,
'{"required":"1","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507044', '50', 'apiKey', 'apiKey', 2, 1, 3,
'{"required":"1","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507045', '50', 'temperature', 'temperature', 2, 1, 4,
'{"required":"0","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507046', '50', 'maxTokens', 'maxTokens', 2, 1, 5,
'{"required":"0","rule":"", "placeholder":"optional,0,0.01~1"}',
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'),
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507047', '50', 'stream', 'stream', 3, 1, 6,
'{"defaultValue":"false","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507048', '50', 'prompt', 'prompt', 2, 1, 7,
'{"required":"0","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
diff --git a/db/init/pg/create-table.sql b/db/init/pg/create-table.sql
index f1f468c9f9..1895160012 100644
--- a/db/init/pg/create-table.sql
+++ b/db/init/pg/create-table.sql
@@ -1049,7 +1049,7 @@ INSERT INTO "public"."plugin" VALUES ('42', 'tcp', null,
'Proxy', 320, 1, '2022-
INSERT INTO "public"."plugin" VALUES ('43', 'loggingHuaweiLts', '{
"totalSizeInBytes":
"104857600","maxBlockMs":"0","ioThreadCount":"1","batchSizeThresholdInBytes":"524288","batchCountThreshold":"4096","lingerMs":"2000","retries":"100","baseRetryBackoffMs":"100","maxRetryBackoffMs":"100","enableLocalTest":"true","setGiveUpExtraLongSingleLog":"false"}',
'Logging', 177, 0, '2023-07-05 14:03:53', '2023-07-06 12:42:07', null);
INSERT INTO "public"."plugin" VALUES ('44', 'basicAuth',
'{"defaultHandleJson":"{\"authorization\":\"test:test123\"}"}',
'Authentication', 150, 0, '2022-07-24 19:00:00', '2022-07-24 19:00:00', null);
INSERT INTO "public"."plugin" VALUES ('45', 'loggingRabbitMQ',
'{"host":"127.0.0.1","port":5672,"password":"admin","username":"admin","exchangeName":"exchange.logging.plugin","queueName":"queue.logging.plugin","routingKey":"topic.logging","virtualHost":"/","exchangeType":"direct","durable":"true","exclusive":"false","autoDelete":"false"}',
'Logging', 171, 0, '2023-11-06 15:49:56.454', '2023-11-10 10:40:58.447', NULL);
-INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
-- ----------------------------
-- Table structure for plugin_handle
@@ -2936,3 +2936,33 @@ COMMENT ON COLUMN
"public"."namespace_user_rel"."user_id" IS 'user_id';
COMMENT ON COLUMN "public"."namespace_user_rel"."date_created" IS 'create
time';
COMMENT ON COLUMN "public"."namespace_user_rel"."date_updated" IS 'update
time';
+INSERT INTO "public"."resource" VALUES ('1844026099075534849',
'1346775491550474240', 'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0,
'pic-center', 0, 0, '', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534850',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534851',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534852',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534853',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2,
0, '', 1, 0, 'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58',
'2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534854',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534855',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534856',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534857',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534858',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+
+INSERT INTO "public"."permission" VALUES ('1697146860569542741',
'1346358560427216896', '1844026099075534849', '2023-08-31 06:59:01',
'2023-08-31 06:59:01');
+INSERT INTO "public"."permission" VALUES ('1697146860569542742',
'1346358560427216896', '1844026099075534850', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542743',
'1346358560427216896', '1844026099075534851', '2023-08-31 07:14:26',
'2023-08-31 07:14:26');
+INSERT INTO "public"."permission" VALUES ('1697146860569542744',
'1346358560427216896', '1844026099075534852', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542745',
'1346358560427216896', '1844026099075534853', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542746',
'1346358560427216896', '1844026099075534854', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542747',
'1346358560427216896', '1844026099075534855', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542748',
'1346358560427216896', '1844026099075534856', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542749',
'1346358560427216896', '1844026099075534857', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542750',
'1346358560427216896', '1844026099075534858', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507041', '50',
'provider', 'provider', 3, 1, 0,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507042', '50',
'baseUrl', 'baseUrl', 2, 1, 1, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507043', '50',
'model', 'model', 2, 1, 2, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507044', '50',
'apiKey', 'apiKey', 2, 1, 3, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{"required":"0","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507046', '50',
'maxTokens', 'maxTokens', 2, 1, 5, '{"required":"0","rule":"",
"placeholder":"optional,0,0.01~1"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507047', '50',
'stream', 'stream', 3, 1, 6, '{"defaultValue":"false","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507048', '50',
'prompt', 'prompt', 2, 1, 7, '{"required":"0","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
b/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
index 891e7bb26a..bef1339ff5 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
@@ -17,7 +17,7 @@
-- this file works for MySQL.
INSERT INTO `plugin_handle` VALUES ('1722804548510507032', '19', 'handleType',
'handleType', 2, 3, 1, '{"required":"0","rule":""}', '2025-01-02 17:20:50.233',
'2025-01-02 17:20:50.233');
-INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
INSERT INTO `plugin_handle` VALUES ('1722804548510507033', '50', 'provider',
'provider', 3, 3, 1,
'{\"required\":\"1\",\"defaultValue\":\"OpenAI\",\"placeholder\":\"provider\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
INSERT INTO `plugin_handle` VALUES ('1722804548510507034', '50', 'baseUrl',
'baseUrl', 2, 3, 2, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
@@ -34,4 +34,35 @@ INSERT INTO `shenyu_dict` VALUES ('1679002911061737484',
'provider', 'PROVIDER_T
INSERT INTO `shenyu_dict` VALUES ('1679002911061737485', 'provider',
'PROVIDER_TYPE_OPENAPI', 'OpenAPI', 'OpenAPI', 'OpenAPI', 3, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
INSERT INTO `shenyu_dict` VALUES ('1679002911061737486', 'provider',
'PROVIDER_TYPE_ALIYUN', 'ALiYun', 'ALiYun', 'ALiYun', 4, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
-INSERT INTO `namespace_plugin_rel` (`id`,`namespace_id`,`plugin_id`, `config`,
`sort`, `enabled`, `date_created`, `date_updated`) VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{\"provider\":\"OpenAI\",\"baseUrl\":\"https://api.openai.com/v1/chat/completions\",\"model\":\"gpt-4o-mini\",\"apiKey\":\"your_api_key\",\"temperature\":\"0.5\",\"maxTokens\":\"1000\",\"stream\":\"false\",\"prompt\":\"\"}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
\ No newline at end of file
+INSERT INTO `namespace_plugin_rel` (`id`,`namespace_id`,`plugin_id`, `config`,
`sort`, `enabled`, `date_created`, `date_updated`) VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{\"provider\":\"OpenAI\",\"baseUrl\":\"https://api.openai.com/v1/chat/completions\",\"model\":\"gpt-4o-mini\",\"apiKey\":\"your_api_key\",\"temperature\":\"0.5\",\"maxTokens\":\"1000\",\"stream\":\"false\",\"prompt\":\"\"}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
+
+INSERT INTO `resource` VALUES ('1844026099075534849', '1346775491550474240',
'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0, 'pic-center', 0, 0, '',
1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534850', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534851', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534852', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534853', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534854', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534855', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534856', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534857', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534858', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+
+INSERT INTO `permission` VALUES ('1697146860569542741', '1346358560427216896',
'1844026099075534849', '2023-08-31 06:59:01', '2023-08-31 06:59:01');
+INSERT INTO `permission` VALUES ('1697146860569542742', '1346358560427216896',
'1844026099075534850', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542743', '1346358560427216896',
'1844026099075534851', '2023-08-31 07:14:26', '2023-08-31 07:14:26');
+INSERT INTO `permission` VALUES ('1697146860569542744', '1346358560427216896',
'1844026099075534852', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542745', '1346358560427216896',
'1844026099075534853', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542746', '1346358560427216896',
'1844026099075534854', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542747', '1346358560427216896',
'1844026099075534855', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542748', '1346358560427216896',
'1844026099075534856', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542749', '1346358560427216896',
'1844026099075534857', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542750', '1346358560427216896',
'1844026099075534858', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+
+INSERT INTO `plugin_handle` VALUES ('1722804548510507041', '50', 'provider',
'provider', 3, 1, 0,
'{\"required\":\"1\",\"defaultValue\":\"OpenAI\",\"placeholder\":\"provider\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507042', '50', 'baseUrl',
'baseUrl', 2, 1, 1, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507043', '50', 'model',
'model', 2, 1, 2, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507044', '50', 'apiKey',
'apiKey', 2, 1, 3, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{\"required\":\"0\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507046', '50', 'maxTokens',
'maxTokens', 2, 1, 5, '{\"required\":\"0\",\"rule\":\"\",
\"placeholder\":\"optional,0,0.01~1\"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507047', '50', 'stream',
'stream', 3, 1, 6, '{\"defaultValue\":\"false\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507048', '50', 'prompt',
'prompt', 2, 1, 7, '{\"required\":\"0\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
b/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
index c8b055b950..e0fec551fd 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
@@ -17,7 +17,7 @@
-- this file works for Oceanbase.
INSERT INTO `plugin_handle` VALUES ('1722804548510507032', '19', 'handleType',
'handleType', 2, 3, 1, '{"required":"0","rule":""}', '2025-01-02 17:20:50.233',
'2025-01-02 17:20:50.233');
-INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO `plugin` VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
INSERT INTO `plugin_handle` VALUES ('1722804548510507033', '50', 'provider',
'provider', 3, 3, 1,
'{\"required\":\"1\",\"defaultValue\":\"OpenAI\",\"placeholder\":\"provider\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
INSERT INTO `plugin_handle` VALUES ('1722804548510507034', '50', 'baseUrl',
'baseUrl', 2, 3, 2, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
@@ -34,4 +34,35 @@ INSERT INTO `shenyu_dict` VALUES ('1679002911061737484',
'provider', 'PROVIDER_T
INSERT INTO `shenyu_dict` VALUES ('1679002911061737485', 'provider',
'PROVIDER_TYPE_OPENAPI', 'OpenAPI', 'OpenAPI', 'OpenAPI', 3, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
INSERT INTO `shenyu_dict` VALUES ('1679002911061737486', 'provider',
'PROVIDER_TYPE_ALIYUN', 'ALiYun', 'ALiYun', 'ALiYun', 4, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
-INSERT INTO `namespace_plugin_rel` (`id`,`namespace_id`,`plugin_id`, `config`,
`sort`, `enabled`, `date_created`, `date_updated`) VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{\"provider\":\"OpenAI\",\"baseUrl\":\"https://api.openai.com/v1/chat/completions\",\"model\":\"gpt-4o-mini\",\"apiKey\":\"your_api_key\",\"temperature\":\"0.5\",\"maxTokens\":\"1000\",\"stream\":\"false\",\"prompt\":\"\"}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
\ No newline at end of file
+INSERT INTO `namespace_plugin_rel` (`id`,`namespace_id`,`plugin_id`, `config`,
`sort`, `enabled`, `date_created`, `date_updated`) VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{\"provider\":\"OpenAI\",\"baseUrl\":\"https://api.openai.com/v1/chat/completions\",\"model\":\"gpt-4o-mini\",\"apiKey\":\"your_api_key\",\"temperature\":\"0.5\",\"maxTokens\":\"1000\",\"stream\":\"false\",\"prompt\":\"\"}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
+
+INSERT INTO `resource` VALUES ('1844026099075534849', '1346775491550474240',
'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0, 'pic-center', 0, 0, '',
1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534850', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534851', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534852', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534853', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534854', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534855', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534856', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534857', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO `resource` VALUES ('1844026099075534858', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+
+INSERT INTO `permission` VALUES ('1697146860569542741', '1346358560427216896',
'1844026099075534849', '2023-08-31 06:59:01', '2023-08-31 06:59:01');
+INSERT INTO `permission` VALUES ('1697146860569542742', '1346358560427216896',
'1844026099075534850', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542743', '1346358560427216896',
'1844026099075534851', '2023-08-31 07:14:26', '2023-08-31 07:14:26');
+INSERT INTO `permission` VALUES ('1697146860569542744', '1346358560427216896',
'1844026099075534852', '2023-08-31 07:22:07', '2023-08-31 07:22:07');
+INSERT INTO `permission` VALUES ('1697146860569542745', '1346358560427216896',
'1844026099075534853', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542746', '1346358560427216896',
'1844026099075534854', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542747', '1346358560427216896',
'1844026099075534855', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542748', '1346358560427216896',
'1844026099075534856', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542749', '1346358560427216896',
'1844026099075534857', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+INSERT INTO `permission` VALUES ('1697146860569542750', '1346358560427216896',
'1844026099075534858', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
+
+INSERT INTO `plugin_handle` VALUES ('1722804548510507041', '50', 'provider',
'provider', 3, 1, 0,
'{\"required\":\"1\",\"defaultValue\":\"OpenAI\",\"placeholder\":\"provider\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507042', '50', 'baseUrl',
'baseUrl', 2, 1, 1, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507043', '50', 'model',
'model', 2, 1, 2, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507044', '50', 'apiKey',
'apiKey', 2, 1, 3, '{\"required\":\"1\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{\"required\":\"0\",\"rule\":\"\"}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507046', '50', 'maxTokens',
'maxTokens', 2, 1, 5, '{\"required\":\"0\",\"rule\":\"\",
\"placeholder\":\"optional,0,0.01~1\"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507047', '50', 'stream',
'stream', 3, 1, 6, '{\"defaultValue\":\"false\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO `plugin_handle` VALUES ('1722804548510507048', '50', 'prompt',
'prompt', 2, 1, 7, '{\"required\":\"0\",\"rule\":\"\"}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-og.sql
b/db/upgrade/2.7.0-upgrade-2.7.1-og.sql
index e6a15c39dc..35334e9cf4 100644
--- a/db/upgrade/2.7.0-upgrade-2.7.1-og.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-og.sql
@@ -18,7 +18,7 @@
INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507032', '19',
'handleType', 'handleType', 2, 3, 1, '{"required":"0","rule":""}', '2025-01-02
17:20:50.233', '2025-01-02 17:20:50.233');
-INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507033', '50',
'provider', 'provider', 3, 3, 1,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507034', '50',
'baseUrl', 'baseUrl', 2, 3, 2, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
@@ -35,4 +35,35 @@ INSERT INTO "public"."shenyu_dict" VALUES
('1679002911061737484', 'provider', 'P
INSERT INTO "public"."shenyu_dict" VALUES ('1679002911061737485', 'provider',
'PROVIDER_TYPE_OPENAPI', 'OpenAPI', 'OpenAPI', 'OpenAPI', 3, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
INSERT INTO "public"."shenyu_dict" VALUES ('1679002911061737486', 'provider',
'PROVIDER_TYPE_ALIYUN', 'ALiYun', 'ALiYun', 'ALiYun', 4, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
-INSERT INTO "public"."namespace_plugin_rel" VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
\ No newline at end of file
+INSERT INTO "public"."namespace_plugin_rel" VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
+
+INSERT INTO "public"."resource" VALUES ('1844026099075534849',
'1346775491550474240', 'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0,
'pic-center', 0, 0, '', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534850',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534851',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534852',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534853',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2,
0, '', 1, 0, 'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58',
'2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534854',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534855',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534856',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534857',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534858',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+
+INSERT INTO "public"."permission" VALUES ('1697146860569542741',
'1346358560427216896', '1844026099075534849', '2023-08-31 06:59:01',
'2023-08-31 06:59:01');
+INSERT INTO "public"."permission" VALUES ('1697146860569542742',
'1346358560427216896', '1844026099075534850', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542743',
'1346358560427216896', '1844026099075534851', '2023-08-31 07:14:26',
'2023-08-31 07:14:26');
+INSERT INTO "public"."permission" VALUES ('1697146860569542744',
'1346358560427216896', '1844026099075534852', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542745',
'1346358560427216896', '1844026099075534853', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542746',
'1346358560427216896', '1844026099075534854', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542747',
'1346358560427216896', '1844026099075534855', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542748',
'1346358560427216896', '1844026099075534856', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542749',
'1346358560427216896', '1844026099075534857', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542750',
'1346358560427216896', '1844026099075534858', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507041', '50',
'provider', 'provider', 3, 1, 0,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507042', '50',
'baseUrl', 'baseUrl', 2, 1, 1, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507043', '50',
'model', 'model', 2, 1, 2, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507044', '50',
'apiKey', 'apiKey', 2, 1, 3, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{"required":"0","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507046', '50',
'maxTokens', 'maxTokens', 2, 1, 5, '{"required":"0","rule":"",
"placeholder":"optional,0,0.01~1"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507047', '50',
'stream', 'stream', 3, 1, 6, '{"defaultValue":"false","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507048', '50',
'prompt', 'prompt', 2, 1, 7, '{"required":"0","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
b/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
index 6e816981a3..deaab20389 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
@@ -18,7 +18,7 @@
insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type))
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT,
EXT_OBJ)
values ('1722804548510507032', '19', 'handleType', 'handleType', 2, 3, 1,
'{"required":"0","rule":""}');
-INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO plugin (id, name,
config, role, sort, enabled) VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0);
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin(id)) */ INTO plugin (id, name,
config, role, sort, enabled) VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0);
insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type))
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT,
EXT_OBJ)
values ('1722804548510507033', '50', 'provider', 'provider', 3, 3, 1,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}');
@@ -59,4 +59,88 @@ VALUES ('1679002911061737485', 'provider',
'PROVIDER_TYPE_OPENAPI', 'OpenAPI', '
insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(shenyu_dict(type, dict_code, dict_name))
*/ into SHENYU_DICT (ID, TYPE, DICT_CODE, DICT_NAME, DICT_VALUE, "desc", SORT,
ENABLED)
VALUES ('1679002911061737486', 'provider', 'PROVIDER_TYPE_ALIYUN', 'ALiYun',
'ALiYun', 'ALiYun', 4, 1);
-INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX (namespace_plugin_rel(id)) */ INTO
namespace_plugin_rel (id,namespace_id,plugin_id, config, sort, enabled) VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
171, 0);
\ No newline at end of file
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX (namespace_plugin_rel(id)) */ INTO
namespace_plugin_rel (id,namespace_id,plugin_id, config, sort, enabled) VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
171, 0);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534849', '1346775491550474240', 'aiProxy', 'aiProxy',
'/plug/aiProxy', 'aiProxy', 1, 0, 'pic-center', 0, 0, '', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534850', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:add', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534851', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:query', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534852', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:edit', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534853', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxySelector:delete', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534854', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:add', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534855', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:query', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534856', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:edit', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534857', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxyRule:delete', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(resource(id)) */ INTO resource (id,
parent_id, title, name, url, component, resource_type, sort, icon, is_leaf,
is_route, perms, status)
+VALUES ('1844026099075534858', '1844026099075534849',
'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0, '', 1, 0,
'plugin:aiProxy:modify', 1);
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542741', '1346358560427216896', '1844026099075534849');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542742', '1346358560427216896', '1844026099075534850');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542743', '1346358560427216896', '1844026099075534851');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542744', '1346358560427216896', '1844026099075534852');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542745', '1346358560427216896', '1844026099075534853');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542746', '1346358560427216896', '1844026099075534854');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542747', '1346358560427216896', '1844026099075534855');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542748', '1346358560427216896', '1844026099075534856');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542749', '1346358560427216896', '1844026099075534857');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(permission(id)) */ INTO permission (id,
object_id, resource_id)
+VALUES ('1697146860569542750', '1346358560427216896', '1844026099075534858');
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507041', '50', 'provider', 'provider', 3, 1, 0,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'),
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507042', '50', 'baseUrl', 'baseUrl', 2, 1, 1,
'{"required":"1","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507043', '50', 'model', 'model', 2, 1, 2,
'{"required":"1","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507044', '50', 'apiKey', 'apiKey', 2, 1, 3,
'{"required":"1","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507045', '50', 'temperature', 'temperature', 2, 1, 4,
'{"required":"0","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507046', '50', 'maxTokens', 'maxTokens', 2, 1, 5,
'{"required":"0","rule":"", "placeholder":"optional,0,0.01~1"}',
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'),
to_timestamp('2024-01-02 17:20:50.233', 'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507047', '50', 'stream', 'stream', 3, 1, 6,
'{"defaultValue":"false","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
+
+INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(id)) */ INTO plugin_handle
(id, plugin_id, field, label, data_type, type, sort, ext_obj, date_created,
date_updated)
+VALUES ('1722804548510507048', '50', 'prompt', 'prompt', 2, 1, 7,
'{"required":"0","rule":""}', to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'), to_timestamp('2024-01-02 17:20:50.233',
'YYYY-MM-DD HH24:MI:SS.FF3'));
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
b/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
index 01a8fd5f64..c333b38cd1 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
@@ -17,7 +17,7 @@
-- this file works for PostgreSQL, can not use "`" syntax.
INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507032', '19',
'handleType', 'handleType', 2, 3, 1, '{"required":"0","rule":""}', '2025-01-02
17:20:50.233', '2025-01-02 17:20:50.233');
-INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 171, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
+INSERT INTO "public"."plugin" VALUES ('50', 'aiProxy',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
'Ai', 200, 0, '2023-12-20 18:02:53', '2023-12-20 18:02:53', null);
INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507033', '50',
'provider', 'provider', 3, 3, 1,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507034', '50',
'baseUrl', 'baseUrl', 2, 3, 2, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
@@ -34,4 +34,35 @@ INSERT INTO "public"."shenyu_dict" VALUES
('1679002911061737484', 'provider', 'P
INSERT INTO "public"."shenyu_dict" VALUES ('1679002911061737485', 'provider',
'PROVIDER_TYPE_OPENAPI', 'OpenAPI', 'OpenAPI', 'OpenAPI', 3, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
INSERT INTO "public"."shenyu_dict" VALUES ('1679002911061737486', 'provider',
'PROVIDER_TYPE_ALIYUN', 'ALiYun', 'ALiYun', 'ALiYun', 4, 1, '2024-02-07
14:31:49', '2024-02-07 14:31:49');
-INSERT INTO "public"."namespace_plugin_rel" VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
\ No newline at end of file
+INSERT INTO "public"."namespace_plugin_rel" VALUES
('1801816010882822187','649330b6-c2d7-4edc-be8e-8a54df9eb385','50',
'{"provider":"OpenAI","baseUrl":"https://api.openai.com/v1/chat/completions","model":"gpt-4o-mini","apiKey":"your_api_key","temperature":"0.5","maxTokens":"1000","stream":"false","prompt":""}',
171, 0, '2022-05-25 18:02:53.000', '2022-05-25 18:02:53.000');
+
+INSERT INTO "public"."resource" VALUES ('1844026099075534849',
'1346775491550474240', 'aiProxy', 'aiProxy', '/plug/aiProxy', 'aiProxy', 1, 0,
'pic-center', 0, 0, '', 1, '2022-05-25 18:02:58', '2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534850',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.ADD', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534851',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.QUERY', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534852',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.EDIT', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxySelector:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534853',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SELECTOR.DELETE', '', '', '', 2,
0, '', 1, 0, 'plugin:aiProxySelector:delete', 1, '2022-05-25 18:02:58',
'2022-05-25 18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534854',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.ADD', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:add', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534855',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.QUERY', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:query', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534856',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.EDIT', '', '', '', 2, 0, '',
1, 0, 'plugin:aiProxyRule:edit', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534857',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.RULE.DELETE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxyRule:delete', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+INSERT INTO "public"."resource" VALUES ('1844026099075534858',
'1844026099075534849', 'SHENYU.BUTTON.PLUGIN.SYNCHRONIZE', '', '', '', 2, 0,
'', 1, 0, 'plugin:aiProxy:modify', 1, '2022-05-25 18:02:58', '2022-05-25
18:02:58');
+
+INSERT INTO "public"."permission" VALUES ('1697146860569542741',
'1346358560427216896', '1844026099075534849', '2023-08-31 06:59:01',
'2023-08-31 06:59:01');
+INSERT INTO "public"."permission" VALUES ('1697146860569542742',
'1346358560427216896', '1844026099075534850', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542743',
'1346358560427216896', '1844026099075534851', '2023-08-31 07:14:26',
'2023-08-31 07:14:26');
+INSERT INTO "public"."permission" VALUES ('1697146860569542744',
'1346358560427216896', '1844026099075534852', '2023-08-31 07:22:07',
'2023-08-31 07:22:07');
+INSERT INTO "public"."permission" VALUES ('1697146860569542745',
'1346358560427216896', '1844026099075534853', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542746',
'1346358560427216896', '1844026099075534854', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542747',
'1346358560427216896', '1844026099075534855', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542748',
'1346358560427216896', '1844026099075534856', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542749',
'1346358560427216896', '1844026099075534857', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+INSERT INTO "public"."permission" VALUES ('1697146860569542750',
'1346358560427216896', '1844026099075534858', '2023-08-31 07:18:37',
'2023-08-31 07:18:37');
+
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507041', '50',
'provider', 'provider', 3, 1, 0,
'{"required":"1","defaultValue":"OpenAI","placeholder":"provider","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507042', '50',
'baseUrl', 'baseUrl', 2, 1, 1, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507043', '50',
'model', 'model', 2, 1, 2, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507044', '50',
'apiKey', 'apiKey', 2, 1, 3, '{"required":"1","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507045', '50',
'temperature', 'temperature', 2, 1, 4, '{"required":"0","rule":""}',
'2024-01-02 17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507046', '50',
'maxTokens', 'maxTokens', 2, 1, 5, '{"required":"0","rule":"",
"placeholder":"optional,0,0.01~1"}', '2024-01-02 17:20:50.233', '2024-01-02
17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507047', '50',
'stream', 'stream', 3, 1, 6, '{"defaultValue":"false","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
+INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507048', '50',
'prompt', 'prompt', 2, 1, 7, '{"required":"0","rule":""}', '2024-01-02
17:20:50.233', '2024-01-02 17:20:50.233');
diff --git
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/rule/AiProxyHandle.java
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/rule/AiProxyHandle.java
index d9cf581a9d..d6e52f0918 100644
---
a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/rule/AiProxyHandle.java
+++
b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/convert/rule/AiProxyHandle.java
@@ -17,71 +17,89 @@
package org.apache.shenyu.common.dto.convert.rule;
+import org.apache.shenyu.common.enums.AiModelProviderEnum;
+
import java.util.Objects;
/**
* this is Ai Proxy plugin handle.
*/
public class AiProxyHandle {
-
+
/**
- * type.
+ * provider.
*/
- private String type;
-
+ private String provider;
+
/**
* base url.
*/
private String baseUrl;
-
+
/**
* api key.
*/
private String apiKey;
-
+
/**
* model.
*/
private String model;
-
+
/**
* temperature.
*/
- private Double temperature;
-
+ private Double temperature = 0.8;
+
/**
* max tokens.
*/
private Integer maxTokens;
-
+
/**
* prompt.
*/
private String prompt;
-
+
/**
* stream.
*/
private Boolean stream = false;
-
+
/**
- * get type.
+ * new default instance.
*
- * @return type
+ * @return AiProxyHandle
*/
- public String getType() {
- return type;
+ public static AiProxyHandle newDefaultInstance() {
+ AiProxyHandle aiProxyHandle = new AiProxyHandle();
+ aiProxyHandle.setProvider(AiModelProviderEnum.OPEN_AI.getName());
+ aiProxyHandle.setBaseUrl("https://api.openai.com");
+ aiProxyHandle.setApiKey("your-api-key");
+ aiProxyHandle.setModel("gpt-4o-mini");
+ aiProxyHandle.setTemperature(0.8);
+ aiProxyHandle.setStream(false);
+ return aiProxyHandle;
}
-
+
/**
- * set type.
+ * get provider.
*
- * @param type type
+ * @return provider
*/
- public void setType(final String type) {
- this.type = type;
+ public String getProvider() {
+ return provider;
}
-
+
+ /**
+ * set provider.
+ *
+ * @param provider provider
+ */
+ public void setProvider(final String provider) {
+ this.provider = provider;
+ }
+
/**
* get base url.
*
@@ -90,7 +108,7 @@ public class AiProxyHandle {
public String getBaseUrl() {
return baseUrl;
}
-
+
/**
* set base url.
*
@@ -99,7 +117,7 @@ public class AiProxyHandle {
public void setBaseUrl(final String baseUrl) {
this.baseUrl = baseUrl;
}
-
+
/**
* get api key.
*
@@ -108,7 +126,7 @@ public class AiProxyHandle {
public String getApiKey() {
return apiKey;
}
-
+
/**
* set api key.
*
@@ -117,7 +135,7 @@ public class AiProxyHandle {
public void setApiKey(final String apiKey) {
this.apiKey = apiKey;
}
-
+
/**
* get model.
*
@@ -126,7 +144,7 @@ public class AiProxyHandle {
public String getModel() {
return model;
}
-
+
/**
* set model.
*
@@ -135,7 +153,7 @@ public class AiProxyHandle {
public void setModel(final String model) {
this.model = model;
}
-
+
/**
* get temperature.
*
@@ -144,7 +162,7 @@ public class AiProxyHandle {
public Double getTemperature() {
return temperature;
}
-
+
/**
* set temperature.
*
@@ -153,7 +171,7 @@ public class AiProxyHandle {
public void setTemperature(final Double temperature) {
this.temperature = temperature;
}
-
+
/**
* get max tokens.
*
@@ -162,7 +180,7 @@ public class AiProxyHandle {
public Integer getMaxTokens() {
return maxTokens;
}
-
+
/**
* set max tokens.
*
@@ -171,7 +189,7 @@ public class AiProxyHandle {
public void setMaxTokens(final Integer maxTokens) {
this.maxTokens = maxTokens;
}
-
+
/**
* get prompt.
*
@@ -180,7 +198,7 @@ public class AiProxyHandle {
public String getPrompt() {
return prompt;
}
-
+
/**
* set prompt.
*
@@ -189,7 +207,7 @@ public class AiProxyHandle {
public void setPrompt(final String prompt) {
this.prompt = prompt;
}
-
+
/**
* get stream.
*
@@ -198,7 +216,7 @@ public class AiProxyHandle {
public Boolean getStream() {
return stream;
}
-
+
/**
* set stream.
*
@@ -207,7 +225,7 @@ public class AiProxyHandle {
public void setStream(final Boolean stream) {
this.stream = stream;
}
-
+
@Override
public boolean equals(final Object o) {
if (this == o) {
@@ -217,7 +235,7 @@ public class AiProxyHandle {
return false;
}
AiProxyHandle that = (AiProxyHandle) o;
- return Objects.equals(type, that.type)
+ return Objects.equals(provider, that.provider)
&& Objects.equals(baseUrl, that.baseUrl)
&& Objects.equals(apiKey, that.apiKey)
&& Objects.equals(model, that.model)
@@ -226,16 +244,16 @@ public class AiProxyHandle {
&& Objects.equals(prompt, that.prompt)
&& Objects.equals(stream, that.stream);
}
-
+
@Override
public int hashCode() {
- return Objects.hash(type, baseUrl, apiKey, model, temperature,
maxTokens, prompt, stream);
+ return Objects.hash(provider, baseUrl, apiKey, model, temperature,
maxTokens, prompt, stream);
}
-
+
@Override
public String toString() {
- return "AiProxyHandle{" + "type='" + type + '\'' + "baseUrl='" +
baseUrl + '\'' + ", apiKey='" + apiKey + '\''
- + ", model='" + model
+ return "AiProxyHandle{" + "provider='" + provider + '\'' + "baseUrl='"
+ baseUrl + '\'' + ", apiKey='" + apiKey
+ + '\'' + ", model='" + model
+ '\''
+ ", temperature=" + temperature + ", maxTokens=" + maxTokens
+ ", prompt='" + prompt + '\'' + ", stream=" + stream + '}';
diff --git
a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/PluginEnum.java
b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/PluginEnum.java
index c588aaa937..23b21352d2 100644
--- a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/PluginEnum.java
+++ b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/PluginEnum.java
@@ -270,7 +270,7 @@ public enum PluginEnum {
/**
* Ai-proxy plugin enum.
*/
- AI_PROXY(440, 0, "aiProxy"),
+ AI_PROXY(200, 0, "aiProxy"),
/**
* Basic-auth plugin enum.
diff --git
a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
index 2a513882f2..9292dbbafc 100644
---
a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
+++
b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/RpcTypeEnum.java
@@ -66,7 +66,12 @@ public enum RpcTypeEnum {
/**
* grpc.
*/
- GRPC("grpc", true);
+ GRPC("grpc", true),
+
+ /**
+ * ai.
+ */
+ AI("ai", true);
private final String name;
diff --git
a/shenyu-common/src/test/java/org/apache/shenyu/common/utils/PluginNameAdapterTest.java
b/shenyu-common/src/test/java/org/apache/shenyu/common/utils/PluginNameAdapterTest.java
index 2b83082e4c..212ef64471 100644
---
a/shenyu-common/src/test/java/org/apache/shenyu/common/utils/PluginNameAdapterTest.java
+++
b/shenyu-common/src/test/java/org/apache/shenyu/common/utils/PluginNameAdapterTest.java
@@ -30,7 +30,8 @@ public class PluginNameAdapterTest {
@Test
public void testRpcTypeAdapter() {
Arrays.stream(RpcTypeEnum.values())
- .filter(rpcTypeEnum ->
!RpcTypeEnum.HTTP.getName().equals(rpcTypeEnum.getName()))
+ .filter(rpcTypeEnum ->
!RpcTypeEnum.HTTP.getName().equals(rpcTypeEnum.getName())
+ &&
!RpcTypeEnum.AI.getName().equals(rpcTypeEnum.getName()))
.forEach(rpcTypeEnum ->
assertEquals(PluginNameAdapter.rpcTypeAdapter(rpcTypeEnum.getName()),
PluginEnum.getPluginEnumByName(rpcTypeEnum.getName()).getName()));
diff --git
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/AiProxyPlugin.java
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/AiProxyPlugin.java
index ec6a4c72fa..d11f2939d7 100644
---
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/AiProxyPlugin.java
+++
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/AiProxyPlugin.java
@@ -17,59 +17,104 @@
package org.apache.shenyu.plugin.ai.proxy;
+import org.apache.shenyu.common.constant.Constants;
import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
import org.apache.shenyu.common.dto.convert.plugin.AiProxyConfig;
+import org.apache.shenyu.common.dto.convert.rule.AiProxyHandle;
import org.apache.shenyu.common.enums.AiModelProviderEnum;
import org.apache.shenyu.common.enums.PluginEnum;
+import org.apache.shenyu.common.enums.RpcTypeEnum;
import org.apache.shenyu.common.utils.Singleton;
+import org.apache.shenyu.plugin.ai.proxy.handler.AiProxyPluginHandler;
import org.apache.shenyu.plugin.ai.proxy.strategy.AiModel;
import org.apache.shenyu.plugin.ai.proxy.strategy.AiModelFactory;
import org.apache.shenyu.plugin.api.ShenyuPluginChain;
+import org.apache.shenyu.plugin.api.context.ShenyuContext;
import org.apache.shenyu.plugin.base.AbstractShenyuPlugin;
-import org.springframework.core.io.buffer.DataBufferUtils;
+import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.codec.HttpMessageReader;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
-import java.nio.charset.StandardCharsets;
+import java.util.List;
import java.util.Objects;
/**
* this is ai proxy plugin.
*/
public class AiProxyPlugin extends AbstractShenyuPlugin {
-
+
+ private static final Logger LOG =
LoggerFactory.getLogger(AiProxyPlugin.class);
+
+ private final List<HttpMessageReader<?>> messageReaders;
+
+ public AiProxyPlugin(final List<HttpMessageReader<?>> messageReaders) {
+ this.messageReaders = messageReaders;
+ }
+
@Override
protected Mono<Void> doExecute(final ServerWebExchange exchange, final
ShenyuPluginChain chain,
- final SelectorData selector, final RuleData rule) {
+ final SelectorData selector, final RuleData
rule) {
AiProxyConfig aiProxyConfig = Singleton.INST.get(AiProxyConfig.class);
if (Objects.isNull(aiProxyConfig)) {
return chain.execute(exchange);
}
-
- return DataBufferUtils.join(exchange.getRequest().getBody())
- .flatMap(dataBuffer -> {
- byte[] bytes = new byte[dataBuffer.readableByteCount()];
- dataBuffer.read(bytes);
- DataBufferUtils.release(dataBuffer);
- String requestBody = new String(bytes,
StandardCharsets.UTF_8);
-
- // choose the model by provider
- String provider = aiProxyConfig.getProvider();
- AiModelProviderEnum providerEnum =
AiModelProviderEnum.getByName(provider);
- assert Objects.nonNull(providerEnum);
- AiModel aiModel =
AiModelFactory.createAiModel(providerEnum);
- assert Objects.nonNull(aiModel);
- return aiModel.invoke(aiProxyConfig, exchange,
requestBody);
- });
+ final ShenyuContext shenyuContext =
exchange.getAttribute(Constants.CONTEXT);
+ assert Objects.nonNull(shenyuContext);
+
+ String rpcType = shenyuContext.getRpcType();
+ String realUrl = shenyuContext.getRealUrl();
+ LOG.info("AiProxyPlugin rpcType:{} realUrl:{}", rpcType, realUrl);
+ // Get selector handle from cache
+ AiProxyHandle selectorHandle =
AiProxyPluginHandler.SELECTOR_CACHED_HANDLE.get()
+ .obtainHandle(CacheKeyUtils.INST.getKey(selector.getId(),
Constants.DEFAULT_RULE));
+
+ // Create final config with selector handle taking precedence
+ if (Objects.nonNull(selectorHandle)) {
+ aiProxyConfig.setProvider(selectorHandle.getProvider());
+ aiProxyConfig.setBaseUrl(selectorHandle.getBaseUrl());
+ aiProxyConfig.setApiKey(selectorHandle.getApiKey());
+ aiProxyConfig.setModel(selectorHandle.getModel());
+ aiProxyConfig.setTemperature(selectorHandle.getTemperature());
+ aiProxyConfig.setMaxTokens(selectorHandle.getMaxTokens());
+ aiProxyConfig.setPrompt(selectorHandle.getPrompt());
+ aiProxyConfig.setStream(selectorHandle.getStream());
+ }
+
+ shenyuContext.setRpcType(RpcTypeEnum.AI.getName());
+ exchange.getAttributes().put(Constants.CONTEXT, shenyuContext);
+
+ // set domain
+ // TODO fix the domain
+ // String domain = aiProxyConfig.getBaseUrl() + realUrl;
+
+ exchange.getAttributes().put(Constants.HTTP_DOMAIN,
aiProxyConfig.getBaseUrl());
+ // set the http timeout
+ exchange.getAttributes().put(Constants.HTTP_TIME_OUT, 60 * 3000L);
+ exchange.getAttributes().put(Constants.HTTP_RETRY, 0);
+
+ String provider = aiProxyConfig.getProvider();
+ AiModelProviderEnum providerEnum =
AiModelProviderEnum.getByName(provider);
+ if (Objects.isNull(providerEnum)) {
+ return Mono.error(new IllegalArgumentException("Invalid AI model
provider"));
+ }
+ AiModel aiModel = AiModelFactory.createAiModel(providerEnum);
+ if (Objects.isNull(aiModel)) {
+ return Mono.error(new IllegalStateException("Failed to create AI
model"));
+ }
+ return aiModel.invoke(aiProxyConfig, exchange, chain, messageReaders);
+
}
-
-
+
+
@Override
public int getOrder() {
return PluginEnum.AI_PROXY.getCode();
}
-
+
@Override
public String named() {
return PluginEnum.AI_PROXY.getName();
diff --git
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/handler/AiProxyPluginHandler.java
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/handler/AiProxyPluginHandler.java
index e7dff639b5..ad9b49d843 100644
---
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/handler/AiProxyPluginHandler.java
+++
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/handler/AiProxyPluginHandler.java
@@ -17,8 +17,9 @@
package org.apache.shenyu.plugin.ai.proxy.handler;
+import org.apache.shenyu.common.constant.Constants;
import org.apache.shenyu.common.dto.PluginData;
-import org.apache.shenyu.common.dto.RuleData;
+import org.apache.shenyu.common.dto.SelectorData;
import org.apache.shenyu.common.dto.convert.plugin.AiProxyConfig;
import org.apache.shenyu.common.dto.convert.rule.AiProxyHandle;
import org.apache.shenyu.common.enums.PluginEnum;
@@ -30,15 +31,14 @@ import org.apache.shenyu.plugin.base.utils.BeanHolder;
import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
import java.util.Objects;
-import java.util.Optional;
import java.util.function.Supplier;
/**
- * this is ai proxy plugin.
+ * this is ai proxy plugin handler.
*/
public class AiProxyPluginHandler implements PluginDataHandler {
- public static final Supplier<CommonHandleCache<String, AiProxyHandle>>
CACHED_HANDLE = new BeanHolder<>(CommonHandleCache::new);
+ public static final Supplier<CommonHandleCache<String, AiProxyHandle>>
SELECTOR_CACHED_HANDLE = new BeanHolder<>(CommonHandleCache::new);
@Override
public void handlerPlugin(final PluginData pluginData) {
@@ -52,18 +52,17 @@ public class AiProxyPluginHandler implements
PluginDataHandler {
}
@Override
- public void handlerRule(final RuleData ruleData) {
- Optional.ofNullable(ruleData.getHandle())
- .ifPresent(s -> {
- AiProxyHandle aiProxyHandle =
GsonUtils.getInstance().fromJson(s, AiProxyHandle.class);
-
CACHED_HANDLE.get().cachedHandle(CacheKeyUtils.INST.getKey(ruleData),
aiProxyHandle);
- });
+ public void handlerSelector(final SelectorData selectorData) {
+ if (Objects.isNull(selectorData.getHandle())) {
+ return;
+ }
+ AiProxyHandle aiProxyHandle =
GsonUtils.getInstance().fromJson(selectorData.getHandle(), AiProxyHandle.class);
+
SELECTOR_CACHED_HANDLE.get().cachedHandle(CacheKeyUtils.INST.getKey(selectorData.getId(),
Constants.DEFAULT_RULE), aiProxyHandle);
}
@Override
- public void removeRule(final RuleData ruleData) {
- Optional.ofNullable(ruleData)
- .ifPresent(s ->
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
+ public void removeSelector(final SelectorData selectorData) {
+
SELECTOR_CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(selectorData.getId(),
Constants.DEFAULT_RULE));
}
@Override
diff --git
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/AiModel.java
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/AiModel.java
index d08332c60b..b30adf4a55 100644
---
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/AiModel.java
+++
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/AiModel.java
@@ -18,13 +18,26 @@
package org.apache.shenyu.plugin.ai.proxy.strategy;
import org.apache.shenyu.common.dto.convert.plugin.AiProxyConfig;
+import org.apache.shenyu.plugin.api.ShenyuPluginChain;
+import org.springframework.http.codec.HttpMessageReader;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
+import java.util.List;
+
/**
* The interface Ai model.
*/
public interface AiModel {
- Mono<Void> invoke(AiProxyConfig aiProxyConfig, ServerWebExchange exchange,
String requestBody);
+ /**
+ * Invoke mono.
+ *
+ * @param aiProxyConfig the ai proxy config
+ * @param exchange the exchange
+ * @param chain the chain
+ * @param messageReaders the message readers
+ * @return the mono
+ */
+ Mono<Void> invoke(AiProxyConfig aiProxyConfig, ServerWebExchange exchange,
ShenyuPluginChain chain, List<HttpMessageReader<?>> messageReaders);
}
diff --git
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/openai/OpenAI.java
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/openai/OpenAI.java
index 1e1c41ce53..a1c7b84e13 100644
---
a/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/openai/OpenAI.java
+++
b/shenyu-plugin/shenyu-plugin-ai-proxy/src/main/java/org/apache/shenyu/plugin/ai/proxy/strategy/openai/OpenAI.java
@@ -17,145 +17,65 @@
package org.apache.shenyu.plugin.ai.proxy.strategy.openai;
-import okhttp3.Call;
-import okhttp3.Callback;
-import okhttp3.MediaType;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.RequestBody;
-import okhttp3.Response;
-import okhttp3.ResponseBody;
-import okio.BufferedSource;
import org.apache.shenyu.common.constant.Constants;
import org.apache.shenyu.common.dto.convert.plugin.AiProxyConfig;
import org.apache.shenyu.common.utils.GsonUtils;
import org.apache.shenyu.plugin.ai.proxy.strategy.AiModel;
-import org.jetbrains.annotations.NotNull;
-import org.reactivestreams.Publisher;
-import org.springframework.core.io.buffer.DataBuffer;
+import org.apache.shenyu.plugin.api.ShenyuPluginChain;
+import org.apache.shenyu.plugin.api.exception.ResponsiveException;
+import org.apache.shenyu.plugin.api.utils.WebFluxResultUtils;
+import org.apache.shenyu.plugin.base.utils.ServerWebExchangeUtils;
import org.springframework.http.HttpHeaders;
-import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.http.MediaType;
+import org.springframework.http.codec.HttpMessageReader;
import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.FluxSink;
import reactor.core.publisher.Mono;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
+import java.util.List;
import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.TimeUnit;
/**
* The OpenAI model.
*/
public class OpenAI implements AiModel {
- private final OkHttpClient client = new OkHttpClient.Builder()
- .connectTimeout(30, TimeUnit.SECONDS)
- .writeTimeout(5, TimeUnit.MINUTES)
- .readTimeout(5, TimeUnit.MINUTES)
- .build();
-
@Override
public Mono<Void> invoke(final AiProxyConfig aiProxyConfig, final
ServerWebExchange exchange,
- final String requestBody) {
- Map<String, Object> paramMap =
GsonUtils.getInstance().convertToMap(requestBody);
- paramMap.put(Constants.MODEL, aiProxyConfig.getModel());
- paramMap.put(Constants.STREAM, aiProxyConfig.getStream());
- paramMap.put(Constants.PROMPT, aiProxyConfig.getPrompt());
-
- RequestBody body =
RequestBody.create(MediaType.parse("application/json"),
- GsonUtils.getInstance().toJson(paramMap));
- Request request = buildRequest(aiProxyConfig, body);
-
- return aiProxyConfig.getStream()
- ? handleStreamResponse(exchange, request)
- : handleNormalResponse(exchange, request);
- }
-
- private Request buildRequest(final AiProxyConfig config, final RequestBody
body) {
- return new Request.Builder()
- .url(config.getBaseUrl())
- .post(body)
- .addHeader("Content-Type", "application/json")
- .addHeader("Authorization", "Bearer " + config.getApiKey())
+ final ShenyuPluginChain chain,
+ final List<HttpMessageReader<?>> messageReaders) {
+ ServerWebExchange modifiedExchange = exchange.mutate()
+ .request(originalRequest -> originalRequest
+ .headers(httpHeaders -> convertHeader(httpHeaders,
aiProxyConfig))
+ .method(exchange.getRequest().getMethod())
+ )
.build();
+ return ServerWebExchangeUtils.rewriteRequestBody(modifiedExchange,
messageReaders, originalBody ->
+ Mono.just(convertBody(originalBody, aiProxyConfig))
+ ).flatMap(chain::execute)
+ .onErrorResume(error -> {
+ if (error instanceof ResponsiveException) {
+ return
WebFluxResultUtils.failedResult((ResponsiveException) error);
+ }
+ return Mono.error(error);
+ });
}
- private Mono<Void> handleStreamResponse(final ServerWebExchange exchange,
final Request request) {
- ServerHttpResponse exchangeResponse = exchange.getResponse();
- exchangeResponse.getHeaders().set(HttpHeaders.CONTENT_TYPE,
- org.springframework.http.MediaType.TEXT_EVENT_STREAM_VALUE);
- exchangeResponse.getHeaders().set(HttpHeaders.CACHE_CONTROL,
"no-cache");
- exchangeResponse.getHeaders().set(HttpHeaders.CONNECTION,
"keep-alive");
-
- return exchangeResponse.writeAndFlushWith(
- Flux.<Publisher<DataBuffer>>create(
- sink -> client.newCall(request).enqueue(new
StreamResponseCallback(sink, exchangeResponse)),
- FluxSink.OverflowStrategy.BUFFER));
- }
- private Mono<Void> handleNormalResponse(final ServerWebExchange exchange,
final Request request) {
- return Mono.create(sink -> {
- try (Response response = client.newCall(request).execute()) {
- if (!response.isSuccessful()) {
- sink.error(new IOException("Request failed: " + response));
- return;
- }
-
- String responseBody = response.body().string();
-
exchange.getResponse().getHeaders().setContentType(org.springframework.http.MediaType.APPLICATION_JSON);
- exchange.getResponse().writeWith(
-
Mono.just(exchange.getResponse().bufferFactory()
-
.wrap(responseBody.getBytes(StandardCharsets.UTF_8))))
- .subscribe(v -> sink.success(), sink::error);
- } catch (IOException e) {
- sink.error(e);
- }
- });
+ private static void convertHeader(final HttpHeaders httpHeaders, final
AiProxyConfig aiProxyConfig) {
+ httpHeaders.add("Authorization", "Bearer " +
aiProxyConfig.getApiKey());
+ if (aiProxyConfig.getStream()) {
+ httpHeaders.add(HttpHeaders.CONTENT_TYPE,
MediaType.TEXT_EVENT_STREAM_VALUE);
+ httpHeaders.add(HttpHeaders.CACHE_CONTROL, "no-cache");
+ httpHeaders.add(HttpHeaders.CONNECTION, "keep-alive");
+ }
}
- private record StreamResponseCallback(FluxSink<Publisher<DataBuffer>>
sink, ServerHttpResponse response) implements Callback {
-
- @Override
- public void onFailure(@NotNull final Call call, @NotNull final
IOException e) {
- sink.error(e);
- }
-
- @Override
- public void onResponse(@NotNull final Call call, @NotNull final
Response response) {
- try (ResponseBody responseBody = response.body()) {
- if (!response.isSuccessful() || Objects.isNull(responseBody)) {
- sink.error(new IOException("Request failed: " + response));
- return;
- }
-
- processStreamResponse(responseBody);
- sink.complete();
- } catch (IOException e) {
- sink.error(e);
- }
- }
-
- private void processStreamResponse(final ResponseBody responseBody)
throws IOException {
- BufferedSource source = responseBody.source();
- while (!source.exhausted()) {
- String line = source.readUtf8Line();
- if (Objects.isNull(line)) {
- break;
- }
-
- if (line.startsWith("data: ")) {
- String data = line.substring(6).trim();
- if (!"[DONE]".equals(data)) {
- DataBuffer buffer = response.bufferFactory()
- .wrap((data +
"\n").getBytes(StandardCharsets.UTF_8));
- sink.next(Flux.just(buffer));
- }
- }
- }
- }
+ private String convertBody(final String originalBody, final AiProxyConfig
aiProxyConfig) {
+ Map<String, Object> requestBodyMap =
GsonUtils.getInstance().convertToMap(originalBody);
+ requestBodyMap.put(Constants.MODEL, aiProxyConfig.getModel());
+ requestBodyMap.put(Constants.STREAM, aiProxyConfig.getStream());
+ requestBodyMap.put(Constants.PROMPT, aiProxyConfig.getPrompt());
+ return GsonUtils.getInstance().toJson(requestBodyMap);
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
b/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
index bf08236c94..1d1fbe7c4a 100644
---
a/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
+++
b/shenyu-plugin/shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.java
@@ -129,7 +129,7 @@ public interface ShenyuPlugin {
* @return http/spring cloud return true, others false.
*/
default boolean skipExceptHttpLike(ServerWebExchange exchange) {
- return !skip(exchange, RpcTypeEnum.HTTP, RpcTypeEnum.SPRING_CLOUD);
+ return !skip(exchange, RpcTypeEnum.HTTP, RpcTypeEnum.SPRING_CLOUD,
RpcTypeEnum.AI);
}
/**
diff --git
a/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/NettyClientMessageWriter.java
b/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/NettyClientMessageWriter.java
index 93ce9cb511..c548a77166 100644
---
a/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/NettyClientMessageWriter.java
+++
b/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/NettyClientMessageWriter.java
@@ -84,7 +84,7 @@ public class NettyClientMessageWriter implements
MessageWriter {
@Override
public List<String> supportTypes() {
- return Lists.newArrayList(RpcTypeEnum.HTTP.getName(),
RpcTypeEnum.SPRING_CLOUD.getName(), RpcTypeEnum.WEB_SOCKET.getName());
+ return Lists.newArrayList(RpcTypeEnum.HTTP.getName(),
RpcTypeEnum.SPRING_CLOUD.getName(), RpcTypeEnum.WEB_SOCKET.getName(),
RpcTypeEnum.AI.getName());
}
private void cleanup(final ServerWebExchange exchange) {
diff --git
a/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/WebClientMessageWriter.java
b/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/WebClientMessageWriter.java
index c55cc2930d..c3f9de6b8a 100644
---
a/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/WebClientMessageWriter.java
+++
b/shenyu-plugin/shenyu-plugin-response/src/main/java/org/apache/shenyu/plugin/response/strategy/WebClientMessageWriter.java
@@ -97,7 +97,7 @@ public class WebClientMessageWriter implements MessageWriter {
@Override
public List<String> supportTypes() {
- return Lists.newArrayList(RpcTypeEnum.HTTP.getName(),
RpcTypeEnum.SPRING_CLOUD.getName(), RpcTypeEnum.WEB_SOCKET.getName());
+ return Lists.newArrayList(RpcTypeEnum.HTTP.getName(),
RpcTypeEnum.SPRING_CLOUD.getName(), RpcTypeEnum.WEB_SOCKET.getName(),
RpcTypeEnum.AI.getName());
}
private void redrawResponseHeaders(final ServerHttpResponse response,
diff --git
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-plugin/shenyu-spring-boot-starter-plugin-ai-proxy/src/main/java/org/apache/shenyu/springboot/starter/plugin/ai/proxy/AiProxyPluginConfiguration.java
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-plugin/shenyu-spring-boot-starter-plugin-ai-proxy/src/main/java/org/apache/shenyu/springboot/starter/plugin/ai/proxy/AiProxyPluginConfiguration.java
index 70e4c0b493..e8759d575e 100644
---
a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-plugin/shenyu-spring-boot-starter-plugin-ai-proxy/src/main/java/org/apache/shenyu/springboot/starter/plugin/ai/proxy/AiProxyPluginConfiguration.java
+++
b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-plugin/shenyu-spring-boot-starter-plugin-ai-proxy/src/main/java/org/apache/shenyu/springboot/starter/plugin/ai/proxy/AiProxyPluginConfiguration.java
@@ -23,6 +23,7 @@ import org.apache.shenyu.plugin.api.ShenyuPlugin;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.http.codec.ServerCodecConfigurer;
/**
* The type ai proxy plugin configuration.
@@ -34,11 +35,12 @@ public class AiProxyPluginConfiguration {
/**
* Ai proxy plugin.
*
+ * @param configurer the configurer
* @return the shenyu plugin
*/
@Bean
- public ShenyuPlugin aiProxyPlugin() {
- return new AiProxyPlugin();
+ public ShenyuPlugin aiProxyPlugin(final ServerCodecConfigurer configurer) {
+ return new AiProxyPlugin(configurer.getReaders());
}
/**