Skip to content

Commit e863347

Browse files
authored
Merge pull request #57 from semanser/fix-tool-placeholder-issue
Fix tool placeholder issue
2 parents 3d75092 + 0c322fc commit e863347

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

backend/providers/openai.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,13 @@ func (p OpenAIProvider) DockerImageName(task string) (string, error) {
5757
func (p OpenAIProvider) NextTask(args NextTaskOptions) *database.Task {
5858
log.Println("Getting next task")
5959

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)
6167

6268
// TODO In case of lots of tasks, we should try to get a summary using gpt-3.5
6369
if len(prompt) > 30000 {

backend/providers/providers.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,26 @@ func toolToTask(choices []*llms.ContentChoice) (*database.Task, error) {
249249
}
250250

251251
// 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)
253272
if err != nil {
254273
return nil, fmt.Errorf("failed to extract args: %v", err)
255274
}
@@ -260,7 +279,7 @@ func toolToTask(choices []*llms.ContentChoice) (*database.Task, error) {
260279
task.Args = database.StringToNullString(string(args))
261280

262281
// Sometimes the model returns an empty string for the message
263-
msg := string(params.Message)
282+
msg := string((*params).GetMessage())
264283
if msg == "" {
265284
msg = tool.FunctionCall.Arguments
266285
}

backend/providers/types.go

+29
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,28 @@ package providers
22

33
type Message string
44

5+
type Messanger interface {
6+
GetMessage() Message
7+
}
8+
59
type InputArgs struct {
610
Query string
11+
Message
12+
}
13+
14+
func (i *InputArgs) GetMessage() Message {
15+
return i.Message
716
}
817

918
type TerminalArgs struct {
1019
Input string
1120
Message
1221
}
1322

23+
func (t *TerminalArgs) GetMessage() Message {
24+
return t.Message
25+
}
26+
1427
type BrowserAction string
1528

1629
const (
@@ -24,6 +37,10 @@ type BrowserArgs struct {
2437
Message
2538
}
2639

40+
func (b *BrowserArgs) GetMessage() Message {
41+
return b.Message
42+
}
43+
2744
type CodeAction string
2845

2946
const (
@@ -38,10 +55,22 @@ type CodeArgs struct {
3855
Message
3956
}
4057

58+
func (c *CodeArgs) GetMessage() Message {
59+
return c.Message
60+
}
61+
4162
type AskArgs struct {
4263
Message
4364
}
4465

66+
func (a *AskArgs) GetMessage() Message {
67+
return a.Message
68+
}
69+
4570
type DoneArgs struct {
4671
Message
4772
}
73+
74+
func (d *DoneArgs) GetMessage() Message {
75+
return d.Message
76+
}

0 commit comments

Comments
 (0)