Forráskód Böngészése

feat: support uninstall model and tools

Yeuoly 10 hónapja%!(EXTRA string=óta)
szülő
commit
bec4c6498f

+ 1 - 1
internal/core/plugin_manager/install.go

@@ -84,8 +84,8 @@ func (p *PluginManager) InstallToAWSFromPkg(tenant_id string, decoder decoder.Pl
 						FunctionURL:            lambda_url,
 						FunctionName:           lambda_function_name,
 						PluginUniqueIdentifier: unique_identity.String(),
+						Declaration:            declaration,
 					}
-					serverless_model.SetDeclaration(&declaration)
 					err = db.Create(serverless_model)
 					if err != nil {
 						new_response.Write(PluginInstallResponse{

+ 2 - 5
internal/core/plugin_manager/serverless.go

@@ -32,14 +32,11 @@ func (p *PluginManager) getServerlessPluginRuntime(
 		return nil, err
 	}
 
-	declaration, err := model.GetDeclaration()
-	if err != nil {
-		return nil, err
-	}
+	declaration := model.Declaration
 
 	// init runtime entity
 	runtime_entity := plugin_entities.PluginRuntime{
-		Config: *declaration,
+		Config: declaration,
 	}
 	runtime_entity.InitState()
 

+ 1 - 5
internal/service/endpoint.go

@@ -218,11 +218,7 @@ func ListEndpoints(tenant_id string, page int, page_size int) *entities.Response
 			return entities.NewErrorResponse(-404, fmt.Sprintf("failed to find plugin: %v", err))
 		}
 
-		plugin_declaration, err := plugin.GetDeclaration()
-		if err != nil {
-			return entities.NewErrorResponse(-404, fmt.Sprintf("failed to get plugin declaration: %v", err))
-		}
-
+		plugin_declaration := plugin.Declaration
 		if plugin_declaration.Endpoint == nil {
 			return entities.NewErrorResponse(-404, "plugin does not have an endpoint")
 		}

+ 2 - 6
internal/service/install_plugin.go

@@ -55,13 +55,9 @@ func InstallPluginFromIdentifier(
 		return entities.NewErrorResponse(-500, err.Error())
 	}
 
-	declaration, err := plugin.GetDeclaration()
-	if err != nil {
-		return entities.NewErrorResponse(-500, err.Error())
-	}
-
+	declaration := plugin.Declaration
 	// install to this workspace
-	if _, _, err := curd.CreatePlugin(tenant_id, plugin_unique_identifier, plugin.InstallType, declaration); err != nil {
+	if _, _, err := curd.CreatePlugin(tenant_id, plugin_unique_identifier, plugin.InstallType, &declaration); err != nil {
 		return entities.NewErrorResponse(-500, err.Error())
 	}
 

+ 2 - 7
internal/service/manage_plugin.go

@@ -40,23 +40,18 @@ func ListPlugins(tenant_id string, page int, page_size int) *entities.Response {
 			return entities.NewErrorResponse(-500, err.Error())
 		}
 
-		declaration, err := plugin.GetDeclaration()
-		if err != nil {
-			return entities.NewErrorResponse(-500, err.Error())
-		}
-
+		declaration := plugin.Declaration
 		data = append(data, installation{
 			ID:             plugin_installation.ID,
 			Name:           declaration.Name,
 			PluginID:       plugin.ID,
 			InstallationID: plugin_installation.ID,
-			Description:    declaration,
+			Description:    &declaration,
 			RuntimeType:    plugin_entities.PluginRuntimeType(plugin_installation.RuntimeType),
 			Version:        declaration.Version,
 			CreatedAt:      plugin_installation.CreatedAt,
 			UpdatedAt:      plugin_installation.UpdatedAt,
 		})
-
 	}
 
 	return entities.NewSuccessResponse(data)

+ 1 - 5
internal/service/setup_endpoint.go

@@ -35,11 +35,7 @@ func SetupEndpoint(
 		return entities.NewErrorResponse(-404, fmt.Sprintf("failed to find plugin: %v", err))
 	}
 
-	declaration, err := plugin.GetDeclaration()
-	if err != nil {
-		return entities.NewErrorResponse(-404, fmt.Sprintf("failed to get plugin declaration: %v", err))
-	}
-
+	declaration := plugin.Declaration
 	if !declaration.Resource.Permission.AllowRegisterEndpoint() {
 		return entities.NewErrorResponse(-403, "permission denied")
 	}

+ 30 - 2
internal/types/models/curd/atomic.go

@@ -6,7 +6,6 @@ import (
 	"github.com/langgenius/dify-plugin-daemon/internal/db"
 	"github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
 	"github.com/langgenius/dify-plugin-daemon/internal/types/models"
-	"github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
 	"gorm.io/gorm"
 )
 
@@ -40,7 +39,7 @@ func CreatePlugin(
 				PluginUniqueIdentifier: plugin_unique_identifier.String(),
 				InstallType:            install_type,
 				Refers:                 1,
-				Declaration:            parser.MarshalJson(declaration),
+				Declaration:            *declaration,
 			}
 
 			err := db.Create(plugin, tx)
@@ -207,6 +206,35 @@ func DeletePlugin(tenant_id string, plugin_unique_identifier plugin_entities.Plu
 			installation_to_be_returns = &installation
 		}
 
+		// delete tool installation
+		declaration := p.Declaration
+		if declaration.Tool != nil {
+			tool_installation := &models.ToolInstallation{
+				PluginID:               plugin_to_be_returns.PluginID,
+				PluginUniqueIdentifier: plugin_to_be_returns.PluginUniqueIdentifier,
+				TenantID:               tenant_id,
+			}
+
+			err := db.DeleteByCondition(&tool_installation, tx)
+			if err != nil {
+				return err
+			}
+		}
+
+		// delete model installation
+		if declaration.Model != nil {
+			model_installation := &models.AIModelInstallation{
+				PluginID:               plugin_to_be_returns.PluginID,
+				PluginUniqueIdentifier: plugin_to_be_returns.PluginUniqueIdentifier,
+				TenantID:               tenant_id,
+			}
+
+			err := db.DeleteByCondition(&model_installation, tx)
+			if err != nil {
+				return err
+			}
+		}
+
 		if plugin_to_be_returns.Refers == 0 {
 			err := db.Delete(&plugin_to_be_returns, tx)
 			if err != nil {

+ 7 - 30
internal/types/models/plugin.go

@@ -2,7 +2,6 @@ package models
 
 import (
 	"github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
-	"github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
 )
 
 type Plugin struct {
@@ -14,16 +13,7 @@ type Plugin struct {
 	Refers       int                               `json:"refers" gorm:"default:0"`
 	InstallType  plugin_entities.PluginRuntimeType `json:"install_type" gorm:"size:127;index"`
 	ManifestType plugin_entities.DifyManifestType  `json:"manifest_type" gorm:"size:127"`
-	Declaration  string                            `json:"declaration" gorm:"type:text;size:65535"`
-}
-
-func (p *Plugin) GetDeclaration() (*plugin_entities.PluginDeclaration, error) {
-	declaration, err := parser.UnmarshalJson[plugin_entities.PluginDeclaration](p.Declaration)
-	if err != nil {
-		return nil, err
-	}
-
-	return &declaration, nil
+	Declaration  plugin_entities.PluginDeclaration `json:"declaration" gorm:"serializer:json;type:text;size:65535"`
 }
 
 type ServerlessRuntimeType string
@@ -34,23 +24,10 @@ const (
 
 type ServerlessRuntime struct {
 	Model
-	PluginUniqueIdentifier string                `json:"plugin_unique_identifier" gorm:"size:127;unique"`
-	FunctionURL            string                `json:"function_url" gorm:"size:255"`
-	FunctionName           string                `json:"function_name" gorm:"size:127"`
-	Type                   ServerlessRuntimeType `json:"type" gorm:"size:127"`
-	Declaration            string                `json:"declaration" gorm:"type:text;size:65535"`
-	Checksum               string                `json:"checksum" gorm:"size:127;index"`
-}
-
-func (p *ServerlessRuntime) GetDeclaration() (*plugin_entities.PluginDeclaration, error) {
-	declaration, err := parser.UnmarshalJson[plugin_entities.PluginDeclaration](p.Declaration)
-	if err != nil {
-		return nil, err
-	}
-
-	return &declaration, nil
-}
-
-func (p *ServerlessRuntime) SetDeclaration(declaration *plugin_entities.PluginDeclaration) {
-	p.Declaration = parser.MarshalJson(declaration)
+	PluginUniqueIdentifier string                            `json:"plugin_unique_identifier" gorm:"size:127;unique"`
+	FunctionURL            string                            `json:"function_url" gorm:"size:255"`
+	FunctionName           string                            `json:"function_name" gorm:"size:127"`
+	Type                   ServerlessRuntimeType             `json:"type" gorm:"size:127"`
+	Declaration            plugin_entities.PluginDeclaration `json:"declaration" gorm:"serializer:json;type:text;size:65535"`
+	Checksum               string                            `json:"checksum" gorm:"size:127;index"`
 }