Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
dify
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-tech
dify
Commits
8dc4d122
Unverified
Commit
8dc4d122
authored
Mar 11, 2024
by
Yeuoly
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test: tool
parent
d5b321af
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
83 additions
and
7 deletions
+83
-7
tool_manager.py
api/core/tools/tool_manager.py
+6
-3
tool_node.py
api/core/workflow/nodes/tool/tool_node.py
+7
-4
test_tool.py
api/tests/integration_tests/workflow/nodes/test_tool.py
+70
-0
No files found.
api/core/tools/tool_manager.py
View file @
8dc4d122
...
@@ -315,8 +315,9 @@ class ToolManager:
...
@@ -315,8 +315,9 @@ class ToolManager:
for
parameter
in
parameters
:
for
parameter
in
parameters
:
# save tool parameter to tool entity memory
# save tool parameter to tool entity memory
value
=
ToolManager
.
_init_runtime_parameter
(
parameter
,
workflow_tool
.
tool_configurations
)
if
parameter
.
form
==
ToolParameter
.
ToolParameterForm
.
FORM
:
runtime_parameters
[
parameter
.
name
]
=
value
value
=
ToolManager
.
_init_runtime_parameter
(
parameter
,
workflow_tool
.
tool_configurations
)
runtime_parameters
[
parameter
.
name
]
=
value
# decrypt runtime parameters
# decrypt runtime parameters
encryption_manager
=
ToolParameterConfigurationManager
(
encryption_manager
=
ToolParameterConfigurationManager
(
...
@@ -325,7 +326,9 @@ class ToolManager:
...
@@ -325,7 +326,9 @@ class ToolManager:
provider_name
=
workflow_tool
.
provider_id
,
provider_name
=
workflow_tool
.
provider_id
,
provider_type
=
workflow_tool
.
provider_type
,
provider_type
=
workflow_tool
.
provider_type
,
)
)
runtime_parameters
=
encryption_manager
.
decrypt_tool_parameters
(
runtime_parameters
)
if
runtime_parameters
:
runtime_parameters
=
encryption_manager
.
decrypt_tool_parameters
(
runtime_parameters
)
tool_entity
.
runtime
.
runtime_parameters
.
update
(
runtime_parameters
)
tool_entity
.
runtime
.
runtime_parameters
.
update
(
runtime_parameters
)
return
tool_entity
return
tool_entity
...
...
api/core/workflow/nodes/tool/tool_node.py
View file @
8dc4d122
...
@@ -29,7 +29,6 @@ class ToolNode(BaseNode):
...
@@ -29,7 +29,6 @@ class ToolNode(BaseNode):
# get parameters
# get parameters
parameters
=
self
.
_generate_parameters
(
variable_pool
,
node_data
)
parameters
=
self
.
_generate_parameters
(
variable_pool
,
node_data
)
# get tool runtime
# get tool runtime
try
:
try
:
tool_runtime
=
ToolManager
.
get_workflow_tool_runtime
(
self
.
tenant_id
,
node_data
,
None
)
tool_runtime
=
ToolManager
.
get_workflow_tool_runtime
(
self
.
tenant_id
,
node_data
,
None
)
...
@@ -41,7 +40,6 @@ class ToolNode(BaseNode):
...
@@ -41,7 +40,6 @@ class ToolNode(BaseNode):
)
)
try
:
try
:
# TODO: user_id
messages
=
tool_runtime
.
invoke
(
self
.
user_id
,
parameters
)
messages
=
tool_runtime
.
invoke
(
self
.
user_id
,
parameters
)
except
Exception
as
e
:
except
Exception
as
e
:
return
NodeRunResult
(
return
NodeRunResult
(
...
@@ -68,7 +66,7 @@ class ToolNode(BaseNode):
...
@@ -68,7 +66,7 @@ class ToolNode(BaseNode):
return
{
return
{
k
.
variable
:
k
.
variable
:
k
.
value
if
k
.
variable_type
==
'static'
else
k
.
value
if
k
.
variable_type
==
'static'
else
variable_pool
.
get_variable_value
(
k
.
value
)
if
k
.
variable_type
==
'selector'
else
''
variable_pool
.
get_variable_value
(
k
.
value
_selector
)
if
k
.
variable_type
==
'selector'
else
''
for
k
in
node_data
.
tool_parameters
for
k
in
node_data
.
tool_parameters
}
}
...
@@ -77,7 +75,12 @@ class ToolNode(BaseNode):
...
@@ -77,7 +75,12 @@ class ToolNode(BaseNode):
Convert ToolInvokeMessages into tuple[plain_text, files]
Convert ToolInvokeMessages into tuple[plain_text, files]
"""
"""
# transform message and handle file storage
# transform message and handle file storage
messages
=
ToolFileMessageTransformer
.
transform_tool_invoke_messages
(
messages
)
messages
=
ToolFileMessageTransformer
.
transform_tool_invoke_messages
(
messages
=
messages
,
user_id
=
self
.
user_id
,
tenant_id
=
self
.
tenant_id
,
conversation_id
=
''
,
)
# extract plain text and files
# extract plain text and files
files
=
self
.
_extract_tool_response_binary
(
messages
)
files
=
self
.
_extract_tool_response_binary
(
messages
)
plain_text
=
self
.
_extract_tool_response_text
(
messages
)
plain_text
=
self
.
_extract_tool_response_text
(
messages
)
...
...
api/tests/integration_tests/workflow/nodes/test_tool.py
0 → 100644
View file @
8dc4d122
import
pytest
from
core.app.entities.app_invoke_entities
import
InvokeFrom
from
core.workflow.entities.variable_pool
import
VariablePool
from
core.workflow.nodes.tool.tool_node
import
ToolNode
from
models.workflow
import
WorkflowNodeExecutionStatus
"""
class ToolEntity(BaseModel):
provider_id: str
provider_type: Literal['builtin', 'api']
provider_name: str # redundancy
tool_name: str
tool_label: str # redundancy
tool_configurations: dict[str, ToolParameterValue]
class ToolNodeData(BaseNodeData, ToolEntity):
class ToolInput(VariableSelector):
variable_type: Literal['selector', 'static']
value: Optional[str]
@validator('value')
def check_value(cls, value, values, **kwargs):
if values['variable_type'] == 'static' and value is None:
raise ValueError('value is required for static variable')
return value
tool_parameters: list[ToolInput]
"""
def
test_tool_invoke
():
pool
=
VariablePool
(
system_variables
=
{},
user_inputs
=
{})
pool
.
append_variable
(
node_id
=
'1'
,
variable_key_list
=
[
'123'
,
'args1'
],
value
=
'1+1'
)
node
=
ToolNode
(
tenant_id
=
'1'
,
app_id
=
'1'
,
workflow_id
=
'1'
,
user_id
=
'1'
,
user_from
=
InvokeFrom
.
WEB_APP
,
config
=
{
'id'
:
'1'
,
'data'
:
{
'title'
:
'a'
,
'desc'
:
'a'
,
'provider_id'
:
'maths'
,
'provider_type'
:
'builtin'
,
'provider_name'
:
'maths'
,
'tool_name'
:
'eval_expression'
,
'tool_label'
:
'eval_expression'
,
'tool_configurations'
:
{},
'tool_parameters'
:
[
{
'variable'
:
'expression'
,
'value_selector'
:
[
'1'
,
'123'
,
'args1'
],
'variable_type'
:
'selector'
,
'value'
:
None
},
]
}
}
)
# execute node
result
=
node
.
run
(
pool
)
assert
result
.
status
==
WorkflowNodeExecutionStatus
.
SUCCEEDED
assert
'2'
in
result
.
outputs
[
'text'
]
assert
result
.
outputs
[
'files'
]
==
[]
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment