http_server.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package server
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "time"
  7. "github.com/gin-gonic/gin"
  8. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_daemon/backwards_invocation/transaction"
  9. "github.com/langgenius/dify-plugin-daemon/internal/server/controllers"
  10. "github.com/langgenius/dify-plugin-daemon/internal/service"
  11. "github.com/langgenius/dify-plugin-daemon/internal/types/app"
  12. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  13. )
  14. func (app *App) server(config *app.Config) func() {
  15. engine := gin.Default()
  16. engine.GET("/health/check", controllers.HealthCheck)
  17. app.pluginInvokeGroup(engine.Group("/plugin"), config)
  18. app.remoteDebuggingGroup(engine.Group("/plugin/debugging"), config)
  19. app.endpointGroup(engine.Group("/e"), config)
  20. app.awsLambdaTransactionGroup(engine.Group("/backwards-invocation"), config)
  21. app.endpointManagementGroup(engine.Group("/endpoint"))
  22. app.pluginGroup(engine.Group("/plugin"), config)
  23. srv := &http.Server{
  24. Addr: fmt.Sprintf(":%d", config.ServerPort),
  25. Handler: engine,
  26. }
  27. go func() {
  28. if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  29. log.Panic("listen: %s\n", err)
  30. }
  31. }()
  32. return func() {
  33. if err := srv.Shutdown(context.Background()); err != nil {
  34. log.Panic("Server Shutdown: %s\n", err)
  35. }
  36. }
  37. }
  38. func (app *App) pluginInvokeGroup(group *gin.RouterGroup, config *app.Config) {
  39. group.Use(CheckingKey(config.PluginServerApiKey))
  40. group.Use(app.RedirectPluginInvoke())
  41. group.Use(app.InitClusterID())
  42. group.POST("/tool/invoke", controllers.InvokeTool(config))
  43. group.POST("/tool/validate_credentials", controllers.ValidateToolCredentials(config))
  44. group.POST("/llm/invoke", controllers.InvokeLLM(config))
  45. group.POST("/text_embedding/invoke", controllers.InvokeTextEmbedding(config))
  46. group.POST("/rerank/invoke", controllers.InvokeRerank(config))
  47. group.POST("/tts/invoke", controllers.InvokeTTS(config))
  48. group.POST("/speech2text/invoke", controllers.InvokeSpeech2Text(config))
  49. group.POST("/moderation/invoke", controllers.InvokeModeration(config))
  50. group.POST("/model/validate_provider_credentials", controllers.ValidateProviderCredentials(config))
  51. group.POST("/model/validate_model_credentials", controllers.ValidateModelCredentials(config))
  52. }
  53. func (app *App) remoteDebuggingGroup(group *gin.RouterGroup, config *app.Config) {
  54. if config.PluginRemoteInstallingEnabled {
  55. group.POST("/key", CheckingKey(config.PluginServerApiKey), controllers.GetRemoteDebuggingKey)
  56. }
  57. }
  58. func (app *App) endpointGroup(group *gin.RouterGroup, config *app.Config) {
  59. if config.PluginEndpointEnabled {
  60. group.HEAD("/:hook_id/*path", app.Endpoint())
  61. group.POST("/:hook_id/*path", app.Endpoint())
  62. group.GET("/:hook_id/*path", app.Endpoint())
  63. group.PUT("/:hook_id/*path", app.Endpoint())
  64. group.DELETE("/:hook_id/*path", app.Endpoint())
  65. group.OPTIONS("/:hook_id/*path", app.Endpoint())
  66. }
  67. }
  68. func (appRef *App) awsLambdaTransactionGroup(group *gin.RouterGroup, config *app.Config) {
  69. if config.Platform == app.PLATFORM_AWS_LAMBDA {
  70. appRef.aws_transaction_handler = transaction.NewAWSTransactionHandler(
  71. time.Duration(config.MaxAWSLambdaTransactionTimeout) * time.Second,
  72. )
  73. group.POST(
  74. "/transaction",
  75. service.HandleAWSPluginTransaction(appRef.aws_transaction_handler),
  76. )
  77. }
  78. }
  79. func (app *App) endpointManagementGroup(group *gin.RouterGroup) {
  80. group.POST("/setup", controllers.SetupEndpoint)
  81. group.POST("/remove", controllers.RemoveEndpoint)
  82. group.GET("/list", controllers.ListEndpoints)
  83. group.POST("/enable", controllers.EnableEndpoint)
  84. group.POST("/disable", controllers.DisableEndpoint)
  85. }
  86. func (app *App) pluginGroup(group *gin.RouterGroup, config *app.Config) {
  87. group.Use(CheckingKey(config.PluginServerApiKey))
  88. group.GET("/asset/:id", controllers.GetAsset)
  89. group.POST("/:tenant_id/install/pkg", controllers.InstallPluginFromPkg(config))
  90. group.POST("/:tenant_id/install/identifier", controllers.InstallPluginFromIdentifier(config))
  91. group.POST("/:tenant_id/uninstall", controllers.UninstallPlugin)
  92. group.GET("/:tenant_id/list", controllers.ListPlugins)
  93. group.GET("/:tenant_id/models", controllers.ListModels)
  94. group.GET("/:tenant_id/tools", controllers.ListTools)
  95. }