From 0fb1b8afe3d04574a72a7bd81598e028abf4e309 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Wed, 15 May 2024 10:45:59 -0700 Subject: [PATCH] chore: when normalizing the tool name drop /tool.gpt if you can --- pkg/types/toolname.go | 23 ++++++++++++++++++----- pkg/types/toolname_test.go | 5 +++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/pkg/types/toolname.go b/pkg/types/toolname.go index cd08e8e6..c3a0efc8 100644 --- a/pkg/types/toolname.go +++ b/pkg/types/toolname.go @@ -23,6 +23,9 @@ func ToolNormalizer(tool string) string { parts := strings.Split(lastTool, "/") tool = parts[len(parts)-1] + if parts[len(parts)-1] == "tool.gpt" && len(parts) > 1 && len(parts[len(parts)-2]) > 2 { + tool = parts[len(parts)-2] + } if strings.HasSuffix(tool, system.Suffix) { tool = strings.TrimSuffix(tool, filepath.Ext(tool)) } @@ -38,16 +41,26 @@ func ToolNormalizer(tool string) string { tool = invalidChars.ReplaceAllString(tool, "_") - var result []string - for i, part := range strings.Split(tool, "_") { + var ( + result []string + appended bool + ) + for _, part := range strings.Split(tool, "_") { lower := strings.ToLower(part) - if i != 0 && len(lower) > 0 { + if appended && len(lower) > 0 { lower = strings.ToTitle(lower[0:1]) + lower[1:] } - result = append(result, lower) + if lower != "" { + result = append(result, lower) + appended = true + } } - return strings.Join(result, "") + final := strings.Join(result, "") + if final == "" { + return "tool" + } + return final } func SplitToolRef(targetToolName string) (toolName, subTool string) { diff --git a/pkg/types/toolname_test.go b/pkg/types/toolname_test.go index 6d276931..fc7a66ab 100644 --- a/pkg/types/toolname_test.go +++ b/pkg/types/toolname_test.go @@ -14,6 +14,11 @@ func TestToolNormalizer(t *testing.T) { autogold.Expect("barList").Equal(t, ToolNormalizer("bar_list from ./foo.gpt")) autogold.Expect("write").Equal(t, ToolNormalizer("sys.write")) autogold.Expect("gpt4VVision").Equal(t, ToolNormalizer("github.com/gptscript-ai/gpt4-v-vision")) + autogold.Expect("foo").Equal(t, ToolNormalizer("./foo/tool.gpt")) + autogold.Expect("tool").Equal(t, ToolNormalizer("./tool.gpt")) + autogold.Expect("tool").Equal(t, ToolNormalizer(".a/tool.gpt")) + autogold.Expect("ab").Equal(t, ToolNormalizer(".ab/tool.gpt")) + autogold.Expect("tool").Equal(t, ToolNormalizer(".../tool.gpt")) } func TestParse(t *testing.T) {