branch: elpa/gptel commit efc4de265f05a0bf71af2d1427caaa80398c9834 Author: Karthik Chikmagalur <karthikchikmaga...@gmail.com> Commit: Karthik Chikmagalur <karthikchikmaga...@gmail.com>
gptel: Make async query payloads inspectable * gptel.el (gptel--inspect-query): If there are async prompt augmentors/transformers in the mix, the fsm passed to `gptel--inspect-query' by gptel-request will not yet be ready for consumption. Poll until payload construction is complete. This is an interim solution while I figure out how to modify the call chain to make this expensive timer unnecessary. --- gptel.el | 74 ++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/gptel.el b/gptel.el index 6981dfd5a4..09e62b735b 100644 --- a/gptel.el +++ b/gptel.el @@ -2625,38 +2625,48 @@ REQUEST-FSM is the state of the request, as returned by `gptel-request'. If FORMAT is the symbol json, show the encoded JSON query instead of the Lisp structure gptel uses." (unless request-fsm (setq request-fsm gptel--fsm-last)) - (with-current-buffer (get-buffer-create "*gptel-query*") - (let* ((standard-output (current-buffer)) - (inhibit-read-only t) - (request-data - (plist-get (gptel-fsm-info request-fsm) :data))) - (buffer-disable-undo) - (erase-buffer) - (if (eq format 'json) - (progn (fundamental-mode) - (insert (gptel--json-encode request-data)) - (json-pretty-print-buffer)) - (lisp-data-mode) - (prin1 request-data) - (pp-buffer)) - (setq-local gptel--fsm-last request-fsm) - (goto-char (point-min)) - (view-mode 1) - (setq buffer-undo-list nil) - (use-local-map - (make-composed-keymap - (define-keymap - "C-c C-c" #'gptel--continue-query - "C-c C-k" #'quit-window) - (current-local-map))) - (unless header-line-format - (setq header-line-format - (substitute-command-keys - (concat - "Edit request: \\[read-only-mode]," - " Send request: \\[gptel--continue-query]," - " Quit: \\[quit-window]")))) - (display-buffer (current-buffer) gptel-display-buffer-action)))) + (if (bufferp (plist-get (gptel-fsm-info request-fsm) :data)) + (letrec ((dry-run-poll + (run-with-timer + 0 1 (lambda (fsm form) + (unless (bufferp (plist-get (gptel-fsm-info fsm) :data)) + (cancel-timer dry-run-poll) + (gptel--inspect-query fsm form))) + request-fsm format)))) + (with-current-buffer (plist-get (gptel-fsm-info request-fsm) :buffer) + (gptel--update-status " Ready" 'success)) + (with-current-buffer (get-buffer-create "*gptel-query*") + (let* ((standard-output (current-buffer)) + (inhibit-read-only t) + (request-data + (plist-get (gptel-fsm-info request-fsm) :data))) + (buffer-disable-undo) + (erase-buffer) + (if (eq format 'json) + (progn (fundamental-mode) + (insert (gptel--json-encode request-data)) + (json-pretty-print-buffer)) + (lisp-data-mode) + (prin1 request-data) + (pp-buffer)) + (setq-local gptel--fsm-last request-fsm) + (goto-char (point-min)) + (view-mode 1) + (setq buffer-undo-list nil) + (use-local-map + (make-composed-keymap + (define-keymap + "C-c C-c" #'gptel--continue-query + "C-c C-k" #'quit-window) + (current-local-map))) + (unless header-line-format + (setq header-line-format + (substitute-command-keys + (concat + "Edit request: \\[read-only-mode]," + " Send request: \\[gptel--continue-query]," + " Quit: \\[quit-window]")))) + (display-buffer (current-buffer) gptel-display-buffer-action))))) (defun gptel--continue-query () "Continue sending the gptel query displayed in this buffer.