swarm

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2025 License: MIT Imports: 44 Imported by: 0

README

Swarm

A lightweight multi-agent orchestration.

Swarm Magentic-One

Documentation

Overview

Adapted from https://github.com/justinas/alice/blob/master/chain.go

Index

Constants

This section is empty.

Variables

View Source
var ErrHandlerTimeout = errors.New("Agent service timeout")

ErrHandlerTimeout is returned on [Response] in handlers which have timed out.

Functions

func CallKit

func CallKit(tool any, kit string, method string, args ...any) (any, error)

func Chat added in v0.0.3

func Chat(ctx context.Context, req *llm.Request) (*llm.Response, error)

func CreateAgent

func CreateAgent(vars *api.Vars, name string, input *api.UserInput) (*api.Agent, error)

func Default

func Default(def, value any) any

Default returns the given value if it's non-nil and non-zero value; otherwise, it returns the default value provided.

func GetArrayProp

func GetArrayProp(key string, props map[string]any) ([]string, error)

func GetIntProp

func GetIntProp(key string, props map[string]any) (int, error)

func GetStrProp

func GetStrProp(key string, props map[string]any) (string, error)

func ImageGen added in v0.0.3

func ImageGen(ctx context.Context, req *llm.Request) (*llm.Response, error)

func ListAgents

func ListAgents(app *api.AppConfig) (map[string]*api.AgentsConfig, error)

func ListMcpTools added in v0.0.2

func ListMcpTools(tc *api.ToolsConfig) ([]*api.ToolFunc, error)

func ListModels

func ListModels(app *api.AppConfig) (map[string]*api.ModelsConfig, error)

func ListTools

func ListTools(app *api.AppConfig) (map[string]*api.ToolFunc, error)

func LoadAgentsAsset

func LoadAgentsAsset(as api.AssetStore, root string, groups map[string]*api.AgentsConfig) error

func LoadAgentsConfig

func LoadAgentsConfig(app *api.AppConfig) (map[string]*api.AgentsConfig, error)

func LoadAgentsData

func LoadAgentsData(data [][]byte) (*api.AgentsConfig, error)

LoadAgentsConfig loads the agent configuration from the provided YAML data.

func LoadFileAgentsConfig

func LoadFileAgentsConfig(base string, groups map[string]*api.AgentsConfig) error

func LoadFileModelsConfig

func LoadFileModelsConfig(base string, aliases map[string]*api.ModelsConfig) error

func LoadFileToolsConfig

func LoadFileToolsConfig(base string, kits map[string]*api.ToolsConfig) error

func LoadModelsAsset

func LoadModelsAsset(as api.AssetStore, base string, m map[string]*api.ModelsConfig) error

func LoadModelsData

func LoadModelsData(data [][]byte) (*api.ModelsConfig, error)

func LoadResourceAgentsConfig

func LoadResourceAgentsConfig(fs embed.FS, groups map[string]*api.AgentsConfig) error

func LoadResourceModelsConfig

func LoadResourceModelsConfig(fs embed.FS, aliases map[string]*api.ModelsConfig) error

func LoadResourceToolsConfig

func LoadResourceToolsConfig(fs embed.FS, kits map[string]*api.ToolsConfig) error

func LoadToolData

func LoadToolData(data [][]byte) (*api.ToolsConfig, error)

func LoadToolsAsset

func LoadToolsAsset(as api.AssetStore, base string, kits map[string]*api.ToolsConfig) error

func LoadToolsConfig

func LoadToolsConfig(app *api.AppConfig) (map[string]*api.ToolsConfig, error)

func LoadWebAgentsConfig

func LoadWebAgentsConfig(resources []*api.Resource, groups map[string]*api.AgentsConfig) error

func LoadWebModelsConfig

func LoadWebModelsConfig(resources []*api.Resource, aliases map[string]*api.ModelsConfig) error

func LoadWebToolsConfig

func LoadWebToolsConfig(resources []*api.Resource, kits map[string]*api.ToolsConfig) error

func MaxLogHandler

func MaxLogHandler(n int) func(Handler) Handler

MaxLogHandler returns a Handler that logs the request and response

func NewAgentCreator added in v0.0.6

func NewAgentCreator() api.AgentCreator

func NewAgentHandler added in v0.1.0

func NewAgentHandler() func(*api.Vars, *api.Agent) Handler

func NewToolCaller added in v0.1.0

func NewToolCaller() api.ToolCaller

func Spread

func Spread(val any) string

Spread concatenates the elements to create a single string.

Types

type Chain

type Chain struct {
	// contains filtered or unexported fields
}

Chain acts as a list of Handler constructors. Chain is effectively immutable: once created, it will always hold the same set of constructors in the same order.

func NewChain

func NewChain(constructors ...Constructor) Chain

New creates a new chain, memorizing the given list of middleware constructors. New serves no other function, constructors are only called upon a call to Then().

func (Chain) Append

func (c Chain) Append(constructors ...Constructor) Chain

Append extends a chain, adding the specified constructors as the last ones in the request flow.

Append returns a new chain, leaving the original one untouched.

