diff --git a/gptel-transient.el b/gptel-transient.el index 5873fde..5c988c0 100644 --- a/gptel-transient.el +++ b/gptel-transient.el @@ -156,8 +156,10 @@ which see." (lambda () (if (derived-mode-p 'prog-mode) "Refactor" "Rewrite")) 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. (defun gptel-system-prompt--setup (_) diff --git a/gptel.el b/gptel.el index bb9314b..f353b98 100644 --- a/gptel.el +++ b/gptel.el @@ -859,6 +859,7 @@ waiting for the response." (if (and arg (require 'gptel-transient nil t)) (call-interactively #'gptel-menu) (message "Querying %s..." (gptel-backend-name gptel-backend)) + (gptel--sanitize-model) (let* ((response-pt (if (use-region-p) (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.") "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 (defun gptel (name &optional _ initial interactivep) "Switch to or start ChatGPT session with NAME. @@ -1154,6 +1171,8 @@ INTERACTIVEP is t when gptel is called interactively." (text-mode) (visual-line-mode 1)) (t (funcall gptel-default-mode))) + (gptel--sanitize-model :backend (default-value 'gptel-backend) + :shoosh nil) (unless gptel-mode (gptel-mode 1)) (goto-char (point-max)) (skip-chars-backward "\t\r\n")