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
7f891939
Unverified
Commit
7f891939
authored
Mar 05, 2024
by
Yash Parmar
Committed by
GitHub
Mar 05, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FEAT: add tavily tool for searching... A search engine for LLM (#2681)
parent
69a5ce1e
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
239 additions
and
0 deletions
+239
-0
icon.png
api/core/tools/provider/builtin/tavily/_assets/icon.png
+0
-0
tavily.py
api/core/tools/provider/builtin/tavily/tavily.py
+22
-0
tavily.yaml
api/core/tools/provider/builtin/tavily/tavily.yaml
+29
-0
tavily_search.py
...core/tools/provider/builtin/tavily/tools/tavily_search.py
+161
-0
tavily_search.yaml
...re/tools/provider/builtin/tavily/tools/tavily_search.yaml
+27
-0
No files found.
api/core/tools/provider/builtin/tavily/_assets/icon.png
0 → 100644
View file @
7f891939
2.02 KB
api/core/tools/provider/builtin/tavily/tavily.py
0 → 100644
View file @
7f891939
from
typing
import
Any
from
core.tools.errors
import
ToolProviderCredentialValidationError
from
core.tools.provider.builtin.tavily.tools.tavily_search
import
TavilySearchTool
from
core.tools.provider.builtin_tool_provider
import
BuiltinToolProviderController
class
TavilyProvider
(
BuiltinToolProviderController
):
def
_validate_credentials
(
self
,
credentials
:
dict
[
str
,
Any
])
->
None
:
try
:
TavilySearchTool
()
.
fork_tool_runtime
(
meta
=
{
"credentials"
:
credentials
,
}
)
.
invoke
(
user_id
=
''
,
tool_parameters
=
{
"query"
:
"Sachin Tendulkar"
,
},
)
except
Exception
as
e
:
raise
ToolProviderCredentialValidationError
(
str
(
e
))
\ No newline at end of file
api/core/tools/provider/builtin/tavily/tavily.yaml
0 → 100644
View file @
7f891939
identity
:
author
:
Yash Parmar
name
:
tavily
label
:
en_US
:
Tavily
zh_Hans
:
Tavily
pt_BR
:
Tavily
description
:
en_US
:
Tavily
zh_Hans
:
Tavily
pt_BR
:
Tavily
icon
:
icon.png
credentials_for_provider
:
tavily_api_key
:
type
:
secret-input
required
:
true
label
:
en_US
:
Tavily API key
zh_Hans
:
Tavily API key
pt_BR
:
Tavily API key
placeholder
:
en_US
:
Please input your Tavily API key
zh_Hans
:
请输入你的 Tavily API key
pt_BR
:
Please input your Tavily API key
help
:
en_US
:
Get your Tavily API key from Tavily
zh_Hans
:
从 TavilyApi 获取您的 Tavily API key
pt_BR
:
Get your Tavily API key from Tavily
url
:
https://docs.tavily.com/docs/tavily-api/introduction
api/core/tools/provider/builtin/tavily/tools/tavily_search.py
0 → 100644
View file @
7f891939
from
typing
import
Any
,
Optional
import
requests
from
core.tools.entities.tool_entities
import
ToolInvokeMessage
from
core.tools.tool.builtin_tool
import
BuiltinTool
TAVILY_API_URL
=
"https://api.tavily.com"
class
TavilySearch
:
"""
A class for performing search operations using the Tavily Search API.
Args:
api_key (str): The API key for accessing the Tavily Search API.
Methods:
raw_results: Retrieves raw search results from the Tavily Search API.
results: Retrieves cleaned search results from the Tavily Search API.
clean_results: Cleans the raw search results.
"""
def
__init__
(
self
,
api_key
:
str
)
->
None
:
self
.
api_key
=
api_key
def
raw_results
(
self
,
query
:
str
,
max_results
:
Optional
[
int
]
=
3
,
search_depth
:
Optional
[
str
]
=
"advanced"
,
include_domains
:
Optional
[
list
[
str
]]
=
[],
exclude_domains
:
Optional
[
list
[
str
]]
=
[],
include_answer
:
Optional
[
bool
]
=
False
,
include_raw_content
:
Optional
[
bool
]
=
False
,
include_images
:
Optional
[
bool
]
=
False
,
)
->
dict
:
"""
Retrieves raw search results from the Tavily Search API.
Args:
query (str): The search query.
max_results (int, optional): The maximum number of results to retrieve. Defaults to 3.
search_depth (str, optional): The search depth. Defaults to "advanced".
include_domains (List[str], optional): The domains to include in the search. Defaults to [].
exclude_domains (List[str], optional): The domains to exclude from the search. Defaults to [].
include_answer (bool, optional): Whether to include answer in the search results. Defaults to False.
include_raw_content (bool, optional): Whether to include raw content in the search results. Defaults to False.
include_images (bool, optional): Whether to include images in the search results. Defaults to False.
Returns:
dict: The raw search results.
"""
params
=
{
"api_key"
:
self
.
api_key
,
"query"
:
query
,
"max_results"
:
max_results
,
"search_depth"
:
search_depth
,
"include_domains"
:
include_domains
,
"exclude_domains"
:
exclude_domains
,
"include_answer"
:
include_answer
,
"include_raw_content"
:
include_raw_content
,
"include_images"
:
include_images
,
}
response
=
requests
.
post
(
f
"{TAVILY_API_URL}/search"
,
json
=
params
)
response
.
raise_for_status
()
return
response
.
json
()
def
results
(
self
,
query
:
str
,
max_results
:
Optional
[
int
]
=
3
,
search_depth
:
Optional
[
str
]
=
"advanced"
,
include_domains
:
Optional
[
list
[
str
]]
=
[],
exclude_domains
:
Optional
[
list
[
str
]]
=
[],
include_answer
:
Optional
[
bool
]
=
False
,
include_raw_content
:
Optional
[
bool
]
=
False
,
include_images
:
Optional
[
bool
]
=
False
,
)
->
list
[
dict
]:
"""
Retrieves cleaned search results from the Tavily Search API.
Args:
query (str): The search query.
max_results (int, optional): The maximum number of results to retrieve. Defaults to 3.
search_depth (str, optional): The search depth. Defaults to "advanced".
include_domains (List[str], optional): The domains to include in the search. Defaults to [].
exclude_domains (List[str], optional): The domains to exclude from the search. Defaults to [].
include_answer (bool, optional): Whether to include answer in the search results. Defaults to False.
include_raw_content (bool, optional): Whether to include raw content in the search results. Defaults to False.
include_images (bool, optional): Whether to include images in the search results. Defaults to False.
Returns:
list: The cleaned search results.
"""
raw_search_results
=
self
.
raw_results
(
query
,
max_results
=
max_results
,
search_depth
=
search_depth
,
include_domains
=
include_domains
,
exclude_domains
=
exclude_domains
,
include_answer
=
include_answer
,
include_raw_content
=
include_raw_content
,
include_images
=
include_images
,
)
return
self
.
clean_results
(
raw_search_results
[
"results"
])
def
clean_results
(
self
,
results
:
list
[
dict
])
->
list
[
dict
]:
"""
Cleans the raw search results.
Args:
results (list): The raw search results.
Returns:
list: The cleaned search results.
"""
clean_results
=
[]
for
result
in
results
:
clean_results
.
append
(
{
"url"
:
result
[
"url"
],
"content"
:
result
[
"content"
],
}
)
# return clean results as a string
return
"
\n
"
.
join
([
f
"{res['url']}
\n
{res['content']}"
for
res
in
clean_results
])
class
TavilySearchTool
(
BuiltinTool
):
"""
A tool for searching Tavily using a given query.
"""
def
_invoke
(
self
,
user_id
:
str
,
tool_parameters
:
dict
[
str
,
Any
]
)
->
ToolInvokeMessage
|
list
[
ToolInvokeMessage
]:
"""
Invokes the Tavily search tool with the given user ID and tool parameters.
Args:
user_id (str): The ID of the user invoking the tool.
tool_parameters (Dict[str, Any]): The parameters for the Tavily search tool.
Returns:
ToolInvokeMessage | list[ToolInvokeMessage]: The result of the Tavily search tool invocation.
"""
query
=
tool_parameters
.
get
(
"query"
,
""
)
api_key
=
self
.
runtime
.
credentials
[
"tavily_api_key"
]
if
not
query
:
return
self
.
create_text_message
(
"Please input query"
)
tavily_search
=
TavilySearch
(
api_key
)
results
=
tavily_search
.
results
(
query
)
print
(
results
)
if
not
results
:
return
self
.
create_text_message
(
f
"No results found for '{query}' in Tavily"
)
else
:
return
self
.
create_text_message
(
text
=
results
)
api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml
0 → 100644
View file @
7f891939
identity
:
name
:
tavily_search
author
:
Yash Parmar
label
:
en_US
:
TavilySearch
zh_Hans
:
TavilySearch
pt_BR
:
TavilySearch
description
:
human
:
en_US
:
A tool for search engine built specifically for AI agents (LLMs), delivering real-time, accurate, and factual results at speed.
zh_Hans
:
专为人工智能代理 (LLM) 构建的搜索引擎工具,可快速提供实时、准确和真实的结果。
pt_BR
:
A tool for search engine built specifically for AI agents (LLMs), delivering real-time, accurate, and factual results at speed.
llm
:
A tool for search engine built specifically for AI agents (LLMs), delivering real-time, accurate, and factual results at speed.
parameters
:
-
name
:
query
type
:
string
required
:
true
label
:
en_US
:
Query string
zh_Hans
:
查询语句
pt_BR
:
Query string
human_description
:
en_US
:
used for searching
zh_Hans
:
用于搜索网页内容
pt_BR
:
used for searching
llm_description
:
key words for searching
form
:
llm
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