pull/17608/head
fuwx 1 year ago
parent 6af3f00c9b
commit 7dd1ee3691
No known key found for this signature in database
GPG Key ID: C8FA8C18DFB4702B

@ -563,6 +563,22 @@ class ToolBuiltinListApi(Resource):
]
)
class APOToolListApi(Resource):
def get(self):
user = current_user
user_id = user.id
tenant_id = user.current_tenant_id
return jsonable_encoder(
[
provider.to_dict()
for provider in BuiltinToolManageService.list_all_apo_tools(
user_id,
tenant_id,
)
]
)
class APOToolBuiltinListApi(Resource):
def get(self):
@ -785,6 +801,7 @@ api.add_resource(ToolWorkflowProviderListToolApi, "/workspaces/current/tool-prov
api.add_resource(ToolBuiltinListApi, "/workspaces/current/tools/builtin")
api.add_resource(APOToolBuiltinListApi, "/workspaces/current/tools/apo")
api.add_resource(APOToolListApi, "/workspaces/current/tools/apo/list")
api.add_resource(APOToolPreviewApi, "/workspaces/current/tools/apo/preview")
api.add_resource(ToolApiListApi, "/workspaces/current/tools/api")
api.add_resource(ToolWorkflowListApi, "/workspaces/current/tools/workflow")

@ -14,7 +14,7 @@ description:
display:
type: alert
title: alert
uint: alert
unit: alert
parameters:
- name: service
type: string

@ -8,7 +8,7 @@ identity:
display:
type: metric
title: 基础设施情况 - 容器CPU - 容器CPU使用率 - Containerd
uint: percent(0-100)百分比
unit: percent(0-100)百分比
description:
human:
en_US: Query the CPU utilization of the container

@ -14,7 +14,7 @@ description:
display:
type: metric
title: 基础设施情况 - 容器内存 - 容器内存使用率 - Containerd
uint: bytes 字节
unit: bytes 字节
parameters:
- name: pod
type: string

@ -14,7 +14,7 @@ description:
display:
type: metric
title: 基础设施情况 - 容器网络 - 与下游服务RTT
uint: s 秒
unit: s 秒
parameters:
- name: pod
type: string

@ -14,7 +14,7 @@ description:
display:
type: log
title: log
uint: log
unit: log
parameters:
- name: service
type: string

@ -0,0 +1,45 @@
import json
from collections.abc import Generator
from typing import Any, Optional
import requests
from configs import dify_config
from core.tools.builtin_tool.tool import BuiltinTool
from core.tools.entities.tool_entities import ToolInvokeMessage
from libs.apo_utils import APOUtils
class OriginxServiceRedAvgRespTool(BuiltinTool):
def _invoke(
self,
user_id: str,
tool_parameters: dict[str, Any],
conversation_id: Optional[str] = None,
app_id: Optional[str] = None,
message_id: Optional[str] = None,
) -> Generator[ToolInvokeMessage, None, None]:
service_name = tool_parameters.get("service_name")
content_key = tool_parameters.get("content_key")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': 'Originx 北极星指标 (服务层级) - RED指标 - 平均响应时间',
'params': {
"service_name": service_name,
"content_key": content_key
},
'startTime': start_time,
'endTime': end_time,
'step': APOUtils.get_step(start_time, end_time),
}
resp = requests.post(dify_config.APO_BACKEND_URL + '/api/metric/query', json=params)
list = resp.json()['result']
list = json.dumps({
'type': 'metric',
'display': True,
'unit': list['unit'],
'data': {
"timeseries": list['timeseries']
}
})
yield self.create_text_message(list)

@ -0,0 +1,70 @@
identity:
name: originx_service_red_avg_resp
author: APO
label:
en_US: Query the CPU utilization of the host
zh_Hans: Originx 北极星指标 (服务层级) - RED指标 - 平均响应时间
pt_BR: Query the CPU utilization of the host
description:
human:
en_US: Query the CPU utilization of the host
zh_Hans: 服务平均响应时间(毫秒,按服务名和内容键统计,指定时间段内)
pt_BR: Query the CPU utilization of the host
llm: 服务平均响应时间(毫秒,按服务名和内容键统计,指定时间段内)
display:
type: metric
title: Originx 北极星指标 (服务层级) - RED指标 - 平均响应时间
unit: ms
parameters:
- name: service_name
type: string
required: true
label:
en_US: service_name
zh_Hans: service_name
pt_BR: service_name
human_description:
en_US: Specified service name
zh_Hans: 指定的服务名
pt_BR: Specified service name
llm_description: 指定的服务名
form: llm
- name: content_key
type: string
required: true
label:
en_US: content_key
zh_Hans: content_key
pt_BR: content_key
human_description:
en_US: Specified endpoint name
zh_Hans: 指定的服务端点名
pt_BR: Specified endpoint name
llm_description: 指定的服务端点名
form: llm
- name: startTime
type: number
required: true
label:
en_US: startTime
zh_Hans: startTime
pt_BR: startTime
human_description:
en_US: Data query start time
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
form: llm
- name: endTime
type: number
required: true
label:
en_US: endTime
zh_Hans: endTime
pt_BR: endTime
human_description:
en_US: Data query end time
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -14,7 +14,7 @@ description:
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - CPU Busy
uint: percent(0-100)百分比
unit: percent(0-100)百分比
parameters:
- name: node
type: string

