post inicial
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package toolcall
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestParseFormats(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
in string
|
||||
names []string
|
||||
args string
|
||||
}{
|
||||
"tool fence": {
|
||||
in: "Voy a revisar.\n```tool\n{\"tool\": \"exec\", \"arguments\": {\"command\": \"uname\", \"args\": [\"-a\"]}}\n```",
|
||||
names: []string{"exec"}, args: `{"command": "uname", "args": ["-a"]}`,
|
||||
},
|
||||
"xml qwen": {
|
||||
in: "<tool_call>\n{\"name\": \"read_file\", \"arguments\": {\"path\": \"/etc/hosts\"}}\n</tool_call>",
|
||||
names: []string{"read_file"}, args: `{"path": "/etc/hosts"}`,
|
||||
},
|
||||
"bare json": {
|
||||
in: `{"tool":"system_info","arguments":{}}`,
|
||||
names: []string{"system_info"}, args: `{}`,
|
||||
},
|
||||
"string arguments": {
|
||||
in: "```tool\n{\"name\":\"exec\",\"arguments\":\"{\\\"command\\\":\\\"id\\\"}\"}\n```",
|
||||
names: []string{"exec"}, args: `{"command":"id"}`,
|
||||
},
|
||||
"list": {
|
||||
in: "```tool\n[{\"tool\":\"stat\",\"arguments\":{\"path\":\"a\"}},{\"tool\":\"stat\",\"arguments\":{\"path\":\"b\"}}]\n```",
|
||||
names: []string{"stat", "stat"},
|
||||
},
|
||||
"null arguments": {
|
||||
in: "```tool\n{\"tool\":\"system_info\",\"arguments\":null}\n```",
|
||||
names: []string{"system_info"}, args: `{}`,
|
||||
},
|
||||
}
|
||||
for name, c := range cases {
|
||||
calls, found, err := Parse(c.in)
|
||||
if err != nil || !found {
|
||||
t.Errorf("%s: found=%v err=%v", name, found, err)
|
||||
continue
|
||||
}
|
||||
if len(calls) != len(c.names) {
|
||||
t.Errorf("%s: %d calls", name, len(calls))
|
||||
continue
|
||||
}
|
||||
for i, n := range c.names {
|
||||
if calls[i].Name != n {
|
||||
t.Errorf("%s: call %d name %q", name, i, calls[i].Name)
|
||||
}
|
||||
if calls[i].ID == "" {
|
||||
t.Errorf("%s: missing ID", name)
|
||||
}
|
||||
}
|
||||
if c.args != "" && calls[0].Arguments != c.args {
|
||||
t.Errorf("%s: args %q", name, calls[0].Arguments)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseNoCall(t *testing.T) {
|
||||
for _, in := range []string{
|
||||
"El servicio está activo. TASK_STATUS: DONE",
|
||||
"Ejemplo de config:\n```json\n{\"listen\": 80}\n```",
|
||||
"```bash\nsystemctl status nginx\n```",
|
||||
"",
|
||||
} {
|
||||
calls, found, err := Parse(in)
|
||||
if found || err != nil || len(calls) != 0 {
|
||||
t.Errorf("%q: found=%v err=%v calls=%v", in, found, err, calls)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseMalformed(t *testing.T) {
|
||||
for _, in := range []string{
|
||||
"```tool\n{\"tool\": \"exec\", \"arguments\": {\"command\": \n```",
|
||||
"```tool\n{\"arguments\": {}}\n```",
|
||||
"```tool\n{\"tool\":\"exec\",\"arguments\":[1,2]}\n```",
|
||||
"<tool_call>not json</tool_call>",
|
||||
} {
|
||||
_, found, err := Parse(in)
|
||||
if !found || err == nil {
|
||||
t.Errorf("%q: expected malformed error, found=%v err=%v", in, found, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user