@@ -14,6 +14,7 @@ import (
1414 "strings"
1515
1616 "github.com/acorn-io/gptscript/pkg/types"
17+ "github.com/jaytaylor/html2text"
1718)
1819
1920var Tools = map [string ]types.Tool {
@@ -36,6 +37,12 @@ var Tools = map[string]types.Tool{
3637 "url" , "The URL to download" ),
3738 BuiltinFunc : SysHTTPGet ,
3839 },
40+ "sys.http.html2text" : {
41+ Description : "Download the contents of a http or https URL returning the content as rendered text converted from HTML" ,
42+ Arguments : types .ObjectSchema (
43+ "url" , "The URL to download" ),
44+ BuiltinFunc : SysHTTPHtml2Text ,
45+ },
3946 "sys.abort" : {
4047 Description : "Aborts execution" ,
4148 Arguments : types .ObjectSchema (
@@ -91,10 +98,21 @@ func ListTools() (result []types.Tool) {
9198}
9299
93100func Builtin (name string ) (types.Tool , bool ) {
101+ name , dontFail := strings .CutSuffix (name , "?" )
94102 t , ok := Tools [name ]
95103 t .Name = name
96104 t .ID = name
97105 t .Instructions = "#!" + name
106+ if ok && dontFail {
107+ orig := t .BuiltinFunc
108+ t .BuiltinFunc = func (ctx context.Context , env []string , input string ) (string , error ) {
109+ s , err := orig (ctx , env , input )
110+ if err != nil {
111+ return fmt .Sprintf ("ERROR: %s" , err .Error ()), nil
112+ }
113+ return s , err
114+ }
115+ }
98116 return t , ok
99117}
100118
@@ -218,6 +236,16 @@ func SysHTTPGet(ctx context.Context, env []string, input string) (string, error)
218236 return string (data ), nil
219237}
220238
239+ func SysHTTPHtml2Text (ctx context.Context , env []string , input string ) (string , error ) {
240+ content , err := SysHTTPGet (ctx , env , input )
241+ if err != nil {
242+ return "" , err
243+ }
244+ return html2text .FromString (content , html2text.Options {
245+ PrettyTables : true ,
246+ })
247+ }
248+
221249func SysHTTPPost (ctx context.Context , env []string , input string ) (string , error ) {
222250 var params struct {
223251 URL string `json:"url,omitempty"`
0 commit comments