mock.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package tester
  2. import (
  3. "time"
  4. "github.com/langgenius/dify-plugin-daemon/internal/core/dify_invocation"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/model_entities"
  6. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/tool_entities"
  7. "github.com/langgenius/dify-plugin-daemon/internal/utils/routine"
  8. "github.com/langgenius/dify-plugin-daemon/internal/utils/stream"
  9. )
  10. type MockedDifyInvocation struct{}
  11. func NewMockedDifyInvocation() dify_invocation.BackwardsInvocation {
  12. return &MockedDifyInvocation{}
  13. }
  14. func (m *MockedDifyInvocation) InvokeLLM(payload *dify_invocation.InvokeLLMRequest) (*stream.Stream[model_entities.LLMResultChunk], error) {
  15. stream := stream.NewStream[model_entities.LLMResultChunk](5)
  16. routine.Submit(func() {
  17. stream.Write(model_entities.LLMResultChunk{
  18. Model: model_entities.LLMModel(payload.Model),
  19. PromptMessages: payload.PromptMessages,
  20. SystemFingerprint: "test",
  21. Delta: model_entities.LLMResultChunkDelta{
  22. Index: &[]int{1}[0],
  23. Message: model_entities.PromptMessage{
  24. Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
  25. Content: "hello",
  26. Name: "test",
  27. },
  28. },
  29. })
  30. time.Sleep(100 * time.Millisecond)
  31. stream.Write(model_entities.LLMResultChunk{
  32. Model: model_entities.LLMModel(payload.Model),
  33. PromptMessages: payload.PromptMessages,
  34. SystemFingerprint: "test",
  35. Delta: model_entities.LLMResultChunkDelta{
  36. Index: &[]int{1}[0],
  37. Message: model_entities.PromptMessage{
  38. Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
  39. Content: " world",
  40. Name: "test",
  41. },
  42. },
  43. })
  44. time.Sleep(100 * time.Millisecond)
  45. stream.Write(model_entities.LLMResultChunk{
  46. Model: model_entities.LLMModel(payload.Model),
  47. PromptMessages: payload.PromptMessages,
  48. SystemFingerprint: "test",
  49. Delta: model_entities.LLMResultChunkDelta{
  50. Index: &[]int{2}[0],
  51. Message: model_entities.PromptMessage{
  52. Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
  53. Content: " world",
  54. Name: "test",
  55. },
  56. },
  57. })
  58. time.Sleep(100 * time.Millisecond)
  59. stream.Write(model_entities.LLMResultChunk{
  60. Model: model_entities.LLMModel(payload.Model),
  61. PromptMessages: payload.PromptMessages,
  62. SystemFingerprint: "test",
  63. Delta: model_entities.LLMResultChunkDelta{
  64. Index: &[]int{3}[0],
  65. Message: model_entities.PromptMessage{
  66. Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
  67. Content: " !",
  68. Name: "test",
  69. },
  70. },
  71. })
  72. time.Sleep(100 * time.Millisecond)
  73. stream.Write(model_entities.LLMResultChunk{
  74. Model: model_entities.LLMModel(payload.Model),
  75. PromptMessages: payload.PromptMessages,
  76. SystemFingerprint: "test",
  77. Delta: model_entities.LLMResultChunkDelta{
  78. Index: &[]int{3}[0],
  79. Usage: &model_entities.LLMUsage{
  80. PromptTokens: &[]int{100}[0],
  81. CompletionTokens: &[]int{100}[0],
  82. TotalTokens: &[]int{200}[0],
  83. Latency: &[]float64{0.4}[0],
  84. Currency: &[]string{"USD"}[0],
  85. },
  86. },
  87. })
  88. stream.Close()
  89. })
  90. return stream, nil
  91. }
  92. func (m *MockedDifyInvocation) InvokeTextEmbedding(payload *dify_invocation.InvokeTextEmbeddingRequest) (*model_entities.TextEmbeddingResult, error) {
  93. result := model_entities.TextEmbeddingResult{
  94. Model: payload.Model,
  95. Usage: model_entities.EmbeddingUsage{
  96. Tokens: &[]int{100}[0],
  97. TotalTokens: &[]int{100}[0],
  98. Latency: &[]float64{0.1}[0],
  99. Currency: &[]string{"USD"}[0],
  100. },
  101. }
  102. for range payload.Texts {
  103. result.Embeddings = append(result.Embeddings, []float64{0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0})
  104. }
  105. return &result, nil
  106. }
  107. func (m *MockedDifyInvocation) InvokeRerank(payload *dify_invocation.InvokeRerankRequest) (*model_entities.RerankResult, error) {
  108. result := model_entities.RerankResult{
  109. Model: payload.Model,
  110. }
  111. for i, doc := range payload.Docs {
  112. result.Docs = append(result.Docs, model_entities.RerankDocument{
  113. Index: &[]int{i}[0],
  114. Score: &[]float64{0.1}[0],
  115. Text: &doc,
  116. })
  117. }
  118. return &result, nil
  119. }
  120. func (m *MockedDifyInvocation) InvokeTTS(payload *dify_invocation.InvokeTTSRequest) (*stream.Stream[model_entities.TTSResult], error) {
  121. stream := stream.NewStream[model_entities.TTSResult](5)
  122. routine.Submit(func() {
  123. for i := 0; i < 10; i++ {
  124. stream.Write(model_entities.TTSResult{
  125. Result: "a1b2c3d4",
  126. })
  127. time.Sleep(100 * time.Millisecond)
  128. }
  129. stream.Close()
  130. })
  131. return stream, nil
  132. }
  133. func (m *MockedDifyInvocation) InvokeSpeech2Text(payload *dify_invocation.InvokeSpeech2TextRequest) (*model_entities.Speech2TextResult, error) {
  134. result := model_entities.Speech2TextResult{
  135. Result: "hello world",
  136. }
  137. return &result, nil
  138. }
  139. func (m *MockedDifyInvocation) InvokeModeration(payload *dify_invocation.InvokeModerationRequest) (*model_entities.ModerationResult, error) {
  140. result := model_entities.ModerationResult{
  141. Result: true,
  142. }
  143. return &result, nil
  144. }
  145. func (m *MockedDifyInvocation) InvokeTool(payload *dify_invocation.InvokeToolRequest) (*stream.Stream[tool_entities.ToolResponseChunk], error) {
  146. stream := stream.NewStream[tool_entities.ToolResponseChunk](5)
  147. routine.Submit(func() {
  148. for i := 0; i < 10; i++ {
  149. stream.Write(tool_entities.ToolResponseChunk{
  150. Type: tool_entities.ToolResponseChunkTypeText,
  151. Message: map[string]any{
  152. "text": "hello world",
  153. },
  154. })
  155. time.Sleep(100 * time.Millisecond)
  156. }
  157. stream.Close()
  158. })
  159. return stream, nil
  160. }
  161. func (m *MockedDifyInvocation) InvokeApp(payload *dify_invocation.InvokeAppRequest) (*stream.Stream[map[string]any], error) {
  162. stream := stream.NewStream[map[string]any](5)
  163. routine.Submit(func() {
  164. for i := 0; i < 10; i++ {
  165. stream.Write(map[string]any{
  166. // TODO
  167. })
  168. time.Sleep(100 * time.Millisecond)
  169. }
  170. stream.Close()
  171. })
  172. return stream, nil
  173. }
  174. func (m *MockedDifyInvocation) InvokeEncrypt(payload *dify_invocation.InvokeEncryptRequest) (map[string]any, error) {
  175. return payload.Data, nil
  176. }