mirror of
https://github.com/ollama/ollama.git
synced 2026-07-30 17:38:02 -04:00
39 lines
1.2 KiB
Go
39 lines
1.2 KiB
Go
package tools
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/ollama/ollama/agent"
|
|
"github.com/ollama/ollama/api"
|
|
)
|
|
|
|
// Skill is the model-facing adapter for the core agent skill catalog.
|
|
// It only supplies instructions; regular tools retain their own approval
|
|
// requirements for filesystem or network access.
|
|
type Skill struct{ Catalog *agent.SkillCatalog }
|
|
|
|
func (t *Skill) Name() string { return "skill" }
|
|
|
|
func (t *Skill) Description() string {
|
|
return "Load a named Ollama skill and return its instructions."
|
|
}
|
|
|
|
func (t *Skill) Schema() api.ToolFunction {
|
|
props := api.NewToolPropertiesMap()
|
|
props.Set("name", api.ToolProperty{Type: api.PropertyType{"string"}, Description: "Name of the skill to load."})
|
|
return api.ToolFunction{Name: t.Name(), Description: t.Description(), Parameters: api.ToolFunctionParameters{Type: "object", Properties: props, Required: []string{"name"}}}
|
|
}
|
|
|
|
func (t *Skill) Execute(_ context.Context, _ agent.ToolContext, args map[string]any) (agent.ToolResult, error) {
|
|
name, ok := args["name"].(string)
|
|
if !ok {
|
|
return agent.ToolResult{}, errors.New("name parameter is required")
|
|
}
|
|
skill, err := t.Catalog.Load(name)
|
|
if err != nil {
|
|
return agent.ToolResult{}, err
|
|
}
|
|
return agent.ToolResult{Content: skill.Content()}, nil
|
|
}
|