manage_plugin.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package service
  2. import (
  3. "time"
  4. "github.com/langgenius/dify-plugin-daemon/internal/db"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/entities"
  6. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
  7. "github.com/langgenius/dify-plugin-daemon/internal/types/models"
  8. "github.com/langgenius/dify-plugin-daemon/internal/utils/cache"
  9. )
  10. func ListPlugins(tenant_id string, page int, page_size int) *entities.Response {
  11. type installation struct {
  12. ID string `json:"id"`
  13. Name string `json:"name"`
  14. PluginID string `json:"plugin_id"`
  15. InstallationID string `json:"installation_id"`
  16. Description *plugin_entities.PluginDeclaration `json:"description"`
  17. RuntimeType plugin_entities.PluginRuntimeType `json:"runtime_type"`
  18. Version string `json:"version"`
  19. CreatedAt time.Time `json:"created_at"`
  20. UpdatedAt time.Time `json:"updated_at"`
  21. }
  22. plugin_installations, err := db.GetAll[models.PluginInstallation](
  23. db.Equal("tenant_id", tenant_id),
  24. db.Page(page, page_size),
  25. )
  26. if err != nil {
  27. return entities.NewErrorResponse(-500, err.Error())
  28. }
  29. data := make([]installation, 0, len(plugin_installations))
  30. for _, plugin_installation := range plugin_installations {
  31. plugin, err := cache.Get[models.Plugin](plugin_installation.PluginUniqueIdentifier)
  32. if err != nil {
  33. return entities.NewErrorResponse(-500, err.Error())
  34. }
  35. declaration := plugin.Declaration
  36. data = append(data, installation{
  37. ID: plugin_installation.ID,
  38. Name: declaration.Name,
  39. PluginID: plugin.ID,
  40. InstallationID: plugin_installation.ID,
  41. Description: &declaration,
  42. RuntimeType: plugin_entities.PluginRuntimeType(plugin_installation.RuntimeType),
  43. Version: declaration.Version,
  44. CreatedAt: plugin_installation.CreatedAt,
  45. UpdatedAt: plugin_installation.UpdatedAt,
  46. })
  47. }
  48. return entities.NewSuccessResponse(data)
  49. }
  50. func ListTools(tenant_id string, page int, page_size int) *entities.Response {
  51. return nil
  52. }
  53. func ListModels(tenant_id string, page int, page_size int) *entities.Response {
  54. providers := make([]plugin_entities.ModelProviderDeclaration, 0)
  55. providers = append(providers, plugin_entities.ModelProviderDeclaration{
  56. Provider: "openai",
  57. Label: plugin_entities.I18nObject{
  58. EnUS: "OpenAI",
  59. ZhHans: "OpenAI",
  60. JaJp: "OpenAI",
  61. PtBr: "OpenAI",
  62. },
  63. Description: &plugin_entities.I18nObject{
  64. EnUS: "OpenAI",
  65. ZhHans: "OpenAI",
  66. JaJp: "OpenAI",
  67. PtBr: "OpenAI",
  68. },
  69. IconSmall: &plugin_entities.I18nObject{
  70. EnUS: "icon_small.svg",
  71. ZhHans: "icon_small.svg",
  72. JaJp: "icon_small.svg",
  73. PtBr: "icon_small.svg",
  74. },
  75. IconLarge: &plugin_entities.I18nObject{
  76. EnUS: "icon_large.svg",
  77. ZhHans: "icon_large.svg",
  78. JaJp: "icon_large.svg",
  79. PtBr: "icon_large.svg",
  80. },
  81. Background: &[]string{"background.svg"}[0],
  82. SupportedModelTypes: []plugin_entities.ModelType{
  83. plugin_entities.MODEL_TYPE_LLM,
  84. },
  85. ConfigurateMethods: []plugin_entities.ModelProviderConfigurateMethod{
  86. plugin_entities.CONFIGURATE_METHOD_PREDEFINED_MODEL,
  87. plugin_entities.CONFIGURATE_METHOD_CUSTOMIZABLE_MODEL,
  88. },
  89. ProviderCredentialSchema: &plugin_entities.ModelProviderCredentialSchema{
  90. CredentialFormSchemas: []plugin_entities.ModelProviderCredentialFormSchema{
  91. {
  92. Variable: "api_key",
  93. Label: plugin_entities.I18nObject{
  94. EnUS: "API Key",
  95. ZhHans: "API Key",
  96. JaJp: "API Key",
  97. PtBr: "API Key",
  98. },
  99. Type: plugin_entities.FORM_TYPE_SECRET_INPUT,
  100. Required: true,
  101. MaxLength: 1024,
  102. },
  103. },
  104. },
  105. ModelDeclarations: []plugin_entities.ModelDeclaration{
  106. {
  107. Model: "gpt-4o",
  108. Label: plugin_entities.I18nObject{
  109. EnUS: "GPT-4o",
  110. ZhHans: "GPT-4o",
  111. JaJp: "GPT-4o",
  112. PtBr: "GPT-4o",
  113. },
  114. ModelType: plugin_entities.MODEL_TYPE_LLM,
  115. Features: []string{
  116. "multi-tool-call",
  117. },
  118. FetchFrom: plugin_entities.CONFIGURATE_METHOD_PREDEFINED_MODEL,
  119. ModelProperties: map[string]any{
  120. "mode": "chat",
  121. "context_size": 128000,
  122. },
  123. ParameterRules: []plugin_entities.ModelParameterRule{
  124. {
  125. Name: "temperature",
  126. Label: &plugin_entities.I18nObject{
  127. EnUS: "Temperature",
  128. ZhHans: "温度",
  129. JaJp: "温度",
  130. PtBr: "温度",
  131. },
  132. Type: &[]plugin_entities.ModelParameterType{plugin_entities.PARAMETER_TYPE_FLOAT}[0],
  133. Required: true,
  134. Min: &[]float64{0}[0],
  135. Max: &[]float64{1}[0],
  136. Default: &[]any{0.7}[0],
  137. Precision: &[]int{2}[0],
  138. },
  139. },
  140. },
  141. },
  142. })
  143. return entities.NewSuccessResponse(providers)
  144. }