summaryrefslogtreecommitdiff
path: root/spec/test_workflow.lua
diff options
context:
space:
mode:
Diffstat (limited to 'spec/test_workflow.lua')
-rw-r--r--spec/test_workflow.lua47
1 files changed, 47 insertions, 0 deletions
diff --git a/spec/test_workflow.lua b/spec/test_workflow.lua
index c5ba06c..5d58c01 100644
--- a/spec/test_workflow.lua
+++ b/spec/test_workflow.lua
@@ -231,6 +231,53 @@ return {
end)
end },
+ -- One validator, always the built-in one: a schema must not be judged by
+ -- whether an undeclared rock happens to be installed on this machine.
+ { "validation never consults the jsonschema rock", function()
+ if not json_available() then
+ return "skip", "dkjson is not installed"
+ end
+ local restore = package.loaded.jsonschema
+ package.loaded.jsonschema = {
+ generate_validator = function()
+ return function()
+ return false, "the rock must not be consulted"
+ end
+ end,
+ }
+ local ok, err = pcall(with_host, function(handle, profiles)
+ handle.queue_for("alpha", { structured_json = '{"items":["x"]}' })
+ local result = workflow.execute(workflow.workflow(function(ctx)
+ return ctx:agent({
+ agent = "alpha",
+ prompt = "split it",
+ output = { schema = ITEMS_SCHEMA },
+ }):await()
+ end), "input", { profiles = profiles })
+ assert(result.status == "completed", tostring(result.error))
+ assert(result.output.items[1] == "x", "the built-in validator accepted it")
+ end)
+ package.loaded.jsonschema = restore
+ if not ok then
+ error(err, 0)
+ end
+ end },
+
+ { "a structured worker whose output tool carried no arguments fails as missing", function()
+ with_host(function(handle, profiles)
+ handle.queue_for("alpha", { structured_json = "" })
+ local result = workflow.execute(workflow.workflow(function(ctx)
+ return ctx:agent({
+ agent = "alpha",
+ prompt = "split it",
+ output = { schema = ITEMS_SCHEMA },
+ }):await()
+ end), "input", { profiles = profiles })
+ assert(result.status == "failed", tostring(result.status))
+ has(result.error, "structured output missing")
+ end)
+ end },
+
{ "a structured worker that answers in prose fails", function()
with_host(function(handle, profiles)
handle.queue_for("alpha", { output = "prose, not a tool call" })