stdChain := alice.New(m1, m2)
extChain := stdChain.Append(m3, m4)
// requests in stdChain go m1 -> m2
// requests in extChain go m1 -> m2 -> m3 -> m4

func (Chain) Extend

func (c Chain) Extend(chain Chain) Chain

Extend extends a chain by adding the specified chain as the last one in the request flow.

Extend returns a new chain, leaving the original one untouched.

stdChain := alice.New(m1, m2)
ext1Chain := alice.New(m3, m4)
ext2Chain := stdChain.Extend(ext1Chain)
// requests in stdChain go  m1 -> m2
// requests in ext1Chain go m3 -> m4
// requests in ext2Chain go m1 -> m2 -> m3 -> m4

Another example:

aHtmlAfterNosurf := alice.New(m2)
aHtml := alice.New(m1, func(h Handler) Handler {
	csrf := nosurf.New(h)
	csrf.SetFailureHandler(aHtmlAfterNosurf.ThenFunc(csrfFail))
	return csrf
}).Extend(aHtmlAfterNosurf)
// requests to aHtml hitting nosurfs success handler go m1 -> nosurf -> m2 -> target-handler
// requests to aHtml hitting nosurfs failure handler go m1 -> nosurf -> m2 -> csrfFail

func (Chain) Then

func (c Chain) Then(h Handler) Handler

Then chains the middleware and returns the final Handler.

New(m1, m2, m3).Then(h)

is equivalent to:

m1(m2(m3(h)))

When the request comes in, it will be passed to m1, then m2, then m3 and finally, the given handler (assuming every middleware calls the following one).

A chain can be safely reused by calling Then() several times.

stdStack := alice.New(ratelimitHandler, csrfHandler)
indexPipe = stdStack.Then(indexHandler)
authPipe = stdStack.Then(authHandler)

Note that constructors are called on every call to Then() and thus several instances of the same middleware will be created when a chain is reused in this way. For proper middleware, this should cause no problems.

Then() treats nil as DefaultServeMux.

func (Chain) ThenFunc

func (c Chain) ThenFunc(fn HandlerFunc) Handler

ThenFunc works identically to Then, but takes a HandlerFunc instead of a Handler.

The following two statements are equivalent:

c.Then(HandlerFunc(fn))
c.ThenFunc(fn)

ThenFunc provides all the guarantees of Then.

type Constructor

type Constructor func(Handler) Handler

A constructor for a piece of middleware. Some middleware use this constructor out of the box, so in most cases you can just pass somepackage.New

type FileContent

type FileContent struct {
	MimeType string
	Content  []byte

	// Optional message to LLM
	Message string
}

https://mimesniff.spec.whatwg.org/

type FileStore

type FileStore struct {
	Base string
}

func (*FileStore) ReadDir

func (fs *FileStore) ReadDir(name string) ([]api.DirEntry, error)

func (*FileStore) ReadFile

func (fs *FileStore) ReadFile(name string) ([]byte, error)

func (*FileStore) Resolve

func (fs *FileStore) Resolve(dir, name string) string

type FuncKit

type FuncKit struct {
}

func (*FuncKit) AgentInfo added in v0.0.2

func (r *FuncKit) AgentInfo(ctx context.Context, vars *api.Vars, _ string, args map[string]any) (string, error)

func (*FuncKit) AgentTransfer added in v0.1.0

func (r *FuncKit) AgentTransfer(_ context.Context, _ *api.Vars, _ string, args map[string]any) (*api.Result, error)

func (*FuncKit) ConvertTime

func (r *FuncKit) ConvertTime(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*FuncKit) GetCurrentTime

func (r *FuncKit) GetCurrentTime(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*FuncKit) GetLocalTimezone

func (r *FuncKit) GetLocalTimezone(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*FuncKit) ListAgents added in v0.0.2

func (r *FuncKit) ListAgents(ctx context.Context, vars *api.Vars, _ string, _ map[string]any) (string, error)

type Handler

type Handler = api.Handler

func TimeoutHandler

func TimeoutHandler(next Handler, dt time.Duration, msg string) Handler

TimeoutHandler returns a Handler that times out if the time limit is reached.

The new Handler calls thext next handler's Serve to handle each request, but if a call runs for longer than its time limit, the handler responds with a timeout error.

type HandlerFunc

type HandlerFunc func(*api.Request, *api.Response) error

The HandlerFunc type is an adapter to allow the use of ordinary functions as handlers. If f is a function with the appropriate signature, HandlerFunc(f) is a Handler that calls f.

func (HandlerFunc) Serve

func (f HandlerFunc) Serve(r *api.Request, w *api.Response) error

Serve calls f(w, r).

type LLMAdapter

type LLMAdapter func(context.Context, *llm.Request) (*llm.Response, error)

TODO

type LocalSystem added in v0.0.2

type LocalSystem struct {
	// contains filtered or unexported fields
}

func (LocalSystem) Call added in v0.0.2

func (ls LocalSystem) Call(ctx context.Context, vars *api.Vars, f *api.ToolFunc, args map[string]any) (*api.Result, error)

type McpClient

type McpClient struct {
	// contains filtered or unexported fields
}

func NewMcpClient

