feat(agent): shared state, allow to track conversations globally (#148)
* feat(agent): shared state, allow to track conversations globally Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Cleanup Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * track conversations initiated by the bot Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
This commit is contained in:
committed by
GitHub
parent
2b07dd79ec
commit
c23e655f44
@@ -18,7 +18,7 @@ func NewBrowse(config map[string]string) *BrowseAction {
|
||||
|
||||
type BrowseAction struct{}
|
||||
|
||||
func (a *BrowseAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *BrowseAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
URL string `json:"url"`
|
||||
}{}
|
||||
|
||||
@@ -45,7 +45,7 @@ func NewBrowserAgentRunner(config map[string]string, defaultURL string) *Browser
|
||||
}
|
||||
}
|
||||
|
||||
func (b *BrowserAgentRunner) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (b *BrowserAgentRunner) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := api.AgentRequest{}
|
||||
err := params.Unmarshal(&result)
|
||||
if err != nil {
|
||||
|
||||
@@ -52,7 +52,7 @@ type CallAgentAction struct {
|
||||
blacklist []string
|
||||
}
|
||||
|
||||
func (a *CallAgentAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *CallAgentAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
AgentName string `json:"agent_name"`
|
||||
Message string `json:"message"`
|
||||
|
||||
@@ -24,7 +24,7 @@ func NewCounter(config map[string]string) *CounterAction {
|
||||
}
|
||||
|
||||
// Run executes the counter action
|
||||
func (a *CounterAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *CounterAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
// Parse parameters
|
||||
request := struct {
|
||||
Name string `json:"name"`
|
||||
|
||||
@@ -45,7 +45,7 @@ func NewDeepResearchRunner(config map[string]string, defaultURL string) *DeepRes
|
||||
}
|
||||
}
|
||||
|
||||
func (d *DeepResearchRunner) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (d *DeepResearchRunner) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := api.DeepResearchRequest{}
|
||||
err := params.Unmarshal(&result)
|
||||
if err != nil {
|
||||
|
||||
@@ -29,7 +29,7 @@ type GenImageAction struct {
|
||||
imageModel string
|
||||
}
|
||||
|
||||
func (a *GenImageAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *GenImageAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Prompt string `json:"prompt"`
|
||||
Size string `json:"size"`
|
||||
|
||||
@@ -42,7 +42,7 @@ var _ = Describe("GenImageAction", func() {
|
||||
"size": "256x256",
|
||||
}
|
||||
|
||||
url, err := action.Run(ctx, params)
|
||||
url, err := action.Run(ctx, nil, params)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(url).ToNot(BeEmpty())
|
||||
})
|
||||
@@ -52,7 +52,7 @@ var _ = Describe("GenImageAction", func() {
|
||||
"size": "256x256",
|
||||
}
|
||||
|
||||
_, err := action.Run(ctx, params)
|
||||
_, err := action.Run(ctx, nil, params)
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
@@ -26,7 +26,7 @@ func NewGithubIssueCloser(config map[string]string) *GithubIssuesCloser {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubIssuesCloser) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubIssuesCloser) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -27,7 +27,7 @@ func NewGithubIssueCommenter(config map[string]string) *GithubIssuesCommenter {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubIssuesCommenter) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubIssuesCommenter) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -27,7 +27,7 @@ func NewGithubIssueEditor(config map[string]string) *GithubIssueEditor {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubIssueEditor) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubIssueEditor) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -38,7 +38,7 @@ func NewGithubIssueLabeler(config map[string]string) *GithubIssuesLabeler {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubIssuesLabeler) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubIssuesLabeler) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -27,7 +27,7 @@ func NewGithubIssueOpener(config map[string]string) *GithubIssuesOpener {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubIssuesOpener) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubIssuesOpener) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Title string `json:"title"`
|
||||
Body string `json:"text"`
|
||||
|
||||
@@ -27,7 +27,7 @@ func NewGithubIssueReader(config map[string]string) *GithubIssuesReader {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubIssuesReader) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubIssuesReader) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -28,7 +28,7 @@ func NewGithubIssueSearch(config map[string]string) *GithubIssueSearch {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubIssueSearch) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubIssueSearch) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Query string `json:"query"`
|
||||
Repository string `json:"repository"`
|
||||
|
||||
@@ -3,8 +3,6 @@ package actions
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strconv"
|
||||
|
||||
"github.com/google/go-github/v69/github"
|
||||
"github.com/mudler/LocalAGI/core/types"
|
||||
@@ -17,96 +15,6 @@ type GithubPRCommenter struct {
|
||||
client *github.Client
|
||||
}
|
||||
|
||||
var (
|
||||
patchRegex = regexp.MustCompile(`^@@.*\d [\+\-](\d+),?(\d+)?.+?@@`)
|
||||
)
|
||||
|
||||
type commitFileInfo struct {
|
||||
FileName string
|
||||
hunkInfos []*hunkInfo
|
||||
sha string
|
||||
}
|
||||
|
||||
type hunkInfo struct {
|
||||
hunkStart int
|
||||
hunkEnd int
|
||||
}
|
||||
|
||||
func (hi hunkInfo) isLineInHunk(line int) bool {
|
||||
return line >= hi.hunkStart && line <= hi.hunkEnd
|
||||
}
|
||||
|
||||
func (cfi *commitFileInfo) getHunkInfo(line int) *hunkInfo {
|
||||
for _, hunkInfo := range cfi.hunkInfos {
|
||||
if hunkInfo.isLineInHunk(line) {
|
||||
return hunkInfo
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfi *commitFileInfo) isLineInChange(line int) bool {
|
||||
return cfi.getHunkInfo(line) != nil
|
||||
}
|
||||
|
||||
func (cfi commitFileInfo) calculatePosition(line int) *int {
|
||||
hi := cfi.getHunkInfo(line)
|
||||
if hi == nil {
|
||||
return nil
|
||||
}
|
||||
position := line - hi.hunkStart
|
||||
return &position
|
||||
}
|
||||
|
||||
func parseHunkPositions(patch, filename string) ([]*hunkInfo, error) {
|
||||
hunkInfos := make([]*hunkInfo, 0)
|
||||
if patch != "" {
|
||||
groups := patchRegex.FindAllStringSubmatch(patch, -1)
|
||||
if len(groups) < 1 {
|
||||
return hunkInfos, fmt.Errorf("the patch details for [%s] could not be resolved", filename)
|
||||
}
|
||||
for _, patchGroup := range groups {
|
||||
endPos := 2
|
||||
if len(patchGroup) > 2 && patchGroup[2] == "" {
|
||||
endPos = 1
|
||||
}
|
||||
|
||||
hunkStart, err := strconv.Atoi(patchGroup[1])
|
||||
if err != nil {
|
||||
hunkStart = -1
|
||||
}
|
||||
hunkEnd, err := strconv.Atoi(patchGroup[endPos])
|
||||
if err != nil {
|
||||
hunkEnd = -1
|
||||
}
|
||||
hunkInfos = append(hunkInfos, &hunkInfo{
|
||||
hunkStart: hunkStart,
|
||||
hunkEnd: hunkEnd,
|
||||
})
|
||||
}
|
||||
}
|
||||
return hunkInfos, nil
|
||||
}
|
||||
|
||||
func getCommitInfo(file *github.CommitFile) (*commitFileInfo, error) {
|
||||
patch := file.GetPatch()
|
||||
hunkInfos, err := parseHunkPositions(patch, *file.Filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sha := file.GetSHA()
|
||||
if sha == "" {
|
||||
return nil, fmt.Errorf("the sha details for [%s] could not be resolved", *file.Filename)
|
||||
}
|
||||
|
||||
return &commitFileInfo{
|
||||
FileName: *file.Filename,
|
||||
hunkInfos: hunkInfos,
|
||||
sha: sha,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func NewGithubPRCommenter(config map[string]string) *GithubPRCommenter {
|
||||
client := github.NewClient(nil).WithAuthToken(config["token"])
|
||||
|
||||
@@ -119,7 +27,7 @@ func NewGithubPRCommenter(config map[string]string) *GithubPRCommenter {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubPRCommenter) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubPRCommenter) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -148,7 +148,7 @@ func (g *GithubPRCreator) createOrUpdateFile(ctx context.Context, branch string,
|
||||
return nil
|
||||
}
|
||||
|
||||
func (g *GithubPRCreator) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubPRCreator) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -54,7 +54,7 @@ var _ = Describe("GithubPRCreator", func() {
|
||||
},
|
||||
}
|
||||
|
||||
result, err := action.Run(ctx, params)
|
||||
result, err := action.Run(ctx, nil, params)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(result.Result).To(ContainSubstring("pull request #"))
|
||||
})
|
||||
@@ -65,7 +65,7 @@ var _ = Describe("GithubPRCreator", func() {
|
||||
"body": "This is a test pull request",
|
||||
}
|
||||
|
||||
_, err := action.Run(ctx, params)
|
||||
_, err := action.Run(ctx, nil, params)
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
@@ -34,7 +34,7 @@ func NewGithubPRReader(config map[string]string) *GithubPRReader {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubPRReader) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubPRReader) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -30,7 +30,7 @@ func NewGithubPRReviewer(config map[string]string) *GithubPRReviewer {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubPRReviewer) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubPRReviewer) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -58,7 +58,7 @@ var _ = Describe("GithubPRReviewer", func() {
|
||||
},
|
||||
}
|
||||
|
||||
result, err := reviewer.Run(ctx, params)
|
||||
result, err := reviewer.Run(ctx, nil, params)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(result.Result).To(ContainSubstring("reviewed successfully"))
|
||||
})
|
||||
@@ -70,7 +70,7 @@ var _ = Describe("GithubPRReviewer", func() {
|
||||
"review_action": "COMMENT",
|
||||
}
|
||||
|
||||
result, err := reviewer.Run(ctx, params)
|
||||
result, err := reviewer.Run(ctx, nil, params)
|
||||
Expect(err).To(HaveOccurred())
|
||||
Expect(result.Result).To(ContainSubstring("not found"))
|
||||
})
|
||||
@@ -85,7 +85,7 @@ var _ = Describe("GithubPRReviewer", func() {
|
||||
"review_action": "INVALID_ACTION",
|
||||
}
|
||||
|
||||
_, err := reviewer.Run(ctx, params)
|
||||
_, err := reviewer.Run(ctx, nil, params)
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
@@ -30,7 +30,7 @@ func NewGithubRepositoryCreateOrUpdateContent(config map[string]string) *GithubR
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubRepositoryCreateOrUpdateContent) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubRepositoryCreateOrUpdateContent) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Path string `json:"path"`
|
||||
Repository string `json:"repository"`
|
||||
|
||||
@@ -101,7 +101,7 @@ func (g *GithubRepositoryGetAllContent) getContentRecursively(ctx context.Contex
|
||||
return result.String(), nil
|
||||
}
|
||||
|
||||
func (g *GithubRepositoryGetAllContent) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubRepositoryGetAllContent) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -45,7 +45,7 @@ var _ = Describe("GithubRepositoryGetAllContent", func() {
|
||||
"path": ".",
|
||||
}
|
||||
|
||||
result, err := action.Run(ctx, params)
|
||||
result, err := action.Run(ctx, nil, params)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(result.Result).NotTo(BeEmpty())
|
||||
|
||||
@@ -64,7 +64,7 @@ var _ = Describe("GithubRepositoryGetAllContent", func() {
|
||||
"path": "non-existent-path",
|
||||
}
|
||||
|
||||
_, err := action.Run(ctx, params)
|
||||
_, err := action.Run(ctx, nil, params)
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
@@ -27,7 +27,7 @@ func NewGithubRepositoryGetContent(config map[string]string) *GithubRepositoryGe
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubRepositoryGetContent) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubRepositoryGetContent) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Path string `json:"path"`
|
||||
Repository string `json:"repository"`
|
||||
|
||||
@@ -55,7 +55,7 @@ func (g *GithubRepositoryListFiles) listFilesRecursively(ctx context.Context, pa
|
||||
return files, nil
|
||||
}
|
||||
|
||||
func (g *GithubRepositoryListFiles) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubRepositoryListFiles) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -25,7 +25,7 @@ func NewGithubRepositoryREADME(config map[string]string) *GithubRepositoryREADME
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GithubRepositoryREADME) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubRepositoryREADME) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -71,7 +71,7 @@ func (g *GithubRepositorySearchFiles) searchFilesRecursively(ctx context.Context
|
||||
return result.String(), nil
|
||||
}
|
||||
|
||||
func (g *GithubRepositorySearchFiles) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (g *GithubRepositorySearchFiles) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Repository string `json:"repository"`
|
||||
Owner string `json:"owner"`
|
||||
|
||||
@@ -16,7 +16,7 @@ func NewScraper(config map[string]string) *ScraperAction {
|
||||
|
||||
type ScraperAction struct{}
|
||||
|
||||
func (a *ScraperAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *ScraperAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
URL string `json:"url"`
|
||||
}{}
|
||||
|
||||
@@ -35,7 +35,7 @@ func NewSearch(config map[string]string) *SearchAction {
|
||||
|
||||
type SearchAction struct{ results int }
|
||||
|
||||
func (a *SearchAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *SearchAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Query string `json:"query"`
|
||||
}{}
|
||||
|
||||
@@ -28,7 +28,7 @@ type SendMailAction struct {
|
||||
smtpPort string
|
||||
}
|
||||
|
||||
func (a *SendMailAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *SendMailAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Message string `json:"message"`
|
||||
To string `json:"to"`
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/mudler/LocalAGI/core/types"
|
||||
"github.com/mudler/LocalAGI/pkg/config"
|
||||
"github.com/mudler/LocalAGI/pkg/xstrings"
|
||||
"github.com/sashabaranov/go-openai"
|
||||
"github.com/sashabaranov/go-openai/jsonschema"
|
||||
)
|
||||
|
||||
@@ -19,9 +20,11 @@ const (
|
||||
)
|
||||
|
||||
type SendTelegramMessageRunner struct {
|
||||
token string
|
||||
chatID int64
|
||||
bot *bot.Bot
|
||||
token string
|
||||
chatID int64
|
||||
bot *bot.Bot
|
||||
customName string
|
||||
customDescription string
|
||||
}
|
||||
|
||||
func NewSendTelegramMessageRunner(config map[string]string) *SendTelegramMessageRunner {
|
||||
@@ -46,9 +49,11 @@ func NewSendTelegramMessageRunner(config map[string]string) *SendTelegramMessage
|
||||
}
|
||||
|
||||
return &SendTelegramMessageRunner{
|
||||
token: token,
|
||||
chatID: chatID,
|
||||
bot: b,
|
||||
token: token,
|
||||
chatID: chatID,
|
||||
bot: b,
|
||||
customName: config["custom_name"],
|
||||
customDescription: config["custom_description"],
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +62,7 @@ type TelegramMessageParams struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func (s *SendTelegramMessageRunner) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (s *SendTelegramMessageRunner) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
var messageParams TelegramMessageParams
|
||||
err := params.Unmarshal(&messageParams)
|
||||
if err != nil {
|
||||
@@ -95,6 +100,11 @@ func (s *SendTelegramMessageRunner) Run(ctx context.Context, params types.Action
|
||||
}
|
||||
}
|
||||
|
||||
sharedState.ConversationTracker.AddMessage(fmt.Sprintf("telegram:%d", messageParams.ChatID), openai.ChatCompletionMessage{
|
||||
Content: messageParams.Message,
|
||||
Role: "assistant",
|
||||
})
|
||||
|
||||
return types.ActionResult{
|
||||
Result: fmt.Sprintf("Message sent successfully to chat ID %d in %d parts", messageParams.ChatID, len(messages)),
|
||||
Metadata: map[string]interface{}{
|
||||
@@ -104,10 +114,21 @@ func (s *SendTelegramMessageRunner) Run(ctx context.Context, params types.Action
|
||||
}
|
||||
|
||||
func (s *SendTelegramMessageRunner) Definition() types.ActionDefinition {
|
||||
|
||||
customName := "send_telegram_message"
|
||||
if s.customName != "" {
|
||||
customName = s.customName
|
||||
}
|
||||
|
||||
customDescription := "Send a message to a Telegram user or group"
|
||||
if s.customDescription != "" {
|
||||
customDescription = s.customDescription
|
||||
}
|
||||
|
||||
if s.chatID != 0 {
|
||||
return types.ActionDefinition{
|
||||
Name: "send_telegram_message",
|
||||
Description: "Send a message to a Telegram user or group",
|
||||
Name: types.ActionDefinitionName(customName),
|
||||
Description: customDescription,
|
||||
Properties: map[string]jsonschema.Definition{
|
||||
"message": {
|
||||
Type: jsonschema.String,
|
||||
@@ -119,8 +140,8 @@ func (s *SendTelegramMessageRunner) Definition() types.ActionDefinition {
|
||||
}
|
||||
|
||||
return types.ActionDefinition{
|
||||
Name: "send_telegram_message",
|
||||
Description: "Send a message to a Telegram user or group",
|
||||
Name: types.ActionDefinitionName(customName),
|
||||
Description: customDescription,
|
||||
Properties: map[string]jsonschema.Definition{
|
||||
"chat_id": {
|
||||
Type: jsonschema.Number,
|
||||
@@ -156,5 +177,19 @@ func SendTelegramMessageConfigMeta() []config.Field {
|
||||
Required: false,
|
||||
HelpText: "Default Telegram chat ID to send messages to (can be overridden in parameters)",
|
||||
},
|
||||
{
|
||||
Name: "custom_name",
|
||||
Label: "Custom Name",
|
||||
Type: config.FieldTypeText,
|
||||
Required: false,
|
||||
HelpText: "Custom name for the action (optional, defaults to 'send_telegram_message')",
|
||||
},
|
||||
{
|
||||
Name: "custom_description",
|
||||
Label: "Custom Description",
|
||||
Type: config.FieldTypeText,
|
||||
Required: false,
|
||||
HelpText: "Custom description for the action (optional, defaults to 'Send a message to a Telegram user or group')",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ type ShellAction struct {
|
||||
customDescription string
|
||||
}
|
||||
|
||||
func (a *ShellAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *ShellAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Command string `json:"command"`
|
||||
Host string `json:"host"`
|
||||
|
||||
@@ -22,7 +22,7 @@ type PostTweetAction struct {
|
||||
noCharacterLimit bool
|
||||
}
|
||||
|
||||
func (a *PostTweetAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *PostTweetAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Text string `json:"text"`
|
||||
}{}
|
||||
|
||||
@@ -15,7 +15,7 @@ func NewWikipedia(config map[string]string) *WikipediaAction {
|
||||
|
||||
type WikipediaAction struct{}
|
||||
|
||||
func (a *WikipediaAction) Run(ctx context.Context, params types.ActionParams) (types.ActionResult, error) {
|
||||
func (a *WikipediaAction) Run(ctx context.Context, sharedState *types.AgentSharedState, params types.ActionParams) (types.ActionResult, error) {
|
||||
result := struct {
|
||||
Query string `json:"query"`
|
||||
}{}
|
||||
|
||||
Reference in New Issue
Block a user