11package builtin
22
33import (
4- "bytes"
54 "context"
65 "encoding/json"
76 "errors"
@@ -18,9 +17,9 @@ import (
1817 "strings"
1918 "time"
2019
21- "github.com/AlecAivazis/survey/v2"
2220 "github.com/BurntSushi/locker"
2321 "github.com/gptscript-ai/gptscript/pkg/engine"
22+ "github.com/gptscript-ai/gptscript/pkg/prompt"
2423 "github.com/gptscript-ai/gptscript/pkg/types"
2524 "github.com/jaytaylor/html2text"
2625)
@@ -216,7 +215,7 @@ var tools = map[string]types.Tool{
216215 "sensitive" , "(true or false) Whether the input should be hidden" ,
217216 ),
218217 },
219- BuiltinFunc : SysPrompt ,
218+ BuiltinFunc : prompt . SysPrompt ,
220219 },
221220 },
222221 "sys.chat.history" : {
@@ -772,79 +771,6 @@ func SysDownload(_ context.Context, env []string, input string) (_ string, err e
772771 return fmt .Sprintf ("Downloaded %s to %s" , params .URL , params .Location ), nil
773772}
774773
775- func sysPromptHTTP (ctx context.Context , url string , prompt types.Prompt ) (_ string , err error ) {
776- data , err := json .Marshal (prompt )
777- if err != nil {
778- return "" , err
779- }
780-
781- req , err := http .NewRequestWithContext (ctx , http .MethodPost , url , bytes .NewReader (data ))
782- if err != nil {
783- return "" , err
784- }
785- req .Header .Set ("Content-Type" , "application/json" )
786-
787- resp , err := http .DefaultClient .Do (req )
788- if err != nil {
789- return "" , err
790- }
791- defer resp .Body .Close ()
792-
793- if resp .StatusCode != 200 {
794- return "" , fmt .Errorf ("invalid status code [%d], expected 200" , resp .StatusCode )
795- }
796-
797- data , err = io .ReadAll (resp .Body )
798- return string (data ), err
799- }
800-
801- func SysPrompt (ctx context.Context , envs []string , input string ) (_ string , err error ) {
802- var params struct {
803- Message string `json:"message,omitempty"`
804- Fields string `json:"fields,omitempty"`
805- Sensitive string `json:"sensitive,omitempty"`
806- }
807- if err := json .Unmarshal ([]byte (input ), & params ); err != nil {
808- return "" , err
809- }
810-
811- for _ , env := range envs {
812- if url , ok := strings .CutPrefix (env , types .PromptURLEnvVar + "=" ); ok {
813- httpPrompt := types.Prompt {
814- Message : params .Message ,
815- Fields : strings .Split (params .Fields , "," ),
816- Sensitive : params .Sensitive == "true" ,
817- }
818- return sysPromptHTTP (ctx , url , httpPrompt )
819- }
820- }
821-
822- if params .Message != "" {
823- _ , _ = fmt .Fprintln (os .Stderr , params .Message )
824- }
825-
826- results := map [string ]string {}
827- for _ , f := range strings .Split (params .Fields , "," ) {
828- var value string
829- if params .Sensitive == "true" {
830- err = survey .AskOne (& survey.Password {Message : f }, & value , survey .WithStdio (os .Stdin , os .Stderr , os .Stderr ))
831- } else {
832- err = survey .AskOne (& survey.Input {Message : f }, & value , survey .WithStdio (os .Stdin , os .Stderr , os .Stderr ))
833- }
834- if err != nil {
835- return "" , err
836- }
837- results [f ] = value
838- }
839-
840- resultsStr , err := json .Marshal (results )
841- if err != nil {
842- return "" , err
843- }
844-
845- return string (resultsStr ), nil
846- }
847-
848774func SysTimeNow (context.Context , []string , string ) (string , error ) {
849775 return time .Now ().Format (time .RFC3339 ), nil
850776}
0 commit comments