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

    gptel: Make track-media always available
    
    Since links to plain-text files can now always be included in chat
    buffers (irrespective of the model's media capabilities), this
    option should always be available in the transient menu, and
    whether we scan for links should depend only on
    `gptel-track-response', and not on the model capabilities.  Make
    these adjustments to the buffer parsing call chain.
    
    The "Sending media" option still does not show up in the header
    unless the model is media-capable.  This might be something to
    work on.
    
    * gptel-transient.el (gptel-menu): Allow `gptel-track-media' to
    always be toggled in chat buffers.
    
    * gptel.el (gptel--insert-file-string): Fix bug around file
    insertion -- `insert-file-contents' does not move point, so we
    must move it ourselves.
    
    * gptel-anthropic.el (gptel--parse-buffer): Fix buffer parsing
    code path as described.
    * gptel-gemini.el (gptel--parse-buffer): Ditto.
    * gptel-ollama.el (gptel--parse-buffer): Ditto.
    * gptel-openai.el (gptel--parse-buffer): Ditto.
---
 gptel-anthropic.el | 6 ++----
 gptel-gemini.el    | 6 ++----
 gptel-ollama.el    | 6 ++----
 gptel-openai.el    | 7 ++-----
 gptel-transient.el | 3 +--
 gptel.el           | 5 ++++-
 6 files changed, 13 insertions(+), 20 deletions(-)

diff --git a/gptel-anthropic.el b/gptel-anthropic.el
index 82fb08c5a9..0720d3ce35 100644
--- a/gptel-anthropic.el
+++ b/gptel-anthropic.el
@@ -349,9 +349,7 @@ TOOL-USE is a list of plists containing tool names, 
arguments and call results."
     full-prompt))
 
 (cl-defmethod gptel--parse-buffer ((backend gptel-anthropic) &optional 
max-entries)
-  (let ((prompts) (prev-pt (point))
-        (include-media (and gptel-track-media (or (gptel--model-capable-p 
'media)
-                                                  (gptel--model-capable-p 
'url)))))
+  (let ((prompts) (prev-pt (point)))
     (if (or gptel-mode gptel-track-response)
         (while (and (or (not max-entries) (>= max-entries 0))
                     (goto-char (previous-single-property-change
@@ -392,7 +390,7 @@ TOOL-USE is a list of plists containing tool names, 
arguments and call results."
                                      id (line-number-at-pos (point))))))))
               ('ignore)
               ('nil                     ; user role: possibly with media
-               (if include-media
+               (if gptel-track-media
                    (when-let* ((content (gptel--anthropic-parse-multipart
                                          (gptel--parse-media-links major-mode 
(point) prev-pt))))
                      (when (> (length content) 0)
diff --git a/gptel-gemini.el b/gptel-gemini.el
index dbff3416a7..5a76002161 100644
--- a/gptel-gemini.el
+++ b/gptel-gemini.el
@@ -256,9 +256,7 @@ See generic implementation for full documentation."
              finally return prompts)))
 
 (cl-defmethod gptel--parse-buffer ((backend gptel-gemini) &optional 
max-entries)
-  (let ((prompts) (prev-pt (point))
-        (include-media (and gptel-track-media (or (gptel--model-capable-p 
'media)
-                                                  (gptel--model-capable-p 
'url)))))
+  (let ((prompts) (prev-pt (point)))
     (if (or gptel-mode gptel-track-response)
         (while (and (or (not max-entries) (>= max-entries 0))
                     (goto-char (previous-single-property-change
@@ -290,7 +288,7 @@ See generic implementation for full documentation."
                                    (line-number-at-pos (point))))))))
             ('ignore)
             ('nil
-             (if include-media
+             (if gptel-track-media
                  (when-let* ((content (gptel--gemini-parse-multipart
                                        (gptel--parse-media-links major-mode 
(point) prev-pt))))
                    (when (> (length content) 0)
diff --git a/gptel-ollama.el b/gptel-ollama.el
index 3aad77aae4..2b278d2437 100644
--- a/gptel-ollama.el
+++ b/gptel-ollama.el
@@ -161,9 +161,7 @@ Store response metadata in state INFO."
              (list :role (if role "user" "assistant") :content text))))
 
 (cl-defmethod gptel--parse-buffer ((backend gptel-ollama) &optional 
max-entries)
-  (let ((prompts) (prev-pt (point))
-        (include-media (and gptel-track-media (or (gptel--model-capable-p 
'media)
-                                                  (gptel--model-capable-p 
'url)))))
+  (let ((prompts) (prev-pt (point)))
     (if (or gptel-mode gptel-track-response)
         (while (and (or (not max-entries) (>= max-entries 0))
                     (goto-char (previous-single-property-change
@@ -194,7 +192,7 @@ Store response metadata in state INFO."
                                    (line-number-at-pos (point))))))))
             ('ignore)
             ('nil
-             (if include-media
+             (if gptel-track-media
                  (when-let* ((content (gptel--ollama-parse-multipart
                                        (gptel--parse-media-links major-mode 
(point) prev-pt))))
                    (when (> (length content) 0)
diff --git a/gptel-openai.el b/gptel-openai.el
index cb49e5c523..6438862d52 100644
--- a/gptel-openai.el
+++ b/gptel-openai.el
@@ -381,10 +381,7 @@ If the ID has the format used by a different backend, use 
as-is."
              (list :role (if role "user" "assistant") :content text))))
 
 (cl-defmethod gptel--parse-buffer ((backend gptel-openai) &optional 
max-entries)
-  (let ((prompts) (prev-pt (point))
-        (include-media (and gptel-track-media
-                            (or (gptel--model-capable-p 'media)
-                                (gptel--model-capable-p 'url)))))
+  (let ((prompts) (prev-pt (point)))
     (if (or gptel-mode gptel-track-response)
         (while (and (or (not max-entries) (>= max-entries 0))
                     (/= prev-pt (point-min))
@@ -420,7 +417,7 @@ If the ID has the format used by a different backend, use 
as-is."
             ('ignore)
             ('nil
              (and max-entries (cl-decf max-entries))
-             (if include-media
+             (if gptel-track-media
                  (when-let* ((content (gptel--openai-parse-multipart
                                        (gptel--parse-media-links major-mode
                                                                  (point) 
prev-pt))))
diff --git a/gptel-transient.el b/gptel-transient.el
index 0b70d59be8..98f9bbc6c7 100644
--- a/gptel-transient.el
+++ b/gptel-transient.el
@@ -667,8 +667,7 @@ Also format its value in the Transient menu."
     (gptel--infix-use-tools)
     (gptel--infix-track-response
      :if (lambda () (and gptel-expert-commands (not gptel-mode))))
-    (gptel--infix-track-media
-     :if (lambda () (and gptel-mode (gptel--model-capable-p 'media))))]
+    (gptel--infix-track-media :if (lambda () gptel-mode))]
    [" <Prompt from"
     ("m" "Minibuffer instead" "m")
     ("y" "Kill-ring instead" "y")
diff --git a/gptel.el b/gptel.el
index 15872e32f0..094663cdf2 100644
--- a/gptel.el
+++ b/gptel.el
@@ -944,7 +944,10 @@ Later plists in the sequence take precedence over earlier 
ones."
   "Insert at point the contents of the file at PATH as context."
   (insert (format "In file `%s`:" (file-name-nondirectory path))
           "\n\n```\n")
-  (insert-file-contents path)
+  (let ((pm (point-marker)))
+    (set-marker-insertion-type pm t)
+    (insert-file-contents path)
+    (goto-char pm))
   (insert "\n```\n"))
 
 (defvar url-http-end-of-headers)

Reply via email to