invoke_tool.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package service
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_daemon"
  5. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_manager"
  6. "github.com/langgenius/dify-plugin-daemon/internal/core/session_manager"
  7. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/model_entities"
  8. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
  9. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/requests"
  10. "github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
  11. "github.com/langgenius/dify-plugin-daemon/internal/utils/stream"
  12. )
  13. func createSession[T any](r *plugin_entities.InvokePluginRequest[T]) *session_manager.Session {
  14. session := session_manager.NewSession(r.TenantId, r.UserId, parser.MarshalPluginIdentity(r.PluginName, r.PluginVersion))
  15. runtime := plugin_manager.GetGlobalPluginManager().Get(session.PluginIdentity())
  16. session.BindRuntime(runtime)
  17. return session
  18. }
  19. func InvokeLLM(r *plugin_entities.InvokePluginRequest[requests.RequestInvokeLLM], ctx *gin.Context) {
  20. // create session
  21. session := createSession(r)
  22. defer session.Close()
  23. baseSSEService(r, func() (*stream.StreamResponse[model_entities.LLMResultChunk], error) {
  24. return plugin_daemon.InvokeLLM(session, &r.Data)
  25. }, ctx)
  26. }
  27. func InvokeTextEmbedding(r *plugin_entities.InvokePluginRequest[requests.RequestInvokeTextEmbedding], ctx *gin.Context) {
  28. // create session
  29. session := createSession(r)
  30. defer session.Close()
  31. baseSSEService(r, func() (*stream.StreamResponse[model_entities.TextEmbeddingResult], error) {
  32. return plugin_daemon.InvokeTextEmbedding(session, &r.Data)
  33. }, ctx)
  34. }
  35. func InvokeRerank(r *plugin_entities.InvokePluginRequest[requests.RequestInvokeRerank], ctx *gin.Context) {
  36. // create session
  37. session := createSession(r)
  38. defer session.Close()
  39. baseSSEService(r, func() (*stream.StreamResponse[model_entities.RerankResult], error) {
  40. return plugin_daemon.InvokeRerank(session, &r.Data)
  41. }, ctx)
  42. }
  43. func InvokeTTS(r *plugin_entities.InvokePluginRequest[requests.RequestInvokeTTS], ctx *gin.Context) {
  44. // create session
  45. session := createSession(r)
  46. defer session.Close()
  47. baseSSEService(r, func() (*stream.StreamResponse[model_entities.TTSResult], error) {
  48. return plugin_daemon.InvokeTTS(session, &r.Data)
  49. }, ctx)
  50. }
  51. func InvokeSpeech2Text(r *plugin_entities.InvokePluginRequest[requests.RequestInvokeSpeech2Text], ctx *gin.Context) {
  52. // create session
  53. session := createSession(r)
  54. defer session.Close()
  55. baseSSEService(r, func() (*stream.StreamResponse[model_entities.Speech2TextResult], error) {
  56. return plugin_daemon.InvokeSpeech2Text(session, &r.Data)
  57. }, ctx)
  58. }
  59. func InvokeModeration(r *plugin_entities.InvokePluginRequest[requests.RequestInvokeModeration], ctx *gin.Context) {
  60. // create session
  61. session := createSession(r)
  62. defer session.Close()
  63. baseSSEService(r, func() (*stream.StreamResponse[model_entities.ModerationResult], error) {
  64. return plugin_daemon.InvokeModeration(session, &r.Data)
  65. }, ctx)
  66. }
  67. func ValidateProviderCredentials(r *plugin_entities.InvokePluginRequest[requests.RequestValidateProviderCredentials], ctx *gin.Context) {
  68. // create session
  69. session := createSession(r)
  70. defer session.Close()
  71. baseSSEService(r, func() (*stream.StreamResponse[model_entities.ValidateCredentialsResult], error) {
  72. return plugin_daemon.ValidateProviderCredentials(session, &r.Data)
  73. }, ctx)
  74. }
  75. func ValidateModelCredentials(r *plugin_entities.InvokePluginRequest[requests.RequestValidateModelCredentials], ctx *gin.Context) {
  76. // create session
  77. session := createSession(r)
  78. defer session.Close()
  79. baseSSEService(r, func() (*stream.StreamResponse[model_entities.ValidateCredentialsResult], error) {
  80. return plugin_daemon.ValidateModelCredentials(session, &r.Data)
  81. }, ctx)
  82. }