aboutsummaryrefslogtreecommitdiff
path: root/cmd/mimi/modules/discord/jufra/tools
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-09-07 12:13:43 -0400
committerXe Iaso <me@xeiaso.net>2024-09-07 12:13:43 -0400
commit6bc04732eceabc5c208394da99e3c0cd10ea53c7 (patch)
treecdae8188a4f712eddd311faaf2a68e5adabfd30f /cmd/mimi/modules/discord/jufra/tools
parent104aff4eb1aac99fae718728c1ddfec06d3993b2 (diff)
downloadx-6bc04732eceabc5c208394da99e3c0cd10ea53c7.tar.xz
x-6bc04732eceabc5c208394da99e3c0cd10ea53c7.zip
cmd/mimi: update tool logic, prepare for generic tool interface
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd/mimi/modules/discord/jufra/tools')
-rw-r--r--cmd/mimi/modules/discord/jufra/tools/reply.go64
-rw-r--r--cmd/mimi/modules/discord/jufra/tools/tools.go13
2 files changed, 77 insertions, 0 deletions
diff --git a/cmd/mimi/modules/discord/jufra/tools/reply.go b/cmd/mimi/modules/discord/jufra/tools/reply.go
new file mode 100644
index 0000000..f8dcde0
--- /dev/null
+++ b/cmd/mimi/modules/discord/jufra/tools/reply.go
@@ -0,0 +1,64 @@
+package tools
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+
+ "github.com/bwmarrin/discordgo"
+ "within.website/x/web/ollama"
+)
+
+type replyArgs struct {
+ Message string `json:"message"`
+}
+
+func (ra replyArgs) Valid() error {
+ if ra.Message == "" {
+ return errors.New("tools: replyArgs is invalid: missing message")
+ }
+
+ return nil
+}
+
+type Reply struct{}
+
+func (Reply) Execute(ctx context.Context, sess *discordgo.Session, mc *discordgo.MessageCreate, conv []ollama.Message, tc ollama.ToolCall) error {
+ var args replyArgs
+
+ if err := json.Unmarshal(tc.Arguments, &args); err != nil {
+ return fmt.Errorf("error parsing reply args: %w", err)
+ }
+
+ if err := args.Valid(); err != nil {
+ return err
+ }
+
+ if _, err := sess.ChannelMessageSend(mc.ChannelID, args.Message, discordgo.WithContext(ctx)); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (Reply) Describe() ollama.Function {
+ return ollama.Function{
+ Name: "reply",
+ Description: "Reply to the message",
+ Parameters: ollama.Param{
+ Type: "object",
+ Properties: ollama.Properties{
+ "message": {
+ Type: "string",
+ Description: "The message to send",
+ },
+ },
+ Required: []string{"message"},
+ },
+ }
+}
+
+var (
+ _ Impl = Reply{}
+)
diff --git a/cmd/mimi/modules/discord/jufra/tools/tools.go b/cmd/mimi/modules/discord/jufra/tools/tools.go
new file mode 100644
index 0000000..87a4cc1
--- /dev/null
+++ b/cmd/mimi/modules/discord/jufra/tools/tools.go
@@ -0,0 +1,13 @@
+package tools
+
+import (
+ "context"
+
+ "github.com/bwmarrin/discordgo"
+ "within.website/x/web/ollama"
+)
+
+type Impl interface {
+ Execute(ctx context.Context, sess *discordgo.Session, mc *discordgo.MessageCreate, conv []ollama.Message, tc ollama.ToolCall) error
+ Describe() ollama.Function
+}