@ -14,7 +14,7 @@ description:
display:
type: topology
title: topology
uint: toplogy
unit: toplogy
parameters:
- name: service
type: string

@ -320,7 +320,7 @@ class ToolDescription(BaseModel):
class APODisPlay(BaseModel):
type: str = Field(..., description="The type of the apo data display")
uint: str = Field(..., description="The unit of the apo data display")
unit: str = Field(..., description="The unit of the apo data display")
title: str = Field(..., description="The title of the apo data display")
class ToolEntity(BaseModel):

@ -293,14 +293,6 @@ class BuiltinToolManageService:
"""
list apo tools
"""
apo_tool = "apo_select"
match tool_type:
case "analysis":
apo_tool = "apo_analysis"
case "select":
apo_tool = "apo_select"
case "rule":
apo_tool = "apo_rule"
# get all builtin providers
provider_controllers = ToolManager.list_builtin_providers(tenant_id)
@ -331,7 +323,7 @@ class BuiltinToolManageService:
name_func=lambda x: x.identity.name,
):
continue
if provider_controller.entity.identity.name != apo_tool:
if provider_controller.entity.identity.name != tool_type:
continue
# convert provider controller to user provider
@ -358,8 +350,8 @@ class BuiltinToolManageService:
else:
match_tools = process.extract(
query,
[tool.entity.description.human.zh_Hans for tool in tools],
limit=5,
[tool.entity.identity.label.zh_Hans for tool in tools],
limit=10,
)
for match_name, score, index in match_tools or []:
tool = tools[index]
@ -377,6 +369,71 @@ class BuiltinToolManageService:
raise e
return BuiltinToolProviderSort.sort(result)
@staticmethod
def list_all_apo_tools(user_id: str, tenant_id: str) -> list[ToolProviderApiEntity]:
"""
list all apo tools
"""
# get all builtin providers
provider_controllers = ToolManager.list_builtin_providers(tenant_id)
with db.session.no_autoflush:
# get all user added providers
db_providers: list[BuiltinToolProvider] = (
db.session.query(BuiltinToolProvider).filter(BuiltinToolProvider.tenant_id == tenant_id).all() or []
)
# rewrite db_providers
for db_provider in db_providers:
db_provider.provider = str(ToolProviderID(db_provider.provider))
# find provider
def find_provider(provider):
return next(filter(lambda db_provider: db_provider.provider == provider, db_providers), None)
result: list[ToolProviderApiEntity] = []
for provider_controller in provider_controllers:
try:
# handle include, exclude
if is_filtered(
include_set=dify_config.POSITION_TOOL_INCLUDES_SET, # type: ignore
exclude_set=dify_config.POSITION_TOOL_EXCLUDES_SET, # type: ignore
data=provider_controller,
name_func=lambda x: x.identity.name,
):
continue
if provider_controller.entity.identity.name not in ["apo_select", "apo_analysis", "apo_rule"]:
continue
# convert provider controller to user provider
user_builtin_provider = ToolTransformService.builtin_provider_to_user_provider(
provider_controller=provider_controller,
db_provider=find_provider(provider_controller.entity.identity.name),
decrypt_credentials=True,
)
# add icon
ToolTransformService.repack_provider(tenant_id=tenant_id, provider=user_builtin_provider)
tools = provider_controller.get_tools()
for tool in tools or []:
user_builtin_provider.tools.append(
ToolTransformService.convert_tool_entity_to_api_entity(
tenant_id=tenant_id,
tool=tool,
credentials=user_builtin_provider.original_credentials,
labels=ToolLabelManager.get_tool_labels(provider_controller),
)
)
result.append(user_builtin_provider)
except Exception as e:
raise e
return BuiltinToolProviderSort.sort(result)
@staticmethod
def _fetch_builtin_provider(provider_name: str, tenant_id: str) -> BuiltinToolProvider | None:

Loading…
Cancel
Save