diff --git a/pkg/engine/control.go b/pkg/engine/control.go new file mode 100644 index 00000000..7bb45c0a --- /dev/null +++ b/pkg/engine/control.go @@ -0,0 +1,20 @@ +package engine + +import ( + "encoding/json" + "fmt" + + "github.com/gptscript-ai/gptscript/pkg/types" +) + +func (e *Engine) runBreak(tool types.Tool, input string) (cmdOut *Return, cmdErr error) { + info, err := json.Marshal(tool) + if err != nil { + return nil, err + } + var dict map[string]interface{} + json.Unmarshal(info, &dict) + dict["input"] = input + info, err = json.Marshal(dict) + return nil, fmt.Errorf("TOOL_BREAK: %s", info) +} diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index f901bf63..73a5f7dd 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -252,6 +252,8 @@ func (e *Engine) Start(ctx Context, input string) (ret *Return, _ error) { return e.runOpenAPI(tool, input) } else if tool.IsEcho() { return e.runEcho(tool) + } else if tool.IsBreak() { + return e.runBreak(tool, input) } s, err := e.runCommand(ctx, tool, input, ctx.ToolCategory) if err != nil { diff --git a/pkg/types/tool.go b/pkg/types/tool.go index 2c218e2c..7a5c842d 100644 --- a/pkg/types/tool.go +++ b/pkg/types/tool.go @@ -19,6 +19,7 @@ const ( DaemonPrefix = "#!sys.daemon" OpenAPIPrefix = "#!sys.openapi" EchoPrefix = "#!sys.echo" + BreakPrefix = "#!sys.break" CommandPrefix = "#!" ) @@ -664,6 +665,10 @@ func (t Tool) IsEcho() bool { return strings.HasPrefix(t.Instructions, EchoPrefix) } +func (t Tool) IsBreak() bool { + return strings.HasPrefix(t.Instructions, BreakPrefix) +} + func (t Tool) IsHTTP() bool { return strings.HasPrefix(t.Instructions, "#!http://") || strings.HasPrefix(t.Instructions, "#!https://")