branch: elpa/gptel
commit 31aa385a9d4c02e5efa87e5d8303c45b1afec590
Author: Karthik Chikmagalur <[email protected]>
Commit: karthink <[email protected]>
gptel-context: Invert dependency, rename contexter and lint
* gptel.el: Don't require gptel-context, it will be autoloaded
when needed.
* gptel-transient.el: Ditto.
* gptel-contexter.el: Require gptel.
* gptel-contexter.el (gptel-context-flag-deletion,
gptel-context-next, gptel--context-buffer-reverse,
gptel--context-buffer-setup, gptel-context-string--default,
gptel-contexts, gptel--add-region-as-context, gptel-context--wrap,
gptel-context-add): Rename functions to be consistent with the
`gptel-context` prefix. Remove unused functions.
Rename `gptel-add-context` to `gptel-context-add`, and alias it to
`gptel-add`.
* gptel-transient.el (gptel--suffix-context-buffer): Don't collect
context unless `gptel-context--overlay-alist` is non-nil.
gptel-context: Use explicit faces in gptel-context-buffer
* gptel-contexter.el (gptel-context-flag-deletion,
gptel-context-highlight-face, gptel-context-deletion-face): Don't
reuse faces from diff-mode since diff-mode may not be loaded.
Define `gptel-context-deletion-face` instead.
* gptel.el (gptel--wrap-user-prompt): Linting changes.
* gptel-context.el: Rename from gptel-contexter.
* gptel.el, gptel-transient.el, gptel-openai.el, gptel-ollama.el,
gptel-kagi.el, gptel-gemini.el, gptel-context.el,
gptel-anthropic.el: Update function declarations and require
statements.
gptel-context: checkdoc linting
* gptel-context.el (gptel-context-quit,
gptel-context-flag-deletion, gptel-context-previous,
gptel-context-visit, gptel-context--buffer-setup,
gptel-context--insert-buffer-string,
gptel-context-string-function): checkdoc linting.
---
gptel-anthropic.el | 2 +-
gptel-contexter.el => gptel-context.el | 217 ++++++++++++++++-----------------
gptel-gemini.el | 2 +-
gptel-kagi.el | 2 +-
gptel-ollama.el | 2 +-
gptel-openai.el | 2 +-
gptel-transient.el | 40 +++---
gptel.el | 5 +-
8 files changed, 132 insertions(+), 140 deletions(-)
diff --git a/gptel-anthropic.el b/gptel-anthropic.el
index 93688a21bc..0abc667c9c 100644
--- a/gptel-anthropic.el
+++ b/gptel-anthropic.el
@@ -33,7 +33,7 @@
(declare-function prop-match-value "text-property-search")
(declare-function text-property-search-backward "text-property-search")
(declare-function json-read "json" ())
-(declare-function gptel-context--wrap "gptel-contexter")
+(declare-function gptel-context--wrap "gptel-context")
;;; Anthropic (Messages API)
(cl-defstruct (gptel-anthropic (:constructor gptel--make-anthropic)
diff --git a/gptel-contexter.el b/gptel-context.el
similarity index 76%
rename from gptel-contexter.el
rename to gptel-context.el
index 2c4c7466d3..e1aa7d12c2 100644
--- a/gptel-contexter.el
+++ b/gptel-context.el
@@ -1,4 +1,4 @@
-;;; gptel-contexter.el --- Context aggregator for GPTel -*- lexical-binding:
t; -*-
+;;; gptel-context.el --- Context aggregator for GPTel -*- lexical-binding: t;
-*-
;; Copyright (C) 2023 Karthik Chikmagalur
@@ -22,21 +22,36 @@
;;; Commentary:
-;; The contexter allows you to conveniently create contexts which can be fed
+;; The context allows you to conveniently create contexts which can be fed
;; to GPTel.
;;; Code:
;;; -*- lexical-binding: t -*-
-
+(require 'gptel)
(require 'cl-lib)
-(defcustom gptel-context-highlight-face 'header-line
- "Face to use to highlight selected context in the buffers."
- :group 'gptel
- :type 'symbol)
+(declare-function gptel-menu "gptel-transient")
+
+(defface gptel-context-highlight-face
+ '((t :inherit header-line))
+ "Face used to highlight gptel contexts in buffers."
+ :group 'gptel)
+
+(defface gptel-context-deletion-face
+ '((((class color) (min-colors 257) (background light))
+ :background "#ffeeee" :extend t)
+ (((class color) (min-colors 88) (background light))
+ :background "#ffdddd" :extend t)
+ (((class color) (min-colors 88) (background dark))
+ :background "#553333" :extend t)
+ (((class color)) :foreground "red" :extend t))
+ "Face used to highlight gptel contexts to be deleted.
-(defcustom gptel-context-string-function #'gptel-context-string--default
+This is used in gptel context buffers."
+ :group 'gptel)
+
+(defcustom gptel-context-string-function #'gptel-context--string-default
"Function to format the context string sent with the gptel request.
This function receives one argument, an alist of context overlays
@@ -46,23 +61,23 @@ include.
The alist of context overlays is structured as follows:
-((buffer1 . (overlay1 overlay2)
- (buffer2 . (overlay3 overlay4 overlay5))))
+ ((buffer1 . (overlay1 overlay2)
+ (buffer2 . (overlay3 overlay4 overlay5))))
Each overlay covers a buffer region containing the
context chunk. This is accessible as, for example:
-(with-current-buffer buffer1
- (buffer-substring (overlay-start overlay1)
- (overlay-end overlay1)))"
+ (with-current-buffer buffer1
+ (buffer-substring (overlay-start overlay1)
+ (overlay-end overlay1)))"
+ :group 'gptel
:type 'function)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; ------------------------------ FUNCTIONS -------------------------------
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;###autoload
-(defun gptel-add-context (&optional arg)
+(defun gptel-context-add (&optional arg)
"Add context to GPTel.
When called without a prefix argument, adds the current buffer as context.
@@ -75,7 +90,7 @@ If there is a context under point, it is removed when called
without a prefix."
(cond
;; A region is selected.
((use-region-p)
- (gptel--add-region-as-context (current-buffer)
+ (gptel-context--add-region (current-buffer)
(region-beginning)
(region-end))
(deactivate-mark)
@@ -83,35 +98,57 @@ If there is a context under point, it is removed when
called without a prefix."
;; No region is selected, and ARG is positive.
((and arg (> (prefix-numeric-value arg) 0))
(let ((buffer-name (read-buffer "Choose buffer to add as context: " nil
t)))
- (gptel--add-region-as-context (get-buffer buffer-name) (point-min)
(point-max))
+ (gptel-context--add-region (get-buffer buffer-name) (point-min)
(point-max))
(message "Buffer '%s' added as context." buffer-name)))
;; No region is selected, and ARG is negative.
((and arg (< (prefix-numeric-value arg) 0))
(when (y-or-n-p "Remove all contexts from this buffer? ")
(let ((removed-contexts 0))
(cl-loop for cov in
- (gptel-contexts-in-region (current-buffer) (point-min)
(point-max))
+ (gptel-context--in-region (current-buffer) (point-min)
(point-max))
do (progn
(cl-incf removed-contexts)
- (gptel-remove-context cov)))
+ (gptel-context-remove cov)))
(message (format "%d context%s removed from current buffer."
removed-contexts
(if (= removed-contexts 1) "" "s"))))))
(t ; Default behavior
- (if (gptel-context-at-point)
+ (if (gptel-context--at-point)
(progn
- (gptel-remove-context (car (gptel-contexts-in-region (current-buffer)
+ (gptel-context-remove (car (gptel-context--in-region (current-buffer)
(max
(point-min) (1- (point)))
(point))))
(message "Context under point has been removed."))
- (gptel--add-region-as-context (current-buffer) (point-min) (point-max))
+ (gptel-context--add-region (current-buffer) (point-min) (point-max))
(message "Current buffer added as context.")))))
+
+;;;###autoload (autoload 'gptel-add "gptel-context" "Add or remove context to
gptel's requests." t)
+(defalias 'gptel-add #'gptel-context-add)
-(defun gptel--make-context-overlay (start end)
+(defun gptel-context-remove (&optional context)
+ "Remove the CONTEXT overlay from the contexts list.
+If CONTEXT is nil, removes the context at point.
+If selection is active, removes all contexts within selection."
+ (interactive)
+ (cond
+ ((overlayp context)
+ (delete-overlay context))
+ ((region-active-p)
+ (let ((contexts (gptel-context--in-region (current-buffer)
+ (region-beginning)
+ (region-end))))
+ (when contexts
+ (cl-loop for ctx in contexts do (delete-overlay ctx)))))
+ (t
+ (let ((ctx (gptel-context--at-point)))
+ (when ctx
+ (delete-overlay ctx))))))
+
+(defun gptel-context--make-overlay (start end)
"Highlight the region from START to END."
(let ((overlay (make-overlay start end)))
(overlay-put overlay 'evaporate t)
- (overlay-put overlay 'face gptel-context-highlight-face)
+ (overlay-put overlay 'face 'gptel-context-highlight-face)
(overlay-put overlay 'gptel-context t)
(push overlay (alist-get (current-buffer)
gptel-context--overlay-alist))
@@ -123,7 +160,7 @@ If there is a context under point, it is removed when
called without a prefix."
The message is usually either a system message or user prompt."
;; Append context before/after system message.
- (let ((context (gptel-context-string)))
+ (let ((context (gptel-context--string)))
(if (> (length context) 0)
(pcase-exhaustive gptel-use-context
('system (concat message "\n\n" context))
@@ -131,50 +168,28 @@ The message is usually either a system message or user
prompt."
('nil message))
message)))
-(cl-defun gptel--add-region-as-context (buffer region-beginning region-end)
+(cl-defun gptel-context--add-region (buffer region-beginning region-end)
"Add region delimited by REGION-BEGINNING, REGION-END in BUFFER as context."
;; Remove existing contexts in the same region, if any.
- (mapc #'gptel-remove-context
- (gptel-contexts-in-region buffer region-beginning region-end))
- (prog1 (gptel--make-context-overlay region-beginning region-end)
+ (mapc #'gptel-context-remove
+ (gptel-context--in-region buffer region-beginning region-end))
+ (prog1 (gptel-context--make-overlay region-beginning region-end)
(message "Region added to context buffer.")))
-;;;###autoload
-(defun gptel-contexts-in-region (buffer start end)
+(defun gptel-context--in-region (buffer start end)
"Return the list of context overlays in the given region, if any, in BUFFER.
START and END signify the region delimiters."
(with-current-buffer buffer
(cl-remove-if-not (lambda (ov) (overlay-get ov 'gptel-context))
(overlays-in start end))))
-;;;###autoload
-(defun gptel-context-at-point ()
+(defun gptel-context--at-point ()
"Return the context overlay at point, if any."
(cl-find-if (lambda (ov) (overlay-get ov 'gptel-context))
(overlays-at (point))))
;;;###autoload
-(defun gptel-remove-context (&optional context)
- "Remove the CONTEXT overlay from the contexts list.
-If CONTEXT is nil, removes the context at point.
-If selection is active, removes all contexts within selection."
- (interactive)
- (cond
- ((overlayp context)
- (delete-overlay context))
- ((region-active-p)
- (let ((contexts (gptel-contexts-in-region (current-buffer)
- (region-beginning)
- (region-end))))
- (when contexts
- (cl-loop for ctx in contexts do (delete-overlay ctx)))))
- (t
- (let ((ctx (gptel-context-at-point)))
- (when ctx
- (delete-overlay ctx))))))
-
-;;;###autoload
-(defun gptel-contexts ()
+(defun gptel-context--collect ()
"Get the list of all active context overlays."
;; Get only the non-degenerate overlays, collect them, and update the
overlays variable.
(let ((overlay-alist
@@ -187,48 +202,14 @@ If selection is active, removes all contexts within
selection."
collect (cons buf updated-ovs))))
(setq gptel-context--overlay-alist overlay-alist)))
-;;;###autoload
-(defun gptel-contexts-in-buffer (buffer)
- "Get the list of all context overlays in BUFFER."
- (cl-remove-if-not
- #'(lambda (ov)
- (overlay-get ov 'gptel-context))
- (let ((all-overlays '()))
- (with-current-buffer buffer
- (setq all-overlays
- (append all-overlays
- (overlays-in (point-min)
- (point-max)))))
- all-overlays)))
-
-;;;###autoload
-(defun gptel-remove-all-contexts ()
- "Clear all contexts."
- (interactive)
- (mapc #'gptel-remove-context
- (gptel-contexts)))
-
-(defun gptel--region-inline-p (buffer previous-region current-region)
- "Return non-nil if CURRENT-REGION begins on the line PREVIOUS-REGION ends in.
-This check pertains only to regions in BUFFER.
-
-PREVIOUS-REGION and CURRENT-REGION should be cons cells (START . END) which
-representthe regions' boundaries within BUFFER."
- (with-current-buffer buffer
- (let ((prev-line-end (line-number-at-pos (cdr previous-region)))
- (curr-line-start (line-number-at-pos (car current-region))))
- (= prev-line-end curr-line-start))))
-
-(defun gptel-buffer-insert-context-string (buffer)
- "Insert at point a context string from all contexts in BUFFER."
+(defun gptel-context--insert-buffer-string (buffer contexts)
+ "Insert at point a context string from all CONTEXTS in BUFFER."
(let ((is-top-snippet t)
- (previous-line 1)
- prog-lang-tag
- (contexts (alist-get buffer gptel-context--overlay-alist)))
- (setq prog-lang-tag (gptel--strip-mode-suffix
- (buffer-local-value 'major-mode buffer)))
- (insert (format "In buffer `%s`:" (buffer-name buffer)))
- (insert "\n\n```" prog-lang-tag "\n")
+ (previous-line 1))
+ (insert (format "In buffer `%s`:" (buffer-name buffer))
+ "\n\n```" (gptel--strip-mode-suffix (buffer-local-value
+ 'major-mode buffer))
+ "\n")
(cl-loop for context in contexts do
(progn
(let* ((start (overlay-start context))
@@ -260,19 +241,23 @@ representthe regions' boundaries within BUFFER."
(insert "\n..."))
(insert "\n```")))
-(defun gptel-context-string--default (context-alist)
+(defun gptel-context--string-default (context-alist)
+ "Format the aggregated gptel context as annotated markdown fragments.
+
+Returns a string. CONTEXT-ALIST is a structure containing
+context overlays, see `gptel-context--overlay-alist'."
(with-temp-buffer
(insert "Request context:\n\n")
(cl-loop for (buf . ovs) in context-alist
- do (gptel-buffer-insert-context-string buf)
+ do (gptel-context--insert-buffer-string buf ovs)
(insert "\n\n")
finally return (buffer-string))))
;;;###autoload
-(defun gptel-context-string ()
+(defun gptel-context--string ()
"Return a string containing the aggregated gptel context."
(funcall gptel-context-string-function
- (gptel-contexts)))
+ (gptel-context--collect)))
;;; Major mode for context inspection buffers
(defvar-keymap gptel-context-buffer-mode-map
@@ -286,11 +271,12 @@ representthe regions' boundaries within BUFFER."
(define-derived-mode gptel-context-buffer-mode special-mode "gptel-context"
"Major-mode for inspecting context used by gptel."
:group 'gptel
- (add-hook 'post-command-hook #'gptel--context-post-command
+ (add-hook 'post-command-hook #'gptel-context--post-command
nil t)
- (setq-local revert-buffer-function #'gptel--context-buffer-setup))
+ (setq-local revert-buffer-function #'gptel-context--buffer-setup))
-(defun gptel--context-buffer-setup (&optional _ignore-auto _noconfirm)
+(defun gptel-context--buffer-setup (&optional _ignore-auto _noconfirm)
+ "Set up the gptel context buffer."
(with-current-buffer (get-buffer-create "*gptel-context*")
(gptel-context-buffer-mode)
(let ((inhibit-read-only t))
@@ -337,12 +323,12 @@ representthe regions' boundaries within BUFFER."
(body-function . ,#'select-window)
(window-height . ,#'fit-window-to-buffer)))))
-(defvar gptel--context-buffer-reverse nil
+(defvar gptel-context--buffer-reverse nil
"Last direction of cursor movement in gptel context buffer.
If non-nil, indicates backward movement.")
-(defalias 'gptel--context-post-command
+(defalias 'gptel-context--post-command
(let ((highlight-overlay))
(lambda ()
;; Only update if point moved outside the current region.
@@ -357,6 +343,7 @@ If non-nil, indicates backward movement.")
(setq highlight-overlay context-overlay))))))
(defun gptel-context-visit ()
+ "Display the location of this gptel context chunk in its original buffer."
(interactive)
(let ((ov-here (car (overlays-at (point)))))
(if-let* ((orig-ov (overlay-get ov-here 'gptel-context))
@@ -366,9 +353,10 @@ If non-nil, indicates backward movement.")
(goto-char (overlay-start orig-ov))
(forward-char offset)
(recenter))
- (message "No source location for this context chunk."))))
+ (message "No source location for this gptel context chunk."))))
(defun gptel-context-next ()
+ "Move to next gptel context chunk."
(interactive)
(let ((ov-here (car (overlays-at (point))))
(next-start (next-overlay-change (point))))
@@ -377,19 +365,20 @@ If non-nil, indicates backward movement.")
;; would be the start of the next overlay.
(setq next-start (next-overlay-change next-start)))
(when (/= next-start (point-max))
- (setq gptel--context-buffer-reverse nil)
+ (setq gptel-context--buffer-reverse nil)
(goto-char next-start))))
(defun gptel-context-previous ()
+ "Move to previous gptel context chunk."
(interactive)
- (let ((ov-here (car (overlays-at (point))))
- (previous-end (previous-overlay-change (point))))
+ (let ((ov-here (car (overlays-at (point)))))
(when ov-here (goto-char (overlay-start ov-here)))
(goto-char (previous-overlay-change
(previous-overlay-change (point))))
- (setq gptel--context-buffer-reverse t)))
+ (setq gptel-context--buffer-reverse t)))
(defun gptel-context-flag-deletion ()
+ "Mark gptel context chunk at point for removal."
(interactive)
(let* ((overlays (if (use-region-p)
(overlays-in (region-beginning) (region-end))
@@ -405,20 +394,22 @@ If non-nil, indicates backward movement.")
(setq deletion-ov (make-overlay (overlay-start ov) (overlay-end ov)))
(overlay-put deletion-ov 'gptel-context (overlay-get ov
'gptel-context))
(overlay-put deletion-ov 'priority -80)
- (overlay-put deletion-ov 'face 'diff-indicator-removed)
+ (overlay-put deletion-ov 'face 'gptel-context-deletion-face)
(overlay-put deletion-ov 'gptel-context-deletion-mark t))))
(if (use-region-p)
(deactivate-mark)
- (if gptel--context-buffer-reverse
+ (if gptel-context--buffer-reverse
(gptel-context-previous)
(gptel-context-next)))))
(defun gptel-context-quit ()
+ "Cancel pending operations and return to gptel's menu."
(interactive)
(quit-window)
(call-interactively #'gptel-menu))
(defun gptel-context-confirm ()
+ "Confirm pending operations and return to gptel's menu."
(interactive)
;; Delete all the context overlays that have been marked for deletion.
(mapc #'delete-overlay
@@ -429,5 +420,5 @@ If non-nil, indicates backward movement.")
(overlays-in (point-min) (point-max)))))
(gptel-context-quit))
-(provide 'gptel-contexter)
-;;; gptel-contexter.el ends here.
+(provide 'gptel-context)
+;;; gptel-context.el ends here.
diff --git a/gptel-gemini.el b/gptel-gemini.el
index d59803ea0d..65a7a63313 100644
--- a/gptel-gemini.el
+++ b/gptel-gemini.el
@@ -30,7 +30,7 @@
(declare-function prop-match-value "text-property-search")
(declare-function text-property-search-backward "text-property-search")
(declare-function json-read "json")
-(declare-function gptel-context--wrap "gptel-contexter")
+(declare-function gptel-context--wrap "gptel-context")
(defvar json-object-type)
;;; Gemini
diff --git a/gptel-kagi.el b/gptel-kagi.el
index c1a4efe551..4d5b7b23a3 100644
--- a/gptel-kagi.el
+++ b/gptel-kagi.el
@@ -28,7 +28,7 @@
(eval-when-compile
(require 'cl-lib))
-(declare-function gptel-context--wrap "gptel-contexter")
+(declare-function gptel-context--wrap "gptel-context")
;;; Kagi
(cl-defstruct (gptel-kagi (:constructor gptel--make-kagi)
diff --git a/gptel-ollama.el b/gptel-ollama.el
index 7c6e9175d3..3c76837f5f 100644
--- a/gptel-ollama.el
+++ b/gptel-ollama.el
@@ -27,7 +27,7 @@
(require 'cl-generic)
(declare-function json-read "json" ())
-(declare-function gptel-context--wrap "gptel-contexter")
+(declare-function gptel-context--wrap "gptel-context")
(defvar json-object-type)
;;; Ollama
diff --git a/gptel-openai.el b/gptel-openai.el
index 4dec41dde5..7e557f0ff3 100644
--- a/gptel-openai.el
+++ b/gptel-openai.el
@@ -42,7 +42,7 @@
(declare-function json-read "json")
(declare-function gptel-prompt-prefix-string "gptel")
(declare-function gptel-response-prefix-string "gptel")
-(declare-function gptel-context--wrap "gptel-contexter")
+(declare-function gptel-context--wrap "gptel-context")
(defmacro gptel--json-read ()
(if (fboundp 'json-parse-buffer)
diff --git a/gptel-transient.el b/gptel-transient.el
index 0f2f67d22b..53ebc6a04b 100644
--- a/gptel-transient.el
+++ b/gptel-transient.el
@@ -28,7 +28,6 @@
(require 'cl-lib)
(require 'gptel)
(require 'transient)
-(require 'gptel-contexter)
(declare-function ediff-regions-internal "ediff")
(declare-function ediff-make-cloned-buffer "ediff-utils")
@@ -909,30 +908,33 @@ When LOCAL is non-nil, set the system message only in the
current buffer."
(local-set-key (kbd "C-c C-k") quit-to-menu)))))
;; ** Suffix for displaying and removing context
+(declare-function gptel-context--buffer-setup "gptel-context")
+(declare-function gptel-context--collect "gptel-context")
(transient-define-suffix gptel--suffix-context-buffer ()
"Display all contexts from all buffers & files."
:transient 'transient--do-exit
:key "-xb"
- :description (lambda ()
- (let* ((contexts (gptel-contexts))
- (buffer-count (length contexts))
- (ov-count (if (> buffer-count 0)
- (cl-loop for (_ . ovs) in contexts
- sum (length ovs))
- 0)))
- (concat "Display context buffer "
- (format
- (propertize "(%s)" 'face 'transient-delimiter)
- (propertize (format "%d context%s in %d buffer%s"
- ov-count (if (/= ov-count 1)
"s" "")
- buffer-count
- (if (/= buffer-count 1) "s"
""))
- 'face (if (zerop (length contexts))
- 'transient-inactive-value
- 'transient-value))))))
+ :description
+ (lambda ()
+ (let* ((contexts (and gptel-context--overlay-alist
(gptel-context--collect)))
+ (buffer-count (length contexts))
+ (ov-count (if (> buffer-count 0)
+ (cl-loop for (_ . ovs) in contexts
+ sum (length ovs))
+ 0)))
+ (concat "Display context buffer "
+ (format
+ (propertize "(%s)" 'face 'transient-delimiter)
+ (propertize (format "%d context%s in %d buffer%s"
+ ov-count (if (/= ov-count 1) "s" "")
+ buffer-count
+ (if (/= buffer-count 1) "s" ""))
+ 'face (if (zerop (length contexts))
+ 'transient-inactive-value
+ 'transient-value))))))
(interactive)
- (gptel--context-buffer-setup))
+ (gptel-context--buffer-setup))
;; ** Suffixes for rewriting/refactoring
diff --git a/gptel.el b/gptel.el
index 25d41bbbcb..3820619704 100644
--- a/gptel.el
+++ b/gptel.el
@@ -154,7 +154,6 @@
(require 'text-property-search)
(require 'cl-generic)
(require 'gptel-openai)
-(require 'gptel-contexter)
(with-eval-after-load 'org
(require 'gptel-org))
@@ -833,7 +832,7 @@ file."
(message (propertize msg 'face face))))
(force-mode-line-update)))
-(declare-function gptel-context--wrap "gptel-contexter")
+(declare-function gptel-context--wrap "gptel-context")
;; Send queries, handle responses
@@ -1120,7 +1119,7 @@ BACKEND is the LLM backend in use.
MAX-ENTRIES is the number of queries/responses to include for
contexbt.")
-(cl-defgeneric gptel--wrap-user-prompt (backend prompts)
+(cl-defgeneric gptel--wrap-user-prompt (backend _prompts)
"Wrap the last prompt in PROMPTS with gptel's context.
PROMPTS is a structure as returned by `gptel--parse-buffer'.