1
1
package builtin
2
2
3
3
import (
4
+ "bytes"
4
5
"context"
5
6
"encoding/json"
6
7
"errors"
@@ -774,7 +775,37 @@ func SysDownload(ctx context.Context, env []string, input string) (_ string, err
774
775
return params .Location , nil
775
776
}
776
777
777
- func SysPrompt (_ context.Context , _ []string , input string ) (_ string , err error ) {
778
+ func sysPromptHTTP (ctx context.Context , url , message string , fields []string , sensitive bool ) (_ string , err error ) {
779
+ data , err := json .Marshal (map [string ]any {
780
+ "message" : message ,
781
+ "fields" : fields ,
782
+ "sensitive" : sensitive ,
783
+ })
784
+ if err != nil {
785
+ return "" , err
786
+ }
787
+
788
+ req , err := http .NewRequestWithContext (ctx , http .MethodPost , url , bytes .NewReader (data ))
789
+ if err != nil {
790
+ return "" , err
791
+ }
792
+ req .Header .Set ("Content-Type" , "application/json" )
793
+
794
+ resp , err := http .DefaultClient .Do (req )
795
+ if err != nil {
796
+ return "" , err
797
+ }
798
+ resp .Body .Close ()
799
+
800
+ if resp .StatusCode != 200 {
801
+ return "" , fmt .Errorf ("invalid status code [%d], expected 200" , resp .StatusCode )
802
+ }
803
+
804
+ data , err = io .ReadAll (resp .Body )
805
+ return string (data ), err
806
+ }
807
+
808
+ func SysPrompt (ctx context.Context , envs []string , input string ) (_ string , err error ) {
778
809
var params struct {
779
810
Message string `json:"message,omitempty"`
780
811
Fields string `json:"fields,omitempty"`
@@ -784,6 +815,12 @@ func SysPrompt(_ context.Context, _ []string, input string) (_ string, err error
784
815
return "" , err
785
816
}
786
817
818
+ for _ , env := range envs {
819
+ if url , ok := strings .CutPrefix (env , "GPTSCRIPT_PROMPT_URL=" ); ok {
820
+ return sysPromptHTTP (ctx , url , params .Message , strings .Split (params .Fields , "," ), params .Sensitive == "true" )
821
+ }
822
+ }
823
+
787
824
if params .Message != "" {
788
825
_ , _ = fmt .Fprintln (os .Stderr , params .Message )
789
826
}
0 commit comments