branch: elpa/gptel
commit 8e01159537c06630258ac87e9a464a0cd959683b
Author: Karthik Chikmagalur <karthikchikmaga...@gmail.com>
Commit: Karthik Chikmagalur <karthikchikmaga...@gmail.com>

    gptel: Make with-buffer-copy comprehensive
    
    * gptel.el (gptel--with-buffer-copy): In preparation for
    gptel's switch to fully buffer-oriented prompt preparation (needed
    for augmentation), make `gptel--with-buffer-copy'
    
    - copy all the required state into the prompt preparation buffer.
    
    - Keep the buffer alive for current for augmentation and parsing
    instead of using `with-temp-buffer'.
    
    The latter means that the prompt preparation buffer is never
    cleaned up after a request, and gptel is thus buggy as of this
    commit.  This will be rectified next.
---
 gptel.el | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/gptel.el b/gptel.el
index f254559aff..7ec4bd27b1 100644
--- a/gptel.el
+++ b/gptel.el
@@ -1019,16 +1019,22 @@ Note: This will move the cursor."
 
 If positions START and END are provided, insert that part of BUF first."
   (declare (indent 3))
-  `(with-temp-buffer
-     (dolist (sym '( gptel-backend gptel--system-message gptel-model
-                     gptel-mode gptel-track-response gptel-track-media
-                     gptel-prompt-filter-hook))
-      (set (make-local-variable sym)
-       (buffer-local-value sym ,buf)))
-     ,(when (and start end)
-       `(insert-buffer-substring ,buf ,start ,end))
-     (let ((major-mode (buffer-local-value 'major-mode ,buf)))
-      ,@body)))
+  (let ((temp-buffer (make-symbol "temp-buffer")))
+    `(let ((,temp-buffer (gptel--temp-buffer " *gptel-prompt*")))
+      (with-current-buffer ,temp-buffer
+       (dolist (sym '( gptel-backend gptel--system-message gptel-model
+                       gptel-mode gptel-track-response gptel-track-media
+                       gptel-use-tools gptel-tools gptel-use-curl
+                       gptel-prompt-filter-hook gptel-use-context
+                       gptel--num-messages-to-send gptel-stream
+                       gptel-include-reasoning
+                       gptel-temperature gptel-max-tokens gptel-cache))
+        (set (make-local-variable sym)
+         (buffer-local-value sym ,buf)))
+       ,(when (and start end)
+         `(insert-buffer-substring ,buf ,start ,end))
+       (setq major-mode (buffer-local-value 'major-mode ,buf))
+       ,@body))))
 
 (defmacro gptel--temp-buffer (buf)
   "Generate a temp buffer BUF.

Reply via email to