| package tools |
| |
| import ( |
| "github.com/invopop/jsonschema" |
| ) |
| |
| type Tool interface { |
| Name() string |
| Description() string |
| InputSchema() *jsonschema.Schema |
| Call(inp string) (string, error) |
| } |
| |
| type Registry interface { |
| All() []Tool |
| Add(tool Tool) |
| Get(name string) Tool |
| } |
| |
| type InMemoryRegistry struct { |
| tools map[string]Tool |
| } |
| |
| func NewInMemoryRegistry() *InMemoryRegistry { |
| return &InMemoryRegistry{ |
| make(map[string]Tool), |
| } |
| } |
| |
| func (r *InMemoryRegistry) Add(tool Tool) { |
| r.tools[tool.Name()] = tool |
| } |
| |
| func (r *InMemoryRegistry) All() []Tool { |
| var ret []Tool |
| for _, t := range r.tools { |
| ret = append(ret, t) |
| } |
| return ret |
| } |
| |
| func (r *InMemoryRegistry) Get(name string) Tool { |
| return r.tools[name] |
| } |