feat: enhance dynamic select options API to include user ID and provider type

pull/21425/head
Yeuoly 11 months ago
parent 706ca20653
commit 82482993d6

@ -503,21 +503,29 @@ class PluginFetchDynamicSelectOptionsApi(Resource):
@login_required
@account_initialization_required
def get(self):
tenant_id = current_user.current_tenant_id
# check if the user is admin or owner
if not current_user.is_admin_or_owner:
raise Forbidden()
tenant_id = current_user.current_tenant_id
user_id = current_user.id
parser = reqparse.RequestParser()
parser.add_argument("plugin_id", type=str, required=True, location="args")
parser.add_argument("provider", type=str, required=True, location="args")
parser.add_argument("action", type=str, required=True, location="args")
parser.add_argument("parameter", type=str, required=True, location="args")
parser.add_argument("provider_type", type=str, required=True, location="args")
args = parser.parse_args()
options = PluginParameterService.get_dynamic_select_options(
tenant_id, args["plugin_id"], args["provider"], args["action"], args["parameter"]
tenant_id,
user_id,
args["plugin_id"],
args["provider"],
args["action"],
args["parameter"],
args["provider_type"],
)
return jsonable_encoder({"options": options})

@ -0,0 +1,39 @@
from collections.abc import Mapping, Sequence
from typing import Any
from core.plugin.entities.parameters import PluginParameterOption
from core.plugin.impl.base import BasePluginClient
class DynamicSelectClient(BasePluginClient):
def fetch_dynamic_select_options(
self,
tenant_id: str,
user_id: str,
plugin_id: str,
provider: str,
action: str,
credentials: Mapping[str, Any],
parameter: str,
) -> Sequence[PluginParameterOption]:
"""
Fetch dynamic select options for a plugin parameter.
"""
return self._request_with_plugin_daemon_response(
"GET",
f"plugin/{tenant_id}/dispatch/dynamic_select/fetch_parameter_options",
list[PluginParameterOption],
data={
"user_id": user_id,
"data": {
"provider": provider,
"credentials": credentials,
"provider_action": action,
"parameter": parameter,
},
},
headers={
"X-Plugin-ID": plugin_id,
"Content-Type": "application/json",
},
)

@ -1,11 +1,21 @@
from collections.abc import Sequence
from typing import Literal
from core.plugin.entities.parameters import PluginParameterOption
from core.plugin.impl.dynamic_select import DynamicSelectClient
class PluginParameterService:
@staticmethod
def get_dynamic_select_options(
tenant_id: str, plugin_id: str, provider: str, action: str, parameter: str
) -> list[PluginParameterOption]:
tenant_id: str,
user_id: str,
plugin_id: str,
provider: str,
action: str,
parameter: str,
provider_type: Literal["tool"],
) -> Sequence[PluginParameterOption]:
"""
Get dynamic select options for a plugin parameter.
@ -14,5 +24,11 @@ class PluginParameterService:
plugin_id: The plugin ID.
provider: The provider name.
action: The action name.
parameter: The parameter name.
"""
return []
# TODO: get credentials from db
credentials = {}
return DynamicSelectClient().fetch_dynamic_select_options(
tenant_id, user_id, plugin_id, provider, action, credentials, parameter
)

@ -329,6 +329,7 @@ const VarReferencePicker: FC<Props> = ({
const [isLoading, setIsLoading] = useState(false)
const { mutateAsync: fetchDynamicOptions } = useFetchDynamicOptions(
currentProvider?.plugin_id || '', currentProvider?.name || '', currentTool?.name || '', (schema as CredentialFormSchemaSelect).variable,
'tool',
)
const handleFetchDynamicOptions = async () => {
if (schema?.type !== FormTypeEnum.dynamicSelect || !currentTool || !currentProvider)

@ -573,7 +573,7 @@ export const usePluginInfo = (providerName?: string) => {
})
}
export const useFetchDynamicOptions = (plugin_id: string, provider: string, action: string, parameter: string) => {
export const useFetchDynamicOptions = (plugin_id: string, provider: string, action: string, parameter: string, provider_type: 'tool') => {
return useMutation({
mutationFn: () => get<{ options: FormOption[] }>('/workspaces/current/plugin/parameters/dynamic-options', {
params: {
@ -581,6 +581,7 @@ export const useFetchDynamicOptions = (plugin_id: string, provider: string, acti
provider,
action,
parameter,
provider_type,
},
}),
})

Loading…
Cancel
Save