# coding=utf-8 """ 插件模型 存储插件的注册信息、配置和状态 """ import uuid_utils.compat as uuid from django.db import models from common.mixins.app_model_mixin import AppModelMixin class PluginStatus(models.TextChoices): """插件状态""" ACTIVE = 'ACTIVE', '已启用' INACTIVE = 'INACTIVE', '已禁用' ERROR = 'ERROR', '错误' class PluginType(models.TextChoices): """插件类型""" TOOL = 'TOOL', '工具插件' KNOWLEDGE = 'KNOWLEDGE', '知识库插件' MODEL = 'MODEL', '模型插件' CUSTOM = 'CUSTOM', '自定义插件' class Plugin(AppModelMixin): """插件""" id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True) name = models.CharField(max_length=128, verbose_name="插件名称", db_index=True) code = models.CharField(max_length=64, verbose_name="插件编码", unique=True, db_index=True) desc = models.CharField(max_length=512, verbose_name="插件描述", default="") plugin_type = models.CharField( max_length=20, choices=PluginType.choices, default=PluginType.CUSTOM, verbose_name="插件类型" ) status = models.CharField( max_length=20, choices=PluginStatus.choices, default=PluginStatus.INACTIVE, verbose_name="插件状态" ) version = models.CharField(max_length=32, verbose_name="当前版本", default="1.0.0") author = models.CharField(max_length=64, verbose_name="作者", default="") icon = models.CharField(max_length=256, verbose_name="插件图标", default="") schema = models.JSONField(verbose_name="插件 Schema", default=dict) config = models.JSONField(verbose_name="插件配置", default=dict) entry_point = models.CharField(max_length=256, verbose_name="入口文件", default="") is_installed = models.BooleanField(verbose_name="是否已安装", default=False) install_time = models.DateTimeField(verbose_name="安装时间", null=True, blank=True) user = models.ForeignKey( 'users.User', on_delete=models.SET_NULL, db_constraint=False, blank=True, null=True, verbose_name="创建用户" ) class Meta: db_table = "plugin" def __str__(self): return f"{self.name} ({self.code})"