plugin.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # coding=utf-8
  2. """
  3. 插件模型
  4. 存储插件的注册信息、配置和状态
  5. """
  6. import uuid_utils.compat as uuid
  7. from django.db import models
  8. from common.mixins.app_model_mixin import AppModelMixin
  9. class PluginStatus(models.TextChoices):
  10. """插件状态"""
  11. ACTIVE = 'ACTIVE', '已启用'
  12. INACTIVE = 'INACTIVE', '已禁用'
  13. ERROR = 'ERROR', '错误'
  14. class PluginType(models.TextChoices):
  15. """插件类型"""
  16. TOOL = 'TOOL', '工具插件'
  17. KNOWLEDGE = 'KNOWLEDGE', '知识库插件'
  18. MODEL = 'MODEL', '模型插件'
  19. CUSTOM = 'CUSTOM', '自定义插件'
  20. class Plugin(AppModelMixin):
  21. """插件"""
  22. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  23. workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True)
  24. name = models.CharField(max_length=128, verbose_name="插件名称", db_index=True)
  25. code = models.CharField(max_length=64, verbose_name="插件编码", unique=True, db_index=True)
  26. desc = models.CharField(max_length=512, verbose_name="插件描述", default="")
  27. plugin_type = models.CharField(
  28. max_length=20,
  29. choices=PluginType.choices,
  30. default=PluginType.CUSTOM,
  31. verbose_name="插件类型"
  32. )
  33. status = models.CharField(
  34. max_length=20,
  35. choices=PluginStatus.choices,
  36. default=PluginStatus.INACTIVE,
  37. verbose_name="插件状态"
  38. )
  39. version = models.CharField(max_length=32, verbose_name="当前版本", default="1.0.0")
  40. author = models.CharField(max_length=64, verbose_name="作者", default="")
  41. icon = models.CharField(max_length=256, verbose_name="插件图标", default="")
  42. schema = models.JSONField(verbose_name="插件 Schema", default=dict)
  43. config = models.JSONField(verbose_name="插件配置", default=dict)
  44. entry_point = models.CharField(max_length=256, verbose_name="入口文件", default="")
  45. is_installed = models.BooleanField(verbose_name="是否已安装", default=False)
  46. install_time = models.DateTimeField(verbose_name="安装时间", null=True, blank=True)
  47. user = models.ForeignKey(
  48. 'users.User',
  49. on_delete=models.SET_NULL,
  50. db_constraint=False,
  51. blank=True,
  52. null=True,
  53. verbose_name="创建用户"
  54. )
  55. class Meta:
  56. db_table = "plugin"
  57. def __str__(self):
  58. return f"{self.name} ({self.code})"