local coding = require("coding")
local adapter = require("knl_adapter")
local E = std.env
local provider = E.get("AGENT_PROVIDER") or "anthropic"
local llm
if provider == "openai" then
if (E.get("QWEN_BASE_URL") or "") == "" then
error("coding_loop: AGENT_PROVIDER=openai needs QWEN_BASE_URL", 0)
end
llm = {
port = adapter.openai,
conf = {
base_url = E.get("QWEN_BASE_URL"),
api_key = E.get("OPENAI_API_KEY") or "dummy",
model = E.get("QWEN_MODEL") or "qwen",
dialect = "vllm",
thinking = { enabled = false },
temperature = 0.2,
max_tokens = 4096,
timeout = 600,
},
}
else
if (E.get("ANTHROPIC_API_KEY") or "") == "" then
error("coding_loop: ANTHROPIC_API_KEY is not set", 0)
end
llm = {
port = adapter.anthropic,
conf = {
api_key = E.get("ANTHROPIC_API_KEY"),
model = E.get("ANTHROPIC_MODEL") or "claude-haiku-4-5-20251001",
max_tokens = 4096,
timeout = 600,
},
}
end
if (_PROMPT or "") == "" or (E.get("CODING_TARGETS") or "") == "" then
error("coding_loop: pass the spec as --prompt and the target files in CODING_TARGETS", 0)
end
local result = coding.run({
spec = _PROMPT,
targets = E.get("CODING_TARGETS"),
verify = E.get("CODING_VERIFY") or "cargo check --all-targets",
repo = E.get("CODING_REPO") or ".",
llm = llm,
iters = tonumber(E.get("CODING_ITERS") or "5"),
turns = tonumber(E.get("CODING_TURNS") or "8"),
baseline = E.get("CODING_BASELINE") ~= "false",
})
print("[coding_loop] " .. result.summary)
return std.json.encode(result)