Files
MealQuest/internal/ai/harness/echo_test.go
T
dev_agent 55c15b1b3a
CI / ci (push) Successful in 1m31s
Skill harness interface and repair retry (#53)
Co-authored-by: dev_agent <dev_agent@cubecraftlabs.com>
2026-10-05 07:55:34 -04:00

52 lines
1.2 KiB
Go

package harness
import (
"encoding/json"
"errors"
"strings"
"code.cubecraftlabs.com/Maniacs_Mansion/Meal-Quest/internal/ai/llm"
)
// echoSkill is the trivial test skill: it asks the model to repeat a word.
type echoSkill struct{}
type echoInput struct{ Word string }
type echoOutput struct {
Echo string `json:"echo"`
}
var _ Skill[echoInput, echoOutput] = echoSkill{}
func (echoSkill) Name() string { return "echo" }
func (echoSkill) Version() int { return 1 }
func (echoSkill) Render(in echoInput) (Prompt, error) {
if in.Word == "" {
return Prompt{}, errors.New("no word to echo")
}
return Prompt{System: "You repeat words.", User: "Repeat: " + in.Word}, nil
}
func (echoSkill) Schema() llm.JSONSchema {
return llm.JSONSchema{Name: "echo", Schema: json.RawMessage(
`{"type":"object","properties":{"echo":{"type":"string"}},"required":["echo"],"additionalProperties":false}`)}
}
func (echoSkill) Validate(out echoOutput) []string {
if out.Echo == "" {
return []string{"echo must not be empty"}
}
if out.Echo != strings.ToLower(out.Echo) {
return []string{"echo must be lower case"}
}
return nil
}
func (echoSkill) PostProcess(out echoOutput) (echoOutput, error) {
out.Echo = strings.TrimSpace(out.Echo)
return out, nil
}