Auto-verify after remote edit prose
ober
c15fd430501aa503e87e5898dd1b7adf3e9532ab
--- a/src/jcode/core/verified-run.ss +++ b/src/jcode/core/verified-run.ss @@ -6008,6 +6008,10 @@ (current-edited-since-verify?)) (list (make-wtool-call "verify" '() #f))) (else #f)))) + (cons 'text-response-tool-calls + (lambda (_content) + (and (current-edited-since-verify?) + (list (make-wtool-call "verify" '() #f))))) (cons 'prepare-messages (lambda (messages) (compact-verified-history --- a/src/jcode/core/workflow-runner.ss +++ b/src/jcode/core/workflow-runner.ss @@ -439,6 +439,7 @@ tool-spec-filter (#f; optional current tool-specs -> visible tool-specs) tool-execution-spec-filter (#f; optional current tool-specs -> executable tool-specs) automatic-tool-calls (#f; optional thunk -> tool-call list) + text-response-tool-calls (#f; optional text -> tool-call list) on-message (#f) prompt-vars ('()) initial-messages (#f) cancel? (thunk -> bool, default never). Raises MaxIterationsError / StepEnforcementError / PrerequisiteError / @@ -455,6 +456,7 @@ (tool-spec-filter (opt-ref o 'tool-spec-filter)) (tool-execution-spec-filter (opt-ref o 'tool-execution-spec-filter)) (automatic-tool-calls (opt-ref o 'automatic-tool-calls)) + (text-response-tool-calls (opt-ref o 'text-response-tool-calls)) (on-message (opt-ref o 'on-message)) (prompt-vars (or (opt-ref o 'prompt-vars) '())) (initial-msgs (opt-ref o 'initial-messages)) @@ -521,6 +523,18 @@ ((text-response? response) (let ((content (text-response-content response))) (emit! (make-assistant-message content)) + (let ((tool-calls + (and text-response-tool-calls + (text-response-tool-calls content)))) + (if (and (list? tool-calls) (pair? tool-calls)) + (begin + (error-tracker-reset-retries! error-tracker) + (let ((outcome + (execute-batch! emit! workflow enforcer + error-tracker tool-calls executable-tool-names))) + (if (and (pair? outcome) (eq? (car outcome) 'terminal)) + (cdr outcome) + (loop (+ iteration 1))))) (if retry-text-responses? (begin (error-tracker-record-retry! error-tracker) @@ -534,7 +548,7 @@ (error-tracker-consecutive-retries error-tracker)))) (loop (+ iteration 1))) - (loop (+ iteration 1))))) + (loop (+ iteration 1))))))) (else (let ((tool-calls (if (list? response) response (list response)))) (error-tracker-reset-retries! error-tracker) --- a/test/run.ss +++ b/test/run.ss @@ -3694,6 +3694,32 @@ (safe-delete-test-file! target-path)) (let* ([vr-dir "/tmp"] + [target "jcode-remote-auto-verify.txt"] + [target-path (string-append vr-dir "/" target)] + [calls 0] + [responder + (lambda (_messages _tools _step) + (set! calls (+ calls 1)) + (case calls + [(1) (list (make-wtool-call "write" + (list (cons "path" target) + (cons "content" "remote fixed\n")) #f))] + [else (make-text-response "Continuing.")]))]) + (safe-delete-test-file! target-path) + (let ([result + (verified-run responder "remote edit should auto verify" + (list + (cons 'cwd vr-dir) + (cons 'verify-command (string-append "grep -q 'remote fixed' " target)) + (cons 'write-scope (parse-write-scope target)) + (cons 'max-iterations 6)))]) + (check! "verified-run: remote edit is automatically verified" + result "VERIFIED: exit 0\n")) + (check! "verified-run: remote auto verify avoids prose retry" + calls 2) + (safe-delete-test-file! target-path)) + + (let* ([vr-dir "/tmp"] [target "jcode-local-env-first-cap.txt"] [target-path (string-append vr-dir "/" target)] [old-cap (getenv "JCODE_LOCAL_VERIFIED_MAX_COMPLETION_TOKENS")]