mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-14 02:45:53 +08:00
feat: Add Optional API Key, Proxy Server, and Bypass Cache Parameters to Jina Tools (#5197)
This commit is contained in:
parent
0f35d07052
commit
337bad8525
@ -1,14 +1,32 @@
|
|||||||
|
import json
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from core.tools.entities.values import ToolLabelEnum
|
from core.tools.entities.values import ToolLabelEnum
|
||||||
from core.tools.errors import ToolProviderCredentialValidationError
|
from core.tools.errors import ToolProviderCredentialValidationError
|
||||||
|
from core.tools.provider.builtin.jina.tools.jina_reader import JinaReaderTool
|
||||||
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
|
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
|
||||||
|
|
||||||
|
|
||||||
class GoogleProvider(BuiltinToolProviderController):
|
class GoogleProvider(BuiltinToolProviderController):
|
||||||
def _validate_credentials(self, credentials: dict[str, Any]) -> None:
|
def _validate_credentials(self, credentials: dict[str, Any]) -> None:
|
||||||
try:
|
try:
|
||||||
pass
|
if credentials['api_key'] is None:
|
||||||
|
credentials['api_key'] = ''
|
||||||
|
else:
|
||||||
|
result = JinaReaderTool().fork_tool_runtime(
|
||||||
|
runtime={
|
||||||
|
"credentials": credentials,
|
||||||
|
}
|
||||||
|
).invoke(
|
||||||
|
user_id='',
|
||||||
|
tool_parameters={
|
||||||
|
"url": "https://example.com",
|
||||||
|
},
|
||||||
|
)[0]
|
||||||
|
|
||||||
|
message = json.loads(result.message)
|
||||||
|
if message['code'] != 200:
|
||||||
|
raise ToolProviderCredentialValidationError(message['message'])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ToolProviderCredentialValidationError(str(e))
|
raise ToolProviderCredentialValidationError(str(e))
|
||||||
|
|
||||||
|
@ -14,3 +14,19 @@ identity:
|
|||||||
- search
|
- search
|
||||||
- productivity
|
- productivity
|
||||||
credentials_for_provider:
|
credentials_for_provider:
|
||||||
|
api_key:
|
||||||
|
type: secret-input
|
||||||
|
required: false
|
||||||
|
label:
|
||||||
|
en_US: API Key (leave empty if you don't have one)
|
||||||
|
zh_Hans: API 密钥(可留空)
|
||||||
|
pt_BR: Chave API (deixe vazio se você não tiver uma)
|
||||||
|
placeholder:
|
||||||
|
en_US: Please enter your Jina API key
|
||||||
|
zh_Hans: 请输入你的 Jina API 密钥
|
||||||
|
pt_BR: Por favor, insira sua chave de API do Jina
|
||||||
|
help:
|
||||||
|
en_US: Get your Jina API key from Jina (optional, but you can get a higher rate)
|
||||||
|
zh_Hans: 从 Jina 获取您的 Jina API 密钥(非必须,能得到更高的速率)
|
||||||
|
pt_BR: Obtenha sua chave de API do Jina na Jina (opcional, mas você pode obter uma taxa mais alta)
|
||||||
|
url: https://jina.ai
|
||||||
|
@ -23,14 +23,24 @@ class JinaReaderTool(BuiltinTool):
|
|||||||
'Accept': 'application/json'
|
'Accept': 'application/json'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if 'api_key' in self.runtime.credentials and self.runtime.credentials.get('api_key'):
|
||||||
|
headers['Authorization'] = "Bearer " + self.runtime.credentials.get('api_key')
|
||||||
|
|
||||||
target_selector = tool_parameters.get('target_selector', None)
|
target_selector = tool_parameters.get('target_selector', None)
|
||||||
if target_selector is not None:
|
if target_selector is not None and target_selector != '':
|
||||||
headers['X-Target-Selector'] = target_selector
|
headers['X-Target-Selector'] = target_selector
|
||||||
|
|
||||||
wait_for_selector = tool_parameters.get('wait_for_selector', None)
|
wait_for_selector = tool_parameters.get('wait_for_selector', None)
|
||||||
if wait_for_selector is not None:
|
if wait_for_selector is not None and wait_for_selector != '':
|
||||||
headers['X-Wait-For-Selector'] = wait_for_selector
|
headers['X-Wait-For-Selector'] = wait_for_selector
|
||||||
|
|
||||||
|
proxy_server = tool_parameters.get('proxy_server', None)
|
||||||
|
if proxy_server is not None and proxy_server != '':
|
||||||
|
headers['X-Proxy-Url'] = proxy_server
|
||||||
|
|
||||||
|
if tool_parameters.get('no_cache', False):
|
||||||
|
headers['X-No-Cache'] = 'true'
|
||||||
|
|
||||||
response = ssrf_proxy.get(
|
response = ssrf_proxy.get(
|
||||||
str(URL(self._jina_reader_endpoint + url)),
|
str(URL(self._jina_reader_endpoint + url)),
|
||||||
headers=headers,
|
headers=headers,
|
||||||
|
@ -51,6 +51,33 @@ parameters:
|
|||||||
pt_BR: css selector for waiting for specific elements
|
pt_BR: css selector for waiting for specific elements
|
||||||
llm_description: css selector of the target element to wait for
|
llm_description: css selector of the target element to wait for
|
||||||
form: form
|
form: form
|
||||||
|
- name: proxy_server
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
label:
|
||||||
|
en_US: Proxy server
|
||||||
|
zh_Hans: 代理服务器
|
||||||
|
pt_BR: Servidor de proxy
|
||||||
|
human_description:
|
||||||
|
en_US: Use proxy to access URLs
|
||||||
|
zh_Hans: 利用代理访问 URL
|
||||||
|
pt_BR: Use proxy to access URLs
|
||||||
|
llm_description: Use proxy to access URLs
|
||||||
|
form: form
|
||||||
|
- name: no_cache
|
||||||
|
type: boolean
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
label:
|
||||||
|
en_US: Bypass the Cache
|
||||||
|
zh_Hans: 绕过缓存
|
||||||
|
pt_BR: Ignorar o cache
|
||||||
|
human_description:
|
||||||
|
en_US: Bypass the Cache
|
||||||
|
zh_Hans: 是否绕过缓存
|
||||||
|
pt_BR: Ignorar o cache
|
||||||
|
llm_description: bypass the cache
|
||||||
|
form: form
|
||||||
- name: summary
|
- name: summary
|
||||||
type: boolean
|
type: boolean
|
||||||
required: false
|
required: false
|
||||||
|
@ -21,6 +21,16 @@ class JinaSearchTool(BuiltinTool):
|
|||||||
'Accept': 'application/json'
|
'Accept': 'application/json'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if 'api_key' in self.runtime.credentials and self.runtime.credentials.get('api_key'):
|
||||||
|
headers['Authorization'] = "Bearer " + self.runtime.credentials.get('api_key')
|
||||||
|
|
||||||
|
proxy_server = tool_parameters.get('proxy_server', None)
|
||||||
|
if proxy_server is not None and proxy_server != '':
|
||||||
|
headers['X-Proxy-Url'] = proxy_server
|
||||||
|
|
||||||
|
if tool_parameters.get('no_cache', False):
|
||||||
|
headers['X-No-Cache'] = 'true'
|
||||||
|
|
||||||
response = ssrf_proxy.get(
|
response = ssrf_proxy.get(
|
||||||
str(URL(self._jina_search_endpoint + query)),
|
str(URL(self._jina_search_endpoint + query)),
|
||||||
headers=headers,
|
headers=headers,
|
||||||
|
@ -8,6 +8,7 @@ identity:
|
|||||||
description:
|
description:
|
||||||
human:
|
human:
|
||||||
en_US: Search on the web and get the top 5 results. Useful for grounding using information from the web.
|
en_US: Search on the web and get the top 5 results. Useful for grounding using information from the web.
|
||||||
|
zh_Hans: 在网络上搜索返回前 5 个结果。
|
||||||
llm: A tool for searching results on the web for grounding. Input should be a simple question.
|
llm: A tool for searching results on the web for grounding. Input should be a simple question.
|
||||||
parameters:
|
parameters:
|
||||||
- name: query
|
- name: query
|
||||||
@ -15,7 +16,36 @@ parameters:
|
|||||||
required: true
|
required: true
|
||||||
label:
|
label:
|
||||||
en_US: Question (Query)
|
en_US: Question (Query)
|
||||||
|
zh_Hans: 信息查询
|
||||||
human_description:
|
human_description:
|
||||||
en_US: used to find information on the web
|
en_US: used to find information on the web
|
||||||
|
zh_Hans: 在网络上搜索信息
|
||||||
llm_description: simple question to ask on the web
|
llm_description: simple question to ask on the web
|
||||||
form: llm
|
form: llm
|
||||||
|
- name: proxy_server
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
label:
|
||||||
|
en_US: Proxy server
|
||||||
|
zh_Hans: 代理服务器
|
||||||
|
pt_BR: Servidor de proxy
|
||||||
|
human_description:
|
||||||
|
en_US: Use proxy to access URLs
|
||||||
|
zh_Hans: 利用代理访问 URL
|
||||||
|
pt_BR: Use proxy to access URLs
|
||||||
|
llm_description: Use proxy to access URLs
|
||||||
|
form: form
|
||||||
|
- name: no_cache
|
||||||
|
type: boolean
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
label:
|
||||||
|
en_US: Bypass the Cache
|
||||||
|
zh_Hans: 绕过缓存
|
||||||
|
pt_BR: Ignorar o cache
|
||||||
|
human_description:
|
||||||
|
en_US: Bypass the Cache
|
||||||
|
zh_Hans: 是否绕过缓存
|
||||||
|
pt_BR: Ignorar o cache
|
||||||
|
llm_description: bypass the cache
|
||||||
|
form: form
|
||||||
|
Loading…
x
Reference in New Issue
Block a user