Skip to content

Commit

Permalink
Merge branch 'main' into fix/workflow-tool-file-error
Browse files Browse the repository at this point in the history
  • Loading branch information
Nov1c444 committed Feb 27, 2025
2 parents e76ff06 + 002b16e commit 1d59113
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 10 deletions.
49 changes: 43 additions & 6 deletions api/core/workflow/nodes/agent/agent_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
from core.model_runtime.entities.model_entities import ModelType
from core.plugin.manager.exc import PluginDaemonClientSideError
from core.plugin.manager.plugin import PluginInstallationManager
from core.tools.entities.tool_entities import ToolProviderType
from core.tools.entities.tool_entities import ToolParameter, ToolProviderType
from core.tools.tool_manager import ToolManager
from core.workflow.entities.node_entities import NodeRunResult
from core.workflow.entities.variable_pool import VariablePool
from core.workflow.enums import SystemVariableKey
from core.workflow.nodes.agent.entities import AgentNodeData
from core.workflow.nodes.agent.entities import AgentNodeData, ParamsAutoGenerated
from core.workflow.nodes.base.entities import BaseNodeData
from core.workflow.nodes.enums import NodeType
from core.workflow.nodes.event.event import RunCompletedEvent
Expand Down Expand Up @@ -156,16 +156,38 @@ def _generate_agent_parameters(
value = cast(list[dict[str, Any]], value)
value = [tool for tool in value if tool.get("enabled", False)]

for tool in value:
if "schemas" in tool:
tool.pop("schemas")
parameters = tool.get("parameters", {})
if all(isinstance(v, dict) for _, v in parameters.items()):
params = {}
for key, param in parameters.items():
if param.get("auto", ParamsAutoGenerated.OPEN.value) == ParamsAutoGenerated.CLOSE.value:
value_param = param.get("value", {})
params[key] = value_param.get("value", "") if value_param is not None else None
else:
params[key] = None
parameters = params
tool["settings"] = {k: v.get("value", None) for k, v in tool.get("settings", {}).items()}
tool["parameters"] = parameters

if not for_log:
if parameter.type == "array[tools]":
value = cast(list[dict[str, Any]], value)
tool_value = []
for tool in value:
provider_type = ToolProviderType(tool.get("type", ToolProviderType.BUILT_IN.value))
setting_params = tool.get("settings", {})
parameters = tool.get("parameters", {})
manual_input_params = [key for key, value in parameters.items() if value is not None]

parameters = {**parameters, **setting_params}
entity = AgentToolEntity(
provider_id=tool.get("provider_name", ""),
provider_type=ToolProviderType.BUILT_IN,
provider_type=provider_type,
tool_name=tool.get("tool_name", ""),
tool_parameters=tool.get("parameters", {}),
tool_parameters=parameters,
plugin_unique_identifier=tool.get("plugin_unique_identifier", None),
)

Expand All @@ -178,11 +200,26 @@ def _generate_agent_parameters(
tool_runtime.entity.description.llm = (
extra.get("descrption", "") or tool_runtime.entity.description.llm
)

for tool_runtime_params in tool_runtime.entity.parameters:
tool_runtime_params.form = (
ToolParameter.ToolParameterForm.FORM
if tool_runtime_params.name in manual_input_params
else tool_runtime_params.form
)
manual_input_value = {}
if tool_runtime.entity.parameters:
manual_input_value = {
key: value for key, value in parameters.items() if key in manual_input_params
}
runtime_parameters = {
**tool_runtime.runtime.runtime_parameters,
**manual_input_value,
}
tool_value.append(
{
**tool_runtime.entity.model_dump(mode="json"),
"runtime_parameters": tool_runtime.runtime.runtime_parameters,
"runtime_parameters": runtime_parameters,
"provider_type": provider_type.value,
}
)
value = tool_value
Expand Down
6 changes: 6 additions & 0 deletions api/core/workflow/nodes/agent/entities.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from enum import Enum
from typing import Any, Literal, Union

from pydantic import BaseModel
Expand All @@ -16,3 +17,8 @@ class AgentInput(BaseModel):
type: Literal["mixed", "variable", "constant"]

agent_parameters: dict[str, AgentInput]


class ParamsAutoGenerated(Enum):
CLOSE = 0
OPEN = 1
4 changes: 3 additions & 1 deletion web/app/components/base/markdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,9 @@ const Paragraph = (paragraph: any) => {
return (
<>
<ImageGallery srcs={[children_node[0].properties.src]} />
<p>{Array.isArray(paragraph.children) ? paragraph.children.slice(1) : ''}</p >
{
Array.isArray(paragraph.children) ? <p>{paragraph.children.slice(1)}</p> : null
}
</>
)
}
Expand Down
16 changes: 16 additions & 0 deletions web/service/_tools_util.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { buildProviderQuery } from './_tools_util'

describe('makeProviderQuery', () => {
test('collectionName without special chars', () => {
expect(buildProviderQuery('ABC')).toBe('provider=ABC')
})
test('should escape &', () => {
expect(buildProviderQuery('ABC&DEF')).toBe('provider=ABC%26DEF')
})
test('should escape /', () => {
expect(buildProviderQuery('ABC/DEF')).toBe('provider=ABC%2FDEF')
})
test('should escape ?', () => {
expect(buildProviderQuery('ABC?DEF')).toBe('provider=ABC%3FDEF')
})
})
5 changes: 5 additions & 0 deletions web/service/_tools_util.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export const buildProviderQuery = (collectionName: string): string => {
const query = new URLSearchParams()
query.set('provider', collectionName)
return query.toString()
}
10 changes: 7 additions & 3 deletions web/service/tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type {
} from '@/app/components/tools/types'
import type { ToolWithProvider } from '@/app/components/workflow/types'
import type { Label } from '@/app/components/tools/labels/constant'
import { buildProviderQuery } from './_tools_util'

export const fetchCollectionList = () => {
return get<Collection[]>('/workspaces/current/tool-providers')
Expand All @@ -24,11 +25,13 @@ export const fetchBuiltInToolList = (collectionName: string) => {
}

export const fetchCustomToolList = (collectionName: string) => {
return get<Tool[]>(`/workspaces/current/tool-provider/api/tools?provider=${collectionName}`)
const query = buildProviderQuery(collectionName)
return get<Tool[]>(`/workspaces/current/tool-provider/api/tools?${query}`)
}

export const fetchModelToolList = (collectionName: string) => {
return get<Tool[]>(`/workspaces/current/tool-provider/model/tools?provider=${collectionName}`)
const query = buildProviderQuery(collectionName)
return get<Tool[]>(`/workspaces/current/tool-provider/model/tools?${query}`)
}

export const fetchWorkflowToolList = (appID: string) => {
Expand Down Expand Up @@ -65,7 +68,8 @@ export const parseParamsSchema = (schema: string) => {
}

export const fetchCustomCollection = (collectionName: string) => {
return get<CustomCollectionBackend>(`/workspaces/current/tool-provider/api/get?provider=${collectionName}`)
const query = buildProviderQuery(collectionName)
return get<CustomCollectionBackend>(`/workspaces/current/tool-provider/api/get?${query}`)
}

export const createCustomCollection = (collection: CustomCollectionBackend) => {
Expand Down

0 comments on commit 1d59113

Please sign in to comment.