diff --git a/backend/go.mod b/backend/go.mod index fa9bcdb..fe002a9 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -19,6 +19,7 @@ require ( golang.org/x/net v0.31.0 golang.org/x/text v0.20.0 google.golang.org/protobuf v1.35.2 + gopkg.in/yaml.v3 v3.0.1 mvdan.cc/xurls/v2 v2.5.0 ) @@ -52,5 +53,4 @@ require ( go.mau.fi/util v0.8.2 // indirect golang.org/x/crypto v0.29.0 // indirect golang.org/x/sys v0.27.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/backend/pkg/ai/ai.go b/backend/pkg/ai/ai.go index 4c5b9de..97830af 100644 --- a/backend/pkg/ai/ai.go +++ b/backend/pkg/ai/ai.go @@ -62,6 +62,13 @@ func NewAi(ctx context.Context, conf *config.Config, s *scale.Scale, m *promethe ai.tennisTool(), ai.lunchMenu(), } + + staticTools, err := ai.staticTools() + if err != nil { + l.Fatalf("could not load StaticConfig tools: %v", err) + } + tools = append(tools, staticTools...) + ai.tools = tools return ai diff --git a/backend/pkg/ai/ai_tools_static.go b/backend/pkg/ai/ai_tools_static.go new file mode 100644 index 0000000..681d757 --- /dev/null +++ b/backend/pkg/ai/ai_tools_static.go @@ -0,0 +1,51 @@ +package ai + +import ( + _ "embed" + "fmt" + + "github.com/liushuangls/go-anthropic/v2" + "github.com/liushuangls/go-anthropic/v2/jsonschema" + "gopkg.in/yaml.v3" +) + +type StaticConfig struct { + Tools []struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Description string `yaml:"description"` + Result string `yaml:"result"` + } `yaml:"tools"` +} + +//go:embed static.yml +var staticContent []byte + +func (ai *Ai) staticTools() ([]tool, error) { + var config StaticConfig + + if err := yaml.Unmarshal(staticContent, &config); err != nil { + return nil, fmt.Errorf("could not unmarshal StaticConfig content: %w", err) + } + + tools := make([]tool, len(config.Tools)) + for i, t := range config.Tools { + fmt.Println(t.Result) + tools[i] = tool{ + Definition: anthropic.ToolDefinition{ + Name: t.Name, + Description: t.Description, + InputSchema: jsonschema.Definition{ + Type: jsonschema.Object, + Properties: map[string]jsonschema.Definition{}, + Required: []string{""}, + }, + }, + Fn: func(_ string) (string, error) { + return t.Result, nil + }, + } + } + + return tools, nil +} diff --git a/backend/pkg/ai/static.yml b/backend/pkg/ai/static.yml new file mode 100644 index 0000000..e234044 --- /dev/null +++ b/backend/pkg/ai/static.yml @@ -0,0 +1,9 @@ +tools: + - name: "special_beers" + description: "Sometimes the pub offers limited special beer. Usually different brand or some local brewery" + result: | + Current special beers offer from 4.12.2024 to 8.12.2024: + - Kozi Kabrón 12 - Starší z bratrů Kabrónů je dostupný pouze v čisté (filtrované) variantě. To z něj dělá jediné filtrované pivo v naší nabídce. Jde o tradiční český ležák, uvařený tradičním způsobem z tradičních surovin. Chutná špicově. + - Hořký Kozi 11 - Příjemně hořký škopek, který se dá lámat jeden za druhým. Tohle pivo rozhodně nemůže soutěžit v kategorii tradiční český ležák. Vaříme jej sice tradičně, ale s podílem (pro ležák) netradičního žitného sladu. Přichmeleno francouzským chmelem. + - Theodor Pilsner 11 - Ležák plzeňského typu. Pivo je vařeno podle tradičních receptur, podpořeno českými slady a chmely. Naše vlajková loď vám zpříjemní jakoukoli životní plavbu. + type: "text" \ No newline at end of file