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:
Karthik Chikmagalur 2023-04-06 16:22:44 -07:00
parent 2e34981aa0
commit ba133267ec

View file

@ -320,19 +320,17 @@ See `gptel--url-get-response' for details."
(save-excursion
(put-text-property 0 (length content-str) 'gptel 'response content-str)
(message "Querying ChatGPT... done.")
(goto-char response-pt)
(unless (bobp) (insert-before-markers-and-inherit "\n\n"))
(if gptel-playback
(gptel--playback gptel-buffer content-str response-pt)
(let ((p (point)))
(insert content-str)
(pulse-momentary-highlight-region p (point)))
(when gptel-mode
(goto-char start-marker)
(unless (bobp) (insert "\n\n"))
(let ((p (point)))
(insert content-str)
(pulse-momentary-highlight-region p (point)))
(when gptel-mode
(insert "\n\n" (gptel-prompt-string))
(gptel--update-header-line " Ready" 'success))))
(goto-char (- (point) 2)))
(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)
"Return a full conversation prompt from the contents of this buffer.
@ -621,37 +619,5 @@ text stream."
(prog1 (buffer-substring (point) (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)
;;; gptel.el ends here