Repository navigation
Expand file tree
/
Copy pathmock_provider_test.go
More file actions
86 lines (68 loc) · 1.57 KB
/
Copy pathmock_provider_test.go
File metadata and controls
86 lines (68 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package llmberjack
import (
"context"
"io"
"reflect"
"github.com/checkmarble/llmberjack/internal"
"github.com/stretchr/testify/mock"
)
type MockMessage struct {
Text string
}
type MockProvider struct {
mock.Mock
History History[MockMessage]
}
func (*MockProvider) RequestOptionsType() reflect.Type {
return nil
}
func NewMockProvider() *MockProvider {
return &MockProvider{
History: History[MockMessage]{
history: make(map[*ThreadId][]MockMessage, 0),
},
}
}
func (p *MockProvider) Init(llm internal.Adapter) error {
return p.Called(llm).Error(0)
}
func (p *MockProvider) ResetThread(threadId *ThreadId) {
p.History.Clear(threadId)
}
func (p *MockProvider) CopyThread(threadId *ThreadId) *ThreadId {
return p.History.Copy(threadId)
}
func (p *MockProvider) CloseThread(threadId *ThreadId) {
p.History.Close(threadId)
}
func (p *MockProvider) ChatCompletion(ctx context.Context, llm internal.Adapter, requester Requester) (*InnerResponse, error) {
args := p.Called(ctx, llm, requester)
if args.Error(1) != nil {
return nil, args.Error(1)
}
req := requester.ToRequest()
for _, msg := range req.Messages {
for _, part := range msg.Parts {
f, err := io.ReadAll(part)
if err != nil {
return nil, err
}
if req.ThreadId != nil {
p.History.Save(req.ThreadId, MockMessage{string(f)})
}
}
}
msg := args.Get(0).(MockMessage)
return &InnerResponse{
Candidates: []ResponseCandidate{
{
Text: msg.Text,
SelectCandidate: func() {
if req.ThreadId != nil {
p.History.Save(req.ThreadId, msg)
}
},
},
},
}, nil
}