Sanitize gpt-model value just in time
* gptel-transient.el (gptel-menu): Sanitize model if it's not in the backend. * gptel.el (gptel--sanitize-model): New helper. * gptel.el (gptel-send): Also sanitize model in non-prefixed gptel-send.
This commit is contained in:
parent
50fb34ab7c
commit
7b19cdf117
2 changed files with 23 additions and 2 deletions
|
@ -156,8 +156,10 @@ which see."
|
||||||
(lambda () (if (derived-mode-p 'prog-mode)
|
(lambda () (if (derived-mode-p 'prog-mode)
|
||||||
"Refactor" "Rewrite"))
|
"Refactor" "Rewrite"))
|
||||||
gptel-rewrite-menu)]
|
gptel-rewrite-menu)]
|
||||||
["Send" (gptel--suffix-send)]])
|
["Send" (gptel--suffix-send)]]
|
||||||
|
(interactive)
|
||||||
|
(gptel--sanitize-model)
|
||||||
|
(transient-setup 'gptel-menu))
|
||||||
|
|
||||||
;; ** Prefix for setting the system prompt.
|
;; ** Prefix for setting the system prompt.
|
||||||
(defun gptel-system-prompt--setup (_)
|
(defun gptel-system-prompt--setup (_)
|
||||||
|
|
19
gptel.el
19
gptel.el
|
@ -859,6 +859,7 @@ waiting for the response."
|
||||||
(if (and arg (require 'gptel-transient nil t))
|
(if (and arg (require 'gptel-transient nil t))
|
||||||
(call-interactively #'gptel-menu)
|
(call-interactively #'gptel-menu)
|
||||||
(message "Querying %s..." (gptel-backend-name gptel-backend))
|
(message "Querying %s..." (gptel-backend-name gptel-backend))
|
||||||
|
(gptel--sanitize-model)
|
||||||
(let* ((response-pt
|
(let* ((response-pt
|
||||||
(if (use-region-p)
|
(if (use-region-p)
|
||||||
(set-marker (make-marker) (region-end))
|
(set-marker (make-marker) (region-end))
|
||||||
|
@ -1115,6 +1116,22 @@ See `gptel-curl--get-response' for its contents.")
|
||||||
(list nil (concat "(" http-msg ") Could not parse HTTP response.")
|
(list nil (concat "(" http-msg ") Could not parse HTTP response.")
|
||||||
"Could not parse HTTP response.")))))
|
"Could not parse HTTP response.")))))
|
||||||
|
|
||||||
|
(cl-defun gptel--sanitize-model (&key (backend gptel-backend)
|
||||||
|
(shoosh t))
|
||||||
|
"Check if `gptel-model' is available in BACKEND, adjust accordingly.
|
||||||
|
|
||||||
|
If SHOOSH is true, don't issue a warning."
|
||||||
|
(let* ((available (gptel-backend-models backend)))
|
||||||
|
(unless (member gptel-model available)
|
||||||
|
(let ((fallback (car available)))
|
||||||
|
(unless shoosh
|
||||||
|
(display-warning
|
||||||
|
'gptel
|
||||||
|
(format (concat "Preferred `gptel-model' \"%s\" not"
|
||||||
|
"supported in \"%s\", using \"%s\" instead")
|
||||||
|
gptel-model (gptel-backend-name backend) fallback)))
|
||||||
|
(setq-local gptel-model fallback)))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun gptel (name &optional _ initial interactivep)
|
(defun gptel (name &optional _ initial interactivep)
|
||||||
"Switch to or start ChatGPT session with NAME.
|
"Switch to or start ChatGPT session with NAME.
|
||||||
|
@ -1154,6 +1171,8 @@ INTERACTIVEP is t when gptel is called interactively."
|
||||||
(text-mode)
|
(text-mode)
|
||||||
(visual-line-mode 1))
|
(visual-line-mode 1))
|
||||||
(t (funcall gptel-default-mode)))
|
(t (funcall gptel-default-mode)))
|
||||||
|
(gptel--sanitize-model :backend (default-value 'gptel-backend)
|
||||||
|
:shoosh nil)
|
||||||
(unless gptel-mode (gptel-mode 1))
|
(unless gptel-mode (gptel-mode 1))
|
||||||
(goto-char (point-max))
|
(goto-char (point-max))
|
||||||
(skip-chars-backward "\t\r\n")
|
(skip-chars-backward "\t\r\n")
|
||||||
|
|
Loading…
Add table
Reference in a new issue