invoke.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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/session_manager"
  6. "github.com/langgenius/dify-plugin-daemon/internal/types/entities"
  7. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
  8. "github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
  9. "github.com/langgenius/dify-plugin-daemon/internal/utils/routine"
  10. )
  11. func InvokeTool(r *plugin_entities.InvokePluginRequest[plugin_entities.InvokeToolRequest], ctx *gin.Context) {
  12. // create session
  13. session := session_manager.NewSession(r.TenantId, r.UserId, parser.MarshalPluginIdentity(r.PluginName, r.PluginVersion))
  14. defer session.Close()
  15. writer := ctx.Writer
  16. writer.WriteHeader(200)
  17. writer.Header().Set("Content-Type", "text/event-stream")
  18. done := make(chan bool)
  19. write_data := func(data interface{}) {
  20. writer.WriteString("data: ")
  21. writer.Write([]byte(parser.MarshalJson(data)))
  22. writer.Write([]byte("\n\n"))
  23. writer.Flush()
  24. }
  25. plugin_daemon_response, err := plugin_daemon.InvokeTool(
  26. session,
  27. r.Data.ProviderName,
  28. r.Data.ToolName,
  29. r.Data.Parameters,
  30. )
  31. if err != nil {
  32. write_data(entities.NewErrorResponse(-500, err.Error()))
  33. close(done)
  34. return
  35. }
  36. routine.Submit(func() {
  37. for plugin_daemon_response.Next() {
  38. chunk, err := plugin_daemon_response.Read()
  39. if err != nil {
  40. break
  41. }
  42. write_data(entities.NewSuccessResponse(chunk))
  43. }
  44. close(done)
  45. })
  46. select {
  47. case <-writer.CloseNotify():
  48. plugin_daemon_response.Close()
  49. case <-done:
  50. }
  51. }
  52. func InvokeModel(r *plugin_entities.InvokePluginRequest[plugin_entities.InvokeModelRequest], ctx *gin.Context) {
  53. }