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
adf2651d
Unverified
Commit
adf2651d
authored
Feb 21, 2024
by
Yash_1124
Committed by
GitHub
Feb 21, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FEAT: Add DuckDuckGo Search Tool for Enhanced Privacy-Focused Search Functionality (#2499)
parent
5031d64e
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
96 additions
and
1 deletion
+96
-1
icon.svg
api/core/tools/provider/builtin/duckduckgo/_assets/icon.svg
+1
-0
duckduckgo.py
api/core/tools/provider/builtin/duckduckgo/duckduckgo.py
+20
-0
duckduckgo.yaml
api/core/tools/provider/builtin/duckduckgo/duckduckgo.yaml
+10
-0
duckduckgo_search.py
...ls/provider/builtin/duckduckgo/tools/duckduckgo_search.py
+40
-0
duckduckgo_search.yaml
.../provider/builtin/duckduckgo/tools/duckduckgo_search.yaml
+23
-0
requirements.txt
api/requirements.txt
+2
-1
No files found.
api/core/tools/provider/builtin/duckduckgo/_assets/icon.svg
0 → 100644
View file @
adf2651d
<svg
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"64"
height=
"64"
viewBox=
"0 0 32 32"
><g
transform=
"matrix(.266667 0 0 .266667 -17.954934 -5.057333)"
><circle
cx=
"127.332"
cy=
"78.966"
r=
"51.15"
fill=
"#de5833"
/><defs><path
id=
"A"
d=
"M178.684 78.824c0 28.316-23.035 51.354-51.354 51.354-28.313 0-51.348-23.04-51.348-51.354s23.036-51.35 51.348-51.35c28.318 0 51.354 23.036 51.354 51.35z"
/></defs><clipPath
id=
"B"
><use
xlink:href=
"#A"
/></clipPath><g
clip-path=
"url(#B)"
><path
d=
"M148.293 155.158c-1.8-8.285-12.262-27.04-16.23-34.97s-7.938-19.1-6.13-26.322c.328-1.312-3.436-11.308-2.354-12.015 8.416-5.5 10.632.6 14.002-1.862 1.734-1.273 4.1 1.047 4.7-1.06 2.158-7.567-3.006-20.76-8.77-26.526-1.885-1.88-4.77-3.06-8.03-3.687-1.254-1.713-3.275-3.36-6.138-4.88-3.188-1.697-10.12-3.938-13.717-4.535-2.492-.4-3.055.287-4.12.46.992.088 5.7 2.414 6.615 2.55-.916.62-3.607-.028-5.324.742-.865.392-1.512 1.877-1.506 2.58 4.9-.496 12.574-.016 17.1 2-3.602.4-9.08.867-11.436 2.105-6.848 3.608-9.873 12.035-8.07 22.133 1.804 10.075 9.738 46.85 12.262 59.13 2.525 12.264-5.408 20.2-10.455 22.354l5.408.363-1.8 3.967c6.484.72 13.695-1.44 13.695-1.44-1.438 3.965-11.176 5.412-11.176 5.412s4.7 1.438 12.258-1.447l12.263-4.688 3.604 9.373 6.854-6.847 2.885 7.2c.014-.001 5.424-1.808 3.62-10.103z"
fill=
"#d5d7d8"
/><path
d=
"M150.47 153.477c-1.795-8.3-12.256-27.043-16.228-34.98s-7.935-19.112-6.13-26.32c.335-1.3.34-6.668 1.43-7.38 8.4-5.494 7.812-.184 11.187-2.645 1.74-1.27 3.133-2.806 3.738-4.912 2.164-7.572-3.006-20.76-8.773-26.53-1.88-1.88-4.768-3.062-8.023-3.686-1.252-1.718-3.27-3.36-6.13-4.882-5.4-2.862-12.074-4.006-18.266-2.883 1 .1 3.256 2.138 4.168 2.273-1.38.936-5.053.815-5.03 2.896 4.916-.492 10.303.285 14.834 2.297-3.602.4-6.955 1.3-9.3 2.543-6.854 3.603-8.656 10.812-6.854 20.914 1.807 10.097 9.742 46.873 12.256 59.126 2.527 12.26-5.402 20.188-10.45 22.354l5.408.36-1.8 3.973c6.484.72 13.695-1.44 13.695-1.44-1.438 3.974-11.176 5.406-11.176 5.406s4.686 1.44 12.258-1.445l12.27-4.688 3.604 9.373 6.852-6.85 2.9 7.215c-.016.007 5.388-1.797 3.58-10.088z"
fill=
"#fff"
/><path
d=
"M109.02 70.69c0-2.093 1.693-3.787 3.79-3.787 2.1 0 3.785 1.694 3.785 3.787s-1.695 3.786-3.785 3.786c-2.096.001-3.79-1.692-3.79-3.786z"
fill=
"#2d4f8e"
/><path
d=
"M113.507 69.43a.98.98 0 0 1 .98-.983c.543 0 .984.438.984.983s-.44.984-.984.984c-.538.001-.98-.44-.98-.984z"
fill=
"#fff"
/><path
d=
"M134.867 68.445c0-1.793 1.46-3.25 3.252-3.25 1.8 0 3.256 1.457 3.256 3.25 0 1.8-1.455 3.258-3.256 3.258a3.26 3.26 0 0 1-3.252-3.258z"
fill=
"#2d4f8e"
/><path
d=
"M138.725 67.363c0-.463.38-.843.838-.843a.84.84 0 0 1 .846.843c0 .47-.367.842-.846.842a.84.84 0 0 1-.838-.842z"
fill=
"#fff"
/><linearGradient
id=
"C"
gradientUnits=
"userSpaceOnUse"
x1=
"105.318"
y1=
"60.979"
x2=
"113.887"
y2=
"60.979"
><stop
offset=
".006"
stop-color=
"#6176b9"
/><stop
offset=
".691"
stop-color=
"#394a9f"
/></linearGradient><path
d=
"M113.886 59.718s-2.854-1.3-5.63.453-2.668 3.523-2.668 3.523-1.473-3.283 2.453-4.892 5.844.916 5.844.916z"
fill=
"url(#C)"
/><linearGradient
id=
"D"
gradientUnits=
"userSpaceOnUse"
x1=
"132.273"
y1=
"58.371"
x2=
"140.078"
y2=
"58.371"
><stop
offset=
".006"
stop-color=
"#6176b9"
/><stop
offset=
".691"
stop-color=
"#394a9f"
/></linearGradient><path
d=
"M140.078 59.458s-2.05-1.172-3.643-1.152c-3.27.043-4.162 1.488-4.162 1.488s.55-3.445 4.732-2.754c2.268.377 3.073 2.418 3.073 2.418z"
fill=
"url(#D)"
/></g><path
d=
"M124.4 85.295c.38-2.3 6.3-6.625 10.5-6.887 4.2-.265 5.5-.205 9-1.043s12.535-3.088 15.033-4.242c2.504-1.156 13.104.572 5.63 4.738-3.232 1.8-11.943 5.13-18.172 6.987-6.22 1.86-10-1.776-12.06 1.28-1.646 2.432-.334 5.762 7.1 6.453 10.037.93 19.66-4.52 20.72-1.625s-8.625 6.508-14.525 6.623c-5.893.1-17.77-3.896-19.555-5.137s-4.165-4.13-3.67-7.148z"
fill=
"#fdd20a"
/><path
d=
"M128.943 115.592s-14.102-7.52-14.332-4.47c-.238 3.056 0 15.5 1.643 16.45s13.396-6.108 13.396-6.108zm5.403-.474s9.635-7.285 11.754-6.815c2.1.48 2.582 15.5.7 16.23-1.88.7-12.908-3.813-12.908-3.813z"
fill=
"#65bc46"
/><path
d=
"M125.53 116.4c0 4.932-.7 7.05 1.4 7.52s6.104 0 7.518-.938.232-7.28-.232-8.465c-.477-1.174-8.696-.232-8.696 1.884z"
fill=
"#43a244"
/><path
d=
"M126.426 115.292c0 4.933-.707 7.05 1.4 7.52 2.106.48 6.104 0 7.52-.938 1.4-.94.23-7.28-.236-8.466-.473-1.173-8.692-.227-8.692 1.885z"
fill=
"#65bc46"
/><circle
cx=
"127.331"
cy=
"78.965"
r=
"57.5"
fill=
"none"
stroke=
"#de5833"
stroke-width=
"5"
/></g></svg>
\ No newline at end of file
api/core/tools/provider/builtin/duckduckgo/duckduckgo.py
0 → 100644
View file @
adf2651d
from
core.tools.errors
import
ToolProviderCredentialValidationError
from
core.tools.provider.builtin.duckduckgo.tools.duckduckgo_search
import
DuckDuckGoSearchTool
from
core.tools.provider.builtin_tool_provider
import
BuiltinToolProviderController
class
DuckDuckGoProvider
(
BuiltinToolProviderController
):
def
_validate_credentials
(
self
,
credentials
:
dict
)
->
None
:
try
:
DuckDuckGoSearchTool
()
.
fork_tool_runtime
(
meta
=
{
"credentials"
:
credentials
,
}
)
.
invoke
(
user_id
=
''
,
tool_parameters
=
{
"query"
:
"John Doe"
,
},
)
except
Exception
as
e
:
raise
ToolProviderCredentialValidationError
(
str
(
e
))
\ No newline at end of file
api/core/tools/provider/builtin/duckduckgo/duckduckgo.yaml
0 → 100644
View file @
adf2651d
identity
:
author
:
Yash Parmar
name
:
duckduckgo
label
:
en_US
:
DuckDuckGo
zh_Hans
:
DuckDuckGo
description
:
en_US
:
A privacy-focused search engine.
zh_Hans
:
一个注重隐私的搜索引擎。
icon
:
icon.svg
api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py
0 → 100644
View file @
adf2651d
from
typing
import
Any
from
langchain.tools
import
DuckDuckGoSearchRun
from
pydantic
import
BaseModel
,
Field
from
core.tools.entities.tool_entities
import
ToolInvokeMessage
from
core.tools.tool.builtin_tool
import
BuiltinTool
class
DuckDuckGoInput
(
BaseModel
):
query
:
str
=
Field
(
...
,
description
=
"Search query."
)
class
DuckDuckGoSearchTool
(
BuiltinTool
):
"""
Tool for performing a search using DuckDuckGo search engine.
"""
def
_invoke
(
self
,
user_id
:
str
,
tool_parameters
:
dict
[
str
,
Any
])
->
ToolInvokeMessage
|
list
[
ToolInvokeMessage
]:
"""
Invoke the DuckDuckGo search tool.
Args:
user_id (str): The ID of the user invoking the tool.
tool_parameters (dict[str, Any]): The parameters for the tool invocation.
Returns:
ToolInvokeMessage | list[ToolInvokeMessage]: The result of the tool invocation.
"""
query
=
tool_parameters
.
get
(
'query'
,
''
)
if
not
query
:
return
self
.
create_text_message
(
'Please input query'
)
tool
=
DuckDuckGoSearchRun
(
args_schema
=
DuckDuckGoInput
)
result
=
tool
.
run
(
query
)
return
self
.
create_text_message
(
self
.
summary
(
user_id
=
user_id
,
content
=
result
))
\ No newline at end of file
api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.yaml
0 → 100644
View file @
adf2651d
identity
:
name
:
duckduckgo_search
author
:
Yash Parmar
label
:
en_US
:
DuckDuckGo Search
zh_Hans
:
DuckDuckGo 搜索
description
:
human
:
en_US
:
Perform searches on DuckDuckGo and get results.
zh_Hans
:
在 DuckDuckGo 上进行搜索并获取结果。
llm
:
Perform searches on DuckDuckGo and get results.
parameters
:
-
name
:
query
type
:
string
required
:
true
label
:
en_US
:
Query string
zh_Hans
:
查询语句
human_description
:
en_US
:
The search query.
zh_Hans
:
搜索查询语句。
llm_description
:
Key words for searching
form
:
llm
api/requirements.txt
View file @
adf2651d
...
...
@@ -65,4 +65,5 @@ matplotlib~=3.8.2
yfinance~=0.2.35
pydub~=0.25.1
gmpy2~=2.1.5
numexpr~=2.9.0
\ No newline at end of file
numexpr~=2.9.0
duckduckgo-search==4.4.3
\ 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