fix: improve default user-agent string

Andrey Nering created

This change to be better follow the convention:

* App name should not have spaces: `Charm Fantasy` -> `Charm-Fantasy`.
* Add comment `()` with app site.

Change summary

providers/anthropic/useragent_test.go              | 2 +-
providers/azure/useragent_test.go                  | 2 +-
providers/bedrock/useragent_test.go                | 2 +-
providers/google/useragent_test.go                 | 2 +-
providers/internal/httpheaders/httpheaders.go      | 7 +++++--
providers/internal/httpheaders/httpheaders_test.go | 4 ++--
providers/openai/openai_test.go                    | 2 +-
7 files changed, 12 insertions(+), 9 deletions(-)

Detailed changes

providers/anthropic/useragent_test.go 🔗

@@ -49,7 +49,7 @@ func TestUserAgent(t *testing.T) {
 		_, _ = model.Generate(t.Context(), fantasy.Call{Prompt: prompt})
 
 		require.Len(t, *captured, 1)
-		assert.Equal(t, "Charm Fantasy/"+fantasy.Version, (*captured)[0]["User-Agent"])
+		assert.Equal(t, "Charm-Fantasy/"+fantasy.Version+" (https://charm.land/fantasy)", (*captured)[0]["User-Agent"])
 	})
 
 	t.Run("WithUserAgent wins over both", func(t *testing.T) {

providers/azure/useragent_test.go 🔗

@@ -49,7 +49,7 @@ func TestUserAgent(t *testing.T) {
 		_, _ = model.Generate(t.Context(), fantasy.Call{Prompt: prompt})
 
 		require.Len(t, *captured, 1)
-		assert.Equal(t, "Charm Fantasy/"+fantasy.Version, (*captured)[0]["User-Agent"])
+		assert.Equal(t, "Charm-Fantasy/"+fantasy.Version+" (https://charm.land/fantasy)", (*captured)[0]["User-Agent"])
 	})
 
 	t.Run("WithUserAgent wins over default", func(t *testing.T) {

providers/bedrock/useragent_test.go 🔗

@@ -53,7 +53,7 @@ func TestUserAgent(t *testing.T) {
 		_, _ = model.Generate(t.Context(), fantasy.Call{Prompt: prompt})
 
 		require.Len(t, *captured, 1)
-		assert.Equal(t, "Charm Fantasy/"+fantasy.Version, (*captured)[0]["User-Agent"])
+		assert.Equal(t, "Charm-Fantasy/"+fantasy.Version+" (https://charm.land/fantasy)", (*captured)[0]["User-Agent"])
 	})
 
 	t.Run("WithUserAgent wins over default", func(t *testing.T) {

providers/google/useragent_test.go 🔗

@@ -80,7 +80,7 @@ func TestUserAgent(t *testing.T) {
 		_, _ = model.Generate(t.Context(), fantasy.Call{Prompt: prompt})
 
 		require.NotEmpty(t, *captured)
-		assert.True(t, findUA(captured, "Charm Fantasy/"+fantasy.Version))
+		assert.True(t, findUA(captured, "Charm-Fantasy/"+fantasy.Version+" (https://charm.land/fantasy)"))
 	})
 
 	t.Run("WithUserAgent wins over default", func(t *testing.T) {

providers/internal/httpheaders/httpheaders.go 🔗

@@ -1,12 +1,15 @@
 // Package httpheaders provides shared User-Agent resolution for all HTTP-based providers.
 package httpheaders
 
-import "strings"
+import (
+	"fmt"
+	"strings"
+)
 
 // DefaultUserAgent returns the default User-Agent string for the SDK.
 // The result is "Charm Fantasy/<version>".
 func DefaultUserAgent(version string) string {
-	return "Charm Fantasy/" + version
+	return fmt.Sprintf("Charm-Fantasy/%s (https://charm.land/fantasy)", version)
 }
 
 // ResolveHeaders returns a new header map, with a User-Agent field.

providers/internal/httpheaders/httpheaders_test.go 🔗

@@ -15,8 +15,8 @@ func TestDefaultUserAgent(t *testing.T) {
 		version string
 		want    string
 	}{
-		{name: "basic version", version: "0.11.0", want: "Charm Fantasy/0.11.0"},
-		{name: "another version", version: "1.0.0", want: "Charm Fantasy/1.0.0"},
+		{name: "basic version", version: "0.11.0", want: "Charm-Fantasy/0.11.0 (https://charm.land/fantasy)"},
+		{name: "another version", version: "1.0.0", want: "Charm-Fantasy/1.0.0 (https://charm.land/fantasy)"},
 	}
 
 	for _, tt := range tests {

providers/openai/openai_test.go 🔗

@@ -3320,7 +3320,7 @@ func TestUserAgent(t *testing.T) {
 		_, _ = model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt})
 
 		require.Len(t, server.calls, 1)
-		assert.Equal(t, "Charm Fantasy/"+fantasy.Version, server.calls[0].headers["User-Agent"])
+		assert.Equal(t, "Charm-Fantasy/"+fantasy.Version+" (https://charm.land/fantasy)", server.calls[0].headers["User-Agent"])
 	})
 
 	t.Run("WithHeaders User-Agent wins over default", func(t *testing.T) {