Files
Yeuoly 0d282de6a1 feat: support multimodal rerank and embedding (#503)
* fix: align multimodal permission mapping

* fix: implement mock interface for multimodal embeddings

* fix: support multimodal embedding

* fix: incorrect reference
2025-12-09 14:56:11 +08:00

405 lines
20 KiB
Go

package definitions
import (
"github.com/langgenius/dify-plugin-daemon/internal/core/io_tunnel/access_types"
"github.com/langgenius/dify-plugin-daemon/pkg/entities/datasource_entities"
"github.com/langgenius/dify-plugin-daemon/pkg/entities/dynamic_select_entities"
"github.com/langgenius/dify-plugin-daemon/pkg/entities/model_entities"
"github.com/langgenius/dify-plugin-daemon/pkg/entities/oauth_entities"
"github.com/langgenius/dify-plugin-daemon/pkg/entities/requests"
"github.com/langgenius/dify-plugin-daemon/pkg/entities/tool_entities"
)
// PluginDispatcher defines a plugin dispatcher
type PluginDispatcher struct {
Name string
RequestType interface{} // e.g. requests.RequestInvokeLLM
ResponseType interface{} // e.g. requests.ResponseInvokeLLM
RequestTypeString string
ResponseTypeString string
AccessType access_types.PluginAccessType
AccessAction access_types.PluginAccessAction
AccessTypeString string
AccessActionString string
BufferSize int
Path string // e.g. "/tool/invoke"
}
// Define all plugin dispatchers
var PluginDispatchers = []PluginDispatcher{
{ // No need to implement this for now, it has its special implementation in the agent service
Name: "InvokeTool",
RequestType: requests.RequestInvokeTool{},
ResponseType: tool_entities.ToolResponseChunk{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TOOL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_TOOL,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TOOL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_TOOL",
BufferSize: 1024,
Path: "/tool/invoke",
},
{
Name: "ValidateToolCredentials",
RequestType: requests.RequestValidateToolCredentials{},
ResponseType: tool_entities.ValidateCredentialsResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TOOL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_VALIDATE_TOOL_CREDENTIALS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TOOL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_VALIDATE_TOOL_CREDENTIALS",
BufferSize: 1,
Path: "/tool/validate_credentials",
},
{
Name: "GetToolRuntimeParameters",
RequestType: requests.RequestGetToolRuntimeParameters{},
ResponseType: tool_entities.GetToolRuntimeParametersResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TOOL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_GET_TOOL_RUNTIME_PARAMETERS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TOOL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_GET_TOOL_RUNTIME_PARAMETERS",
BufferSize: 1,
Path: "/tool/get_runtime_parameters",
},
{
Name: "InvokeLLM",
RequestType: requests.RequestInvokeLLM{},
ResponseType: model_entities.LLMResultChunk{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_LLM,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_LLM",
BufferSize: 512,
Path: "/llm/invoke",
},
{
Name: "GetLLMNumTokens",
RequestType: requests.RequestGetLLMNumTokens{},
ResponseType: model_entities.LLMGetNumTokensResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_GET_LLM_NUM_TOKENS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_GET_LLM_NUM_TOKENS",
BufferSize: 1,
Path: "/llm/num_tokens",
},
{
Name: "InvokeTextEmbedding",
RequestType: requests.RequestInvokeTextEmbedding{},
ResponseType: model_entities.TextEmbeddingResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_TEXT_EMBEDDING,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_TEXT_EMBEDDING",
BufferSize: 1,
Path: "/text_embedding/invoke",
},
{
Name: "InvokeMultimodalEmbedding",
RequestType: requests.RequestInvokeMultimodalEmbedding{},
ResponseType: model_entities.MultimodalEmbeddingResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_TEXT_EMBEDDING,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_TEXT_EMBEDDING",
BufferSize: 1,
Path: "/multimodal_embedding/invoke",
},
{
Name: "GetTextEmbeddingNumTokens",
RequestType: requests.RequestGetTextEmbeddingNumTokens{},
ResponseType: model_entities.GetTextEmbeddingNumTokensResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_GET_TEXT_EMBEDDING_NUM_TOKENS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_GET_TEXT_EMBEDDING_NUM_TOKENS",
BufferSize: 1,
Path: "/text_embedding/num_tokens",
},
{
Name: "InvokeRerank",
RequestType: requests.RequestInvokeRerank{},
ResponseType: model_entities.RerankResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_RERANK,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_RERANK",
BufferSize: 1,
Path: "/rerank/invoke",
},
{
Name: "InvokeMultimodalRerank",
RequestType: requests.RequestInvokeMultimodalRerank{},
ResponseType: model_entities.MultimodalRerankResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_RERANK,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_RERANK",
BufferSize: 1,
Path: "/multimodal_rerank/invoke",
},
{
Name: "InvokeTTS",
RequestType: requests.RequestInvokeTTS{},
ResponseType: model_entities.TTSResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_TTS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_TTS",
BufferSize: 512,
Path: "/tts/invoke",
},
{
Name: "GetTTSModelVoices",
RequestType: requests.RequestGetTTSModelVoices{},
ResponseType: model_entities.GetTTSVoicesResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_GET_TTS_MODEL_VOICES,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_GET_TTS_MODEL_VOICES",
BufferSize: 1,
Path: "/tts/model/voices",
},
{
Name: "InvokeSpeech2Text",
RequestType: requests.RequestInvokeSpeech2Text{},
ResponseType: model_entities.Speech2TextResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_SPEECH2TEXT,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_SPEECH2TEXT",
BufferSize: 1,
Path: "/speech2text/invoke",
},
{
Name: "InvokeModeration",
RequestType: requests.RequestInvokeModeration{},
ResponseType: model_entities.ModerationResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_MODERATION,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_MODERATION",
BufferSize: 1,
Path: "/moderation/invoke",
},
{
Name: "ValidateProviderCredentials",
RequestType: requests.RequestValidateProviderCredentials{},
ResponseType: model_entities.ValidateCredentialsResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_VALIDATE_PROVIDER_CREDENTIALS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_VALIDATE_PROVIDER_CREDENTIALS",
BufferSize: 1,
Path: "/model/validate_provider_credentials",
},
{
Name: "ValidateModelCredentials",
RequestType: requests.RequestValidateModelCredentials{},
ResponseType: model_entities.ValidateCredentialsResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_VALIDATE_MODEL_CREDENTIALS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_VALIDATE_MODEL_CREDENTIALS",
BufferSize: 1,
Path: "/model/validate_model_credentials",
},
{
Name: "GetAIModelSchema",
RequestType: requests.RequestGetAIModelSchema{},
ResponseType: model_entities.GetModelSchemasResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_MODEL,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_GET_AI_MODEL_SCHEMAS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_MODEL",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_GET_AI_MODEL_SCHEMAS",
BufferSize: 1,
Path: "/model/schema",
},
// { // No need to implement this for now, it has its special implementation in the agent service
// Name: "InvokeAgentStrategy",
// RequestType: requests.RequestInvokeAgentStrategy{},
// ResponseType: agent_entities.AgentStrategyResponseChunk{},
// AccessType: access_types.PLUGIN_ACCESS_TYPE_AGENT_STRATEGY,
// AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_AGENT_STRATEGY,
// AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_AGENT_STRATEGY",
// AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_AGENT_STRATEGY",
// BufferSize: 512,
// Path: "/agent_strategy/invoke",
// },
{
Name: "GetAuthorizationURL",
RequestType: requests.RequestOAuthGetAuthorizationURL{},
ResponseType: oauth_entities.OAuthGetAuthorizationURLResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_OAUTH,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_GET_AUTHORIZATION_URL,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_OAUTH",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_GET_AUTHORIZATION_URL",
BufferSize: 1,
Path: "/oauth/get_authorization_url",
},
{
Name: "GetCredentials",
RequestType: requests.RequestOAuthGetCredentials{},
ResponseType: oauth_entities.OAuthGetCredentialsResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_OAUTH,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_GET_CREDENTIALS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_OAUTH",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_GET_CREDENTIALS",
BufferSize: 1,
Path: "/oauth/get_credentials",
},
{
Name: "RefreshCredentials",
RequestType: requests.RequestOAuthRefreshCredentials{},
ResponseType: oauth_entities.OAuthRefreshCredentialsResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_OAUTH,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_REFRESH_CREDENTIALS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_OAUTH",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_REFRESH_CREDENTIALS",
BufferSize: 1,
Path: "/oauth/refresh_credentials",
},
{
Name: "FetchDynamicParameterOptions",
RequestType: requests.RequestDynamicParameterSelect{},
ResponseType: dynamic_select_entities.DynamicSelectResult{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_DYNAMIC_PARAMETER,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_DYNAMIC_PARAMETER_FETCH_OPTIONS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_DYNAMIC_PARAMETER",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_DYNAMIC_PARAMETER_FETCH_OPTIONS",
BufferSize: 1,
Path: "/dynamic_select/fetch_parameter_options",
},
{
Name: "DatasourceValidateCredentials",
RequestType: requests.RequestValidateDatasourceCredentials{},
ResponseType: datasource_entities.DataSourceValidateCredentialsResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_DATASOURCE,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_VALIDATE_CREDENTIALS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_DATASOURCE",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_VALIDATE_CREDENTIALS",
BufferSize: 1,
Path: "/datasource/validate_credentials",
},
{
Name: "DatasourceGetWebsiteCrawl",
RequestType: requests.RequestDatasourceGetWebsiteCrawl{},
ResponseType: datasource_entities.WebsiteCrawlChunk{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_DATASOURCE,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_WEBSITE_DATASOURCE_GET_CRAWL,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_DATASOURCE",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_WEBSITE_DATASOURCE_GET_CRAWL",
BufferSize: 1,
Path: "/datasource/get_website_crawl",
},
{
Name: "DatasourceGetOnlineDocumentPages",
RequestType: requests.RequestDatasourceGetOnlineDocumentPages{},
ResponseType: datasource_entities.DatasourceGetPagesResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_DATASOURCE,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DOCUMENT_DATASOURCE_GET_PAGES,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_DATASOURCE",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DOCUMENT_DATASOURCE_GET_PAGES",
BufferSize: 1,
Path: "/datasource/get_online_document_pages",
},
{
Name: "DatasourceGetOnlineDocumentPageContent",
RequestType: requests.RequestInvokeOnlineDocumentDatasourceGetContent{},
ResponseType: datasource_entities.DataSourceResponseChunk{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_DATASOURCE,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DOCUMENT_DATASOURCE_GET_PAGE_CONTENT,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_DATASOURCE",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DOCUMENT_DATASOURCE_GET_PAGE_CONTENT",
BufferSize: 1,
Path: "/datasource/get_online_document_page_content",
},
{
Name: "DatasourceOnlineDriveBrowseFiles",
RequestType: requests.DatasourceOnlineDriveBrowseFilesRequest{},
ResponseType: datasource_entities.GetOnlineDriveBrowseFilesResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_DATASOURCE,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DRIVE_BROWSE_FILES,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_DATASOURCE",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DRIVE_BROWSE_FILES",
BufferSize: 1,
Path: "/datasource/online_drive_browse_files",
},
{
Name: "DatasourceOnlineDriveDownloadFile",
RequestType: requests.DatasourceOnlineDriveDownloadFileRequest{},
ResponseType: datasource_entities.DataSourceResponseChunk{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_DATASOURCE,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DRIVE_DOWNLOAD_FILE,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_DATASOURCE",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_ONLINE_DRIVE_DOWNLOAD_FILE",
BufferSize: 1,
Path: "/datasource/online_drive_download_file",
},
{
Name: "TriggerInvokeEvent",
RequestType: requests.TriggerInvokeEventRequest{},
ResponseType: requests.TriggerInvokeEventResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TRIGGER,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_INVOKE_TRIGGER_EVENT,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TRIGGER",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_INVOKE_TRIGGER_EVENT",
BufferSize: 512,
Path: "/trigger/invoke_event",
},
{
Name: "TriggerValidateProviderCredentials",
RequestType: requests.TriggerValidateProviderCredentialsRequest{},
ResponseType: requests.TriggerValidateProviderCredentialsResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TRIGGER,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_VALIDATE_TRIGGER_CREDENTIALS,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TRIGGER",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_VALIDATE_TRIGGER_CREDENTIALS",
BufferSize: 1,
Path: "/trigger/validate_credentials",
},
{
Name: "TriggerDispatchEvent",
RequestType: requests.TriggerDispatchEventRequest{},
ResponseType: requests.TriggerDispatchEventResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TRIGGER,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_DISPATCH_TRIGGER_EVENT,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TRIGGER",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_DISPATCH_TRIGGER_EVENT",
BufferSize: 512,
Path: "/trigger/dispatch_event",
},
{
Name: "TriggerSubscribe",
RequestType: requests.TriggerSubscribeRequest{},
ResponseType: requests.TriggerSubscribeResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TRIGGER,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_SUBSCRIBE_TRIGGER,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TRIGGER",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_SUBSCRIBE_TRIGGER",
BufferSize: 1,
Path: "/trigger/subscribe",
},
{
Name: "TriggerUnsubscribe",
RequestType: requests.TriggerUnsubscribeRequest{},
ResponseType: requests.TriggerUnsubscribeResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TRIGGER,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_UNSUBSCRIBE_TRIGGER,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TRIGGER",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_UNSUBSCRIBE_TRIGGER",
BufferSize: 1,
Path: "/trigger/unsubscribe",
},
{
Name: "TriggerRefresh",
RequestType: requests.TriggerRefreshRequest{},
ResponseType: requests.TriggerRefreshResponse{},
AccessType: access_types.PLUGIN_ACCESS_TYPE_TRIGGER,
AccessAction: access_types.PLUGIN_ACCESS_ACTION_REFRESH_TRIGGER,
AccessTypeString: "access_types.PLUGIN_ACCESS_TYPE_TRIGGER",
AccessActionString: "access_types.PLUGIN_ACCESS_ACTION_REFRESH_TRIGGER",
BufferSize: 1,
Path: "/trigger/refresh",
},
}