123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package tester
- import (
- "time"
- "github.com/langgenius/dify-plugin-daemon/internal/core/dify_invocation"
- "github.com/langgenius/dify-plugin-daemon/internal/types/entities/model_entities"
- "github.com/langgenius/dify-plugin-daemon/internal/types/entities/tool_entities"
- "github.com/langgenius/dify-plugin-daemon/internal/utils/routine"
- "github.com/langgenius/dify-plugin-daemon/internal/utils/stream"
- )
- type MockedDifyInvocation struct{}
- func NewMockedDifyInvocation() dify_invocation.BackwardsInvocation {
- return &MockedDifyInvocation{}
- }
- func (m *MockedDifyInvocation) InvokeLLM(payload *dify_invocation.InvokeLLMRequest) (*stream.Stream[model_entities.LLMResultChunk], error) {
- stream := stream.NewStream[model_entities.LLMResultChunk](5)
- routine.Submit(func() {
- stream.Write(model_entities.LLMResultChunk{
- Model: model_entities.LLMModel(payload.Model),
- PromptMessages: payload.PromptMessages,
- SystemFingerprint: "test",
- Delta: model_entities.LLMResultChunkDelta{
- Index: &[]int{1}[0],
- Message: model_entities.PromptMessage{
- Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
- Content: "hello",
- Name: "test",
- },
- },
- })
- time.Sleep(100 * time.Millisecond)
- stream.Write(model_entities.LLMResultChunk{
- Model: model_entities.LLMModel(payload.Model),
- PromptMessages: payload.PromptMessages,
- SystemFingerprint: "test",
- Delta: model_entities.LLMResultChunkDelta{
- Index: &[]int{1}[0],
- Message: model_entities.PromptMessage{
- Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
- Content: " world",
- Name: "test",
- },
- },
- })
- time.Sleep(100 * time.Millisecond)
- stream.Write(model_entities.LLMResultChunk{
- Model: model_entities.LLMModel(payload.Model),
- PromptMessages: payload.PromptMessages,
- SystemFingerprint: "test",
- Delta: model_entities.LLMResultChunkDelta{
- Index: &[]int{2}[0],
- Message: model_entities.PromptMessage{
- Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
- Content: " world",
- Name: "test",
- },
- },
- })
- time.Sleep(100 * time.Millisecond)
- stream.Write(model_entities.LLMResultChunk{
- Model: model_entities.LLMModel(payload.Model),
- PromptMessages: payload.PromptMessages,
- SystemFingerprint: "test",
- Delta: model_entities.LLMResultChunkDelta{
- Index: &[]int{3}[0],
- Message: model_entities.PromptMessage{
- Role: model_entities.PROMPT_MESSAGE_ROLE_ASSISTANT,
- Content: " !",
- Name: "test",
- },
- },
- })
- time.Sleep(100 * time.Millisecond)
- stream.Write(model_entities.LLMResultChunk{
- Model: model_entities.LLMModel(payload.Model),
- PromptMessages: payload.PromptMessages,
- SystemFingerprint: "test",
- Delta: model_entities.LLMResultChunkDelta{
- Index: &[]int{3}[0],
- Usage: &model_entities.LLMUsage{
- PromptTokens: &[]int{100}[0],
- CompletionTokens: &[]int{100}[0],
- TotalTokens: &[]int{200}[0],
- Latency: &[]float64{0.4}[0],
- Currency: &[]string{"USD"}[0],
- },
- },
- })
- stream.Close()
- })
- return stream, nil
- }
- func (m *MockedDifyInvocation) InvokeTextEmbedding(payload *dify_invocation.InvokeTextEmbeddingRequest) (*model_entities.TextEmbeddingResult, error) {
- result := model_entities.TextEmbeddingResult{
- Model: payload.Model,
- Usage: model_entities.EmbeddingUsage{
- Tokens: &[]int{100}[0],
- TotalTokens: &[]int{100}[0],
- Latency: &[]float64{0.1}[0],
- Currency: &[]string{"USD"}[0],
- },
- }
- for range payload.Texts {
- 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})
- }
- return &result, nil
- }
- func (m *MockedDifyInvocation) InvokeRerank(payload *dify_invocation.InvokeRerankRequest) (*model_entities.RerankResult, error) {
- result := model_entities.RerankResult{
- Model: payload.Model,
- }
- for i, doc := range payload.Docs {
- result.Docs = append(result.Docs, model_entities.RerankDocument{
- Index: &[]int{i}[0],
- Score: &[]float64{0.1}[0],
- Text: &doc,
- })
- }
- return &result, nil
- }
- func (m *MockedDifyInvocation) InvokeTTS(payload *dify_invocation.InvokeTTSRequest) (*stream.Stream[model_entities.TTSResult], error) {
- stream := stream.NewStream[model_entities.TTSResult](5)
- routine.Submit(func() {
- for i := 0; i < 10; i++ {
- stream.Write(model_entities.TTSResult{
- Result: "a1b2c3d4",
- })
- time.Sleep(100 * time.Millisecond)
- }
- stream.Close()
- })
- return stream, nil
- }
- func (m *MockedDifyInvocation) InvokeSpeech2Text(payload *dify_invocation.InvokeSpeech2TextRequest) (*model_entities.Speech2TextResult, error) {
- result := model_entities.Speech2TextResult{
- Result: "hello world",
- }
- return &result, nil
- }
- func (m *MockedDifyInvocation) InvokeModeration(payload *dify_invocation.InvokeModerationRequest) (*model_entities.ModerationResult, error) {
- result := model_entities.ModerationResult{
- Result: true,
- }
- return &result, nil
- }
- func (m *MockedDifyInvocation) InvokeTool(payload *dify_invocation.InvokeToolRequest) (*stream.Stream[tool_entities.ToolResponseChunk], error) {
- stream := stream.NewStream[tool_entities.ToolResponseChunk](5)
- routine.Submit(func() {
- for i := 0; i < 10; i++ {
- stream.Write(tool_entities.ToolResponseChunk{
- Type: tool_entities.ToolResponseChunkTypeText,
- Message: map[string]any{
- "text": "hello world",
- },
- })
- time.Sleep(100 * time.Millisecond)
- }
- stream.Close()
- })
- return stream, nil
- }
- func (m *MockedDifyInvocation) InvokeApp(payload *dify_invocation.InvokeAppRequest) (*stream.Stream[map[string]any], error) {
- stream := stream.NewStream[map[string]any](5)
- routine.Submit(func() {
- for i := 0; i < 10; i++ {
- stream.Write(map[string]any{
- // TODO
- })
- time.Sleep(100 * time.Millisecond)
- }
- stream.Close()
- })
- return stream, nil
- }
- func (m *MockedDifyInvocation) InvokeEncrypt(payload *dify_invocation.InvokeEncryptRequest) (map[string]any, error) {
- return payload.Data, nil
- }
|