func NewMcpClient(cfg *api.ConnectorConfig) *McpClient

func (*McpClient) Connect added in v0.0.2

func (r *McpClient) Connect(ctx context.Context) (*mcp.ClientSession, error)

type ResourceStore

type ResourceStore struct {
	Base string
	FS   embed.FS
}

func (*ResourceStore) ReadDir

func (rs *ResourceStore) ReadDir(name string) ([]api.DirEntry, error)

func (*ResourceStore) ReadFile

func (rs *ResourceStore) ReadFile(name string) ([]byte, error)

func (*ResourceStore) Resolve

func (rs *ResourceStore) Resolve(dir, name string) string

type Swarm

type Swarm struct {
	Vars *api.Vars

	Creator api.AgentCreator
	Handler api.AgentHandler
}

func New

func New(vars *api.Vars) *Swarm

default

func (*Swarm) Run

func (r *Swarm) Run(req *api.Request, resp *api.Response) error

type SystemKit

type SystemKit struct {
}

func (*SystemKit) Cd

func (r *SystemKit) Cd(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) CopyToClipboard

func (r *SystemKit) CopyToClipboard(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) CopyToClipboardAppend

func (r *SystemKit) CopyToClipboardAppend(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) CreateDirectory

func (r *SystemKit) CreateDirectory(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) Env

func (r *SystemKit) Env(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) Exec

func (r *SystemKit) Exec(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) GetFileContentInput

func (r *SystemKit) GetFileContentInput(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) GetFileInfo

func (r *SystemKit) GetFileInfo(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) GetUserChoiceInput

func (r *SystemKit) GetUserChoiceInput(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) GetUserConfirmation

func (r *SystemKit) GetUserConfirmation(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) GetUserTextInput

func (r *SystemKit) GetUserTextInput(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) HomeDir

func (r *SystemKit) HomeDir(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) ListCommands

func (r *SystemKit) ListCommands(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) ListDirectory

func (r *SystemKit) ListDirectory(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) Man

func (r *SystemKit) Man(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) PasteFromClipboard

func (r *SystemKit) PasteFromClipboard(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) PasteFromClipboardWait

func (r *SystemKit) PasteFromClipboardWait(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) Pwd

func (r *SystemKit) Pwd(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) ReadFile

func (r *SystemKit) ReadFile(ctx context.Context, vars *api.Vars, name string, args map[string]any) (*FileContent, error)

ReadFile returns mime type and the raw file content

func (*SystemKit) RenameFile

func (r *SystemKit) RenameFile(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) RepoDir

func (r *SystemKit) RepoDir(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) SearchFiles

func (r *SystemKit) SearchFiles(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) TempDir

func (r *SystemKit) TempDir(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) Uname

func (r *SystemKit) Uname(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) Which

func (r *SystemKit) Which(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) WhoAmI

func (r *SystemKit) WhoAmI(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) WorkspaceDir

func (r *SystemKit) WorkspaceDir(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) WriteFile

func (r *SystemKit) WriteFile(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*SystemKit) WriteStdout

func (r *SystemKit) WriteStdout(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

type WebKit added in v0.1.0

type WebKit struct {
	// contains filtered or unexported fields
}

func (*WebKit) BingSearch added in v0.1.0

func (r *WebKit) BingSearch(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

Search the web using Bing.

func (*WebKit) BraveSearch added in v0.1.0

func (r *WebKit) BraveSearch(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

Search the web using Brave.

func (*WebKit) DdgSearch added in v0.1.0

func (r *WebKit) DdgSearch(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

Search the web using DuckDuckGo.

func (*WebKit) DownloadContent added in v0.1.0

func (r *WebKit) DownloadContent(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*WebKit) FetchContent added in v0.1.0

func (r *WebKit) FetchContent(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

func (*WebKit) GoogleSearch added in v0.1.0

func (r *WebKit) GoogleSearch(ctx context.Context, vars *api.Vars, name string, args map[string]any) (string, error)

Search the web using Google.

type WebStore

type WebStore struct {
	Base  string
	Token string
}

func (*WebStore) ReadDir

func (ws *WebStore) ReadDir(name string) ([]api.DirEntry, error)

func (*WebStore) ReadFile

func (ws *WebStore) ReadFile(name string) ([]byte, error)

func (*WebStore) Resolve

func (ws *WebStore) Resolve(base, name string) string

Directories

Path Synopsis
llm
tool
web
web/ddg
https://github.com/tmc/langchaingo/blob/main/tools/duckduckgo/internal/client.go https://github.com/tmc/langchaingo?tab=MIT-1-ov-file#readme
https://github.com/tmc/langchaingo/blob/main/tools/duckduckgo/internal/client.go https://github.com/tmc/langchaingo?tab=MIT-1-ov-file#readme
web/scrape
https://github.com/tmc/langchaingo/blob/main/tools/scraper/scraper.go https://github.com/tmc/langchaingo?tab=MIT-1-ov-file#readme
https://github.com/tmc/langchaingo/blob/main/tools/scraper/scraper.go https://github.com/tmc/langchaingo?tab=MIT-1-ov-file#readme

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL