gptel: Run post-response-hook after inserting response
* gptel.el (gptel--playback, gptel--insert-response): `gptel--insert-response' no longer handles stream playback. Run `gptel-post-response-hook' after inserting the response from ChatGPT. Delete the `gptel--playback' function since it never did anything -- it was a placebo.
This commit is contained in:
parent
2e34981aa0
commit
ba133267ec
1 changed files with 8 additions and 42 deletions
50
gptel.el
50
gptel.el
|
@ -320,19 +320,17 @@ See `gptel--url-get-response' for details."
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(put-text-property 0 (length content-str) 'gptel 'response content-str)
|
(put-text-property 0 (length content-str) 'gptel 'response content-str)
|
||||||
(message "Querying ChatGPT... done.")
|
(message "Querying ChatGPT... done.")
|
||||||
(goto-char response-pt)
|
(goto-char start-marker)
|
||||||
(unless (bobp) (insert-before-markers-and-inherit "\n\n"))
|
(unless (bobp) (insert "\n\n"))
|
||||||
(if gptel-playback
|
(let ((p (point)))
|
||||||
(gptel--playback gptel-buffer content-str response-pt)
|
(insert content-str)
|
||||||
(let ((p (point)))
|
(pulse-momentary-highlight-region p (point)))
|
||||||
(insert content-str)
|
(when gptel-mode
|
||||||
(pulse-momentary-highlight-region p (point)))
|
|
||||||
(when gptel-mode
|
|
||||||
(insert "\n\n" (gptel-prompt-string))
|
(insert "\n\n" (gptel-prompt-string))
|
||||||
(gptel--update-header-line " Ready" 'success))))
|
(gptel--update-header-line " Ready" 'success))))
|
||||||
(goto-char (- (point) 2)))
|
|
||||||
(gptel--update-header-line
|
(gptel--update-header-line
|
||||||
(format " Response Error: %s" status-str) 'error))))
|
(format " Response Error: %s" status-str) 'error))
|
||||||
|
(run-hooks 'gptel-post-response-hook)))
|
||||||
|
|
||||||
(defun gptel--create-prompt (&optional prompt-end)
|
(defun gptel--create-prompt (&optional prompt-end)
|
||||||
"Return a full conversation prompt from the contents of this buffer.
|
"Return a full conversation prompt from the contents of this buffer.
|
||||||
|
@ -621,37 +619,5 @@ text stream."
|
||||||
(prog1 (buffer-substring (point) (point-max))
|
(prog1 (buffer-substring (point) (point-max))
|
||||||
(set-marker start-pt (point-max)))))))))
|
(set-marker start-pt (point-max)))))))))
|
||||||
|
|
||||||
(defun gptel--playback (buf content-str start-pt)
|
|
||||||
"Playback CONTENT-STR in BUF.
|
|
||||||
|
|
||||||
Begin at START-PT."
|
|
||||||
(let ((handle (gensym "gptel-change-group-handle--"))
|
|
||||||
(playback-timer (gensym "gptel--playback-"))
|
|
||||||
(content-length (length content-str))
|
|
||||||
(idx 0) (pt (copy-marker start-pt t)))
|
|
||||||
(setf (symbol-value handle) (prepare-change-group buf))
|
|
||||||
(activate-change-group (symbol-value handle))
|
|
||||||
(setf (symbol-value playback-timer)
|
|
||||||
(run-at-time
|
|
||||||
0 0.15
|
|
||||||
(lambda ()
|
|
||||||
(with-current-buffer buf
|
|
||||||
(if (>= content-length idx)
|
|
||||||
(progn
|
|
||||||
(goto-char pt)
|
|
||||||
(insert
|
|
||||||
(seq-subseq
|
|
||||||
content-str idx
|
|
||||||
(min content-length (+ idx 16))))
|
|
||||||
(setq idx (+ idx 16)))
|
|
||||||
(when gptel-mode
|
|
||||||
(insert "\n\n" (gptel-prompt-string))
|
|
||||||
(gptel--update-header-line " Ready" 'success))
|
|
||||||
(when start-pt (goto-char (marker-position start-pt)))
|
|
||||||
(accept-change-group (symbol-value handle))
|
|
||||||
(undo-amalgamate-change-group (symbol-value handle))
|
|
||||||
(cancel-timer (symbol-value playback-timer)))))))
|
|
||||||
nil))
|
|
||||||
|
|
||||||
(provide 'gptel)
|
(provide 'gptel)
|
||||||
;;; gptel.el ends here
|
;;; gptel.el ends here
|
||||||
|
|
Loading…
Add table
Reference in a new issue