From 583591c944146c7bced05a912d7ab71a09a9fe22 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Fri, 31 May 2024 16:44:36 -0700 Subject: [PATCH] bug: fix loading local files after a remote address --- pkg/loader/loader.go | 8 +++++++- pkg/loader/loader_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/pkg/loader/loader.go b/pkg/loader/loader.go index 36c920c4..5749885e 100644 --- a/pkg/loader/loader.go +++ b/pkg/loader/loader.go @@ -49,6 +49,11 @@ type source struct { Repo *types.Repo } +func (s source) WithRemote(remote bool) *source { + s.Remote = remote + return &s +} + func (s *source) String() string { if s.Path == "" && s.Name == "" { return "" @@ -436,7 +441,8 @@ func resolve(ctx context.Context, cache *cache.Client, prg *types.Program, base func input(ctx context.Context, cache *cache.Client, base *source, name string) (*source, error) { if strings.HasPrefix(name, "http://") || strings.HasPrefix(name, "https://") { - base.Remote = true + // copy and modify + base = base.WithRemote(true) } if !base.Remote { diff --git a/pkg/loader/loader_test.go b/pkg/loader/loader_test.go index b6a0c4d2..0ae6069e 100644 --- a/pkg/loader/loader_test.go +++ b/pkg/loader/loader_test.go @@ -3,7 +3,11 @@ package loader import ( "context" "encoding/json" + "fmt" + "net/http" + "net/http/httptest" "os" + "path/filepath" "testing" "github.com/gptscript-ai/gptscript/pkg/types" @@ -19,6 +23,34 @@ func toString(obj any) string { return string(s) } +func TestLocalRemote(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + })) + defer s.Close() + dir, err := os.MkdirTemp("", "gptscript-test") + require.NoError(t, err) + + err = os.WriteFile(filepath.Join(dir, "chatbot.gpt"), []byte(fmt.Sprintf(` +Chat: true +Name: chatbot +Context: context.gpt +Tools: http://%s/swagger.json + +THis is a tool, say hi +`, s.Listener.Addr().String())), 0644) + require.NoError(t, err) + + err = os.WriteFile(filepath.Join(dir, "context.gpt"), []byte(` +#!sys.echo + +Stuff +`), 0644) + require.NoError(t, err) + + _, err = Program(context.Background(), filepath.Join(dir, "chatbot.gpt"), "") + require.NoError(t, err) +} + func TestIsOpenAPI(t *testing.T) { datav2, err := os.ReadFile("testdata/openapi_v2.yaml") require.NoError(t, err)