1
1
package builtin
2
2
3
3
import (
4
- "bytes"
5
4
"context"
6
5
"encoding/json"
7
6
"errors"
@@ -18,9 +17,9 @@ import (
18
17
"strings"
19
18
"time"
20
19
21
- "github.com/AlecAivazis/survey/v2"
22
20
"github.com/BurntSushi/locker"
23
21
"github.com/gptscript-ai/gptscript/pkg/engine"
22
+ "github.com/gptscript-ai/gptscript/pkg/prompt"
24
23
"github.com/gptscript-ai/gptscript/pkg/types"
25
24
"github.com/jaytaylor/html2text"
26
25
)
@@ -216,7 +215,7 @@ var tools = map[string]types.Tool{
216
215
"sensitive" , "(true or false) Whether the input should be hidden" ,
217
216
),
218
217
},
219
- BuiltinFunc : SysPrompt ,
218
+ BuiltinFunc : prompt . SysPrompt ,
220
219
},
221
220
},
222
221
"sys.chat.history" : {
@@ -772,79 +771,6 @@ func SysDownload(_ context.Context, env []string, input string) (_ string, err e
772
771
return fmt .Sprintf ("Downloaded %s to %s" , params .URL , params .Location ), nil
773
772
}
774
773
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
-
848
774
func SysTimeNow (context.Context , []string , string ) (string , error ) {
849
775
return time .Now ().Format (time .RFC3339 ), nil
850
776
}
0 commit comments