File tree 3 files changed +57
-3
lines changed
3 files changed +57
-3
lines changed Original file line number Diff line number Diff line change @@ -57,7 +57,13 @@ func (p OpenAIProvider) DockerImageName(task string) (string, error) {
57
57
func (p OpenAIProvider ) NextTask (args NextTaskOptions ) * database.Task {
58
58
log .Println ("Getting next task" )
59
59
60
- prompt , err := templates .Render (assets .PromptTemplates , "prompts/agent.tmpl" , args )
60
+ promptArgs := map [string ]interface {}{
61
+ "DockerImage" : args .DockerImage ,
62
+ "ToolPlaceholder" : getToolPlaceholder (),
63
+ "Tasks" : args .Tasks ,
64
+ }
65
+
66
+ prompt , err := templates .Render (assets .PromptTemplates , "prompts/agent.tmpl" , promptArgs )
61
67
62
68
// TODO In case of lots of tasks, we should try to get a summary using gpt-3.5
63
69
if len (prompt ) > 30000 {
Original file line number Diff line number Diff line change @@ -249,7 +249,26 @@ func toolToTask(choices []*llms.ContentChoice) (*database.Task, error) {
249
249
}
250
250
251
251
// We use AskArgs to extract the message
252
- params , err := extractToolArgs (tool .FunctionCall .Arguments , & AskArgs {})
252
+ var toolType Messanger
253
+
254
+ switch tool .FunctionCall .Name {
255
+ case "input" :
256
+ toolType = & InputArgs {}
257
+ case "terminal" :
258
+ toolType = & TerminalArgs {}
259
+ case "browser" :
260
+ toolType = & BrowserArgs {}
261
+ case "code" :
262
+ toolType = & CodeArgs {}
263
+ case "ask" :
264
+ toolType = & AskArgs {}
265
+ case "done" :
266
+ toolType = & DoneArgs {}
267
+ default :
268
+ return nil , fmt .Errorf ("unknown tool name: %s" , tool .FunctionCall .Name )
269
+ }
270
+
271
+ params , err := extractToolArgs (tool .FunctionCall .Arguments , & toolType )
253
272
if err != nil {
254
273
return nil , fmt .Errorf ("failed to extract args: %v" , err )
255
274
}
@@ -260,7 +279,7 @@ func toolToTask(choices []*llms.ContentChoice) (*database.Task, error) {
260
279
task .Args = database .StringToNullString (string (args ))
261
280
262
281
// Sometimes the model returns an empty string for the message
263
- msg := string (params . Message )
282
+ msg := string (( * params ). GetMessage () )
264
283
if msg == "" {
265
284
msg = tool .FunctionCall .Arguments
266
285
}
Original file line number Diff line number Diff line change @@ -2,15 +2,28 @@ package providers
2
2
3
3
type Message string
4
4
5
+ type Messanger interface {
6
+ GetMessage () Message
7
+ }
8
+
5
9
type InputArgs struct {
6
10
Query string
11
+ Message
12
+ }
13
+
14
+ func (i * InputArgs ) GetMessage () Message {
15
+ return i .Message
7
16
}
8
17
9
18
type TerminalArgs struct {
10
19
Input string
11
20
Message
12
21
}
13
22
23
+ func (t * TerminalArgs ) GetMessage () Message {
24
+ return t .Message
25
+ }
26
+
14
27
type BrowserAction string
15
28
16
29
const (
@@ -24,6 +37,10 @@ type BrowserArgs struct {
24
37
Message
25
38
}
26
39
40
+ func (b * BrowserArgs ) GetMessage () Message {
41
+ return b .Message
42
+ }
43
+
27
44
type CodeAction string
28
45
29
46
const (
@@ -38,10 +55,22 @@ type CodeArgs struct {
38
55
Message
39
56
}
40
57
58
+ func (c * CodeArgs ) GetMessage () Message {
59
+ return c .Message
60
+ }
61
+
41
62
type AskArgs struct {
42
63
Message
43
64
}
44
65
66
+ func (a * AskArgs ) GetMessage () Message {
67
+ return a .Message
68
+ }
69
+
45
70
type DoneArgs struct {
46
71
Message
47
72
}
73
+
74
+ func (d * DoneArgs ) GetMessage () Message {
75
+ return d .Message
76
+ }
You can’t perform that action at this time.
0 commit comments