From 7c0f615952fa1561b3d4be344c53662011abe5a7 Mon Sep 17 00:00:00 2001
From: Ettore Di Giacinto
Date: Sun, 14 Apr 2024 00:05:19 +0200
Subject: [PATCH] Add import/export
---
example/webui/agentpool.go | 8 ++++
example/webui/app.go | 55 ++++++++++++++++++++++-
example/webui/routes.go | 8 ++++
example/webui/views/agents.html | 20 +++++++--
example/webui/views/settings.html | 72 +++++++++++++++++++++++++++++++
5 files changed, 158 insertions(+), 5 deletions(-)
create mode 100644 example/webui/views/settings.html
diff --git a/example/webui/agentpool.go b/example/webui/agentpool.go
index a3cf60d..36d3e79 100644
--- a/example/webui/agentpool.go
+++ b/example/webui/agentpool.go
@@ -465,6 +465,14 @@ func (a *AgentPool) GetAgent(name string) *Agent {
return a.agents[name]
}
+func (a *AgentPool) GetConfig(name string) *AgentConfig {
+ agent, exists := a.pool[name]
+ if !exists {
+ return nil
+ }
+ return &agent
+}
+
func (a *AgentPool) GetManager(name string) Manager {
return a.managers[name]
}
diff --git a/example/webui/app.go b/example/webui/app.go
index 63ece10..f192a44 100644
--- a/example/webui/app.go
+++ b/example/webui/app.go
@@ -2,6 +2,7 @@ package main
import (
"bytes"
+ "encoding/json"
"fmt"
"net/http"
"os"
@@ -30,7 +31,6 @@ func (a *App) KnowledgeBaseReset(db *InMemoryDatabase) func(c *fiber.Ctx) error
func (a *App) KnowledgeBaseFile(db *InMemoryDatabase) func(c *fiber.Ctx) error {
return func(c *fiber.Ctx) error {
// https://golang.withcodeexample.com/blog/file-upload-handling-golang-fiber-guide/
- // Handle file upload logic
file, err := c.FormFile("file")
if err != nil {
// Handle error
@@ -179,6 +179,59 @@ func (a *App) Create(pool *AgentPool) func(c *fiber.Ctx) error {
}
}
+func (a *App) ExportAgent(pool *AgentPool) func(c *fiber.Ctx) error {
+ return func(c *fiber.Ctx) error {
+ agent := pool.GetConfig(c.Params("name"))
+ if agent == nil {
+ return c.Status(http.StatusNotFound).SendString("Agent not found")
+ }
+
+ c.Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s.json", agent.Name))
+ return c.JSON(agent)
+ }
+}
+
+func (a *App) ImportAgent(pool *AgentPool) func(c *fiber.Ctx) error {
+ return func(c *fiber.Ctx) error {
+ file, err := c.FormFile("file")
+ if err != nil {
+ // Handle error
+ return err
+ }
+
+ os.MkdirAll("./uploads", os.ModePerm)
+
+ destination := fmt.Sprintf("./uploads/%s", file.Filename)
+ if err := c.SaveFile(file, destination); err != nil {
+ // Handle error
+ return err
+ }
+
+ data, err := os.ReadFile(destination)
+ if err != nil {
+ return err
+ }
+
+ config := AgentConfig{}
+ if err := json.Unmarshal(data, &config); err != nil {
+ return err
+ }
+
+ fmt.Println("Importing agent", config.Name)
+
+ if config.Name == "" {
+ c.Status(http.StatusBadRequest).SendString("Name is required")
+ return nil
+ }
+
+ if err := pool.CreateAgent(config.Name, &config); err != nil {
+ c.Status(http.StatusInternalServerError).SendString(err.Error())
+ return nil
+ }
+ return c.Redirect("/agents")
+ }
+}
+
func (a *App) Chat(pool *AgentPool) func(c *fiber.Ctx) error {
return func(c *fiber.Ctx) error {
payload := struct {
diff --git a/example/webui/routes.go b/example/webui/routes.go
index a580d81..2109642 100644
--- a/example/webui/routes.go
+++ b/example/webui/routes.go
@@ -91,6 +91,14 @@ func RegisterRoutes(webapp *fiber.App, pool *AgentPool, db *InMemoryDatabase, ap
})
})
+ webapp.Get("/settings/:name", func(c *fiber.Ctx) error {
+ return c.Render("views/settings", fiber.Map{
+ // "Character": agent.Character,
+ "Name": c.Params("name"),
+ })
+ })
+ webapp.Post("/settings/import", app.ImportAgent(pool))
+ webapp.Get("/settings/export/:name", app.ExportAgent(pool))
}
var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
diff --git a/example/webui/views/agents.html b/example/webui/views/agents.html
index 35d2b1f..6ff957b 100644
--- a/example/webui/views/agents.html
+++ b/example/webui/views/agents.html
@@ -47,7 +47,7 @@
Stop
|
- Delete
+ Settings
|
@@ -79,8 +79,8 @@
-
- Delete
+
+ Settings
|
@@ -92,7 +92,19 @@
+ {{template "views/partials/menu"}}
+
+ Agent settings - {{.Name}}
+
+
+
+
diff --git a/example/webui/views/settings.html b/example/webui/views/settings.html
new file mode 100644
index 0000000..4d70ffe
--- /dev/null
+++ b/example/webui/views/settings.html
@@ -0,0 +1,72 @@
+
+
+