invoke.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package service
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/google/uuid"
  5. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_daemon"
  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_id := uuid.New().String()
  14. session := &entities.InvocationSession{
  15. ID: session_id,
  16. PluginIdentity: parser.MarshalPluginIdentity(r.PluginName, r.PluginVersion),
  17. }
  18. writer := ctx.Writer
  19. writer.WriteHeader(200)
  20. writer.Header().Set("Content-Type", "text/event-stream")
  21. done := make(chan bool)
  22. write_data := func(data interface{}) {
  23. writer.WriteString("data: ")
  24. writer.Write([]byte(parser.MarshalJson(data)))
  25. writer.Write([]byte("\n\n"))
  26. writer.Flush()
  27. }
  28. plugin_daemon_response, err := plugin_daemon.InvokeTool(
  29. session,
  30. r.Data.ProviderName,
  31. r.Data.ToolName,
  32. r.Data.Parameters,
  33. )
  34. if err != nil {
  35. write_data(entities.NewErrorResponse(-500, err.Error()))
  36. close(done)
  37. return
  38. }
  39. routine.Submit(func() {
  40. for plugin_daemon_response.Next() {
  41. chunk, err := plugin_daemon_response.Read()
  42. if err != nil {
  43. break
  44. }
  45. write_data(entities.NewSuccessResponse(chunk))
  46. }
  47. close(done)
  48. })
  49. select {
  50. case <-writer.CloseNotify():
  51. plugin_daemon_response.Close()
  52. case <-done:
  53. }
  54. }
  55. func InvokeModel(r *plugin_entities.InvokePluginRequest[plugin_entities.InvokeModelRequest], ctx *gin.Context) {
  56. }