gptel, gptel-transient: Fix read temperature from minibuffer (#85)

gptel-transient.el (gtel--transient-read-variable): Use a custom transient infix reader.

gptel.el (gptel--request-data): Don't use `gptel--numberize'.
This commit is contained in:
Tianshu Wang 2023-07-21 12:33:00 +08:00 committed by GitHub
parent b92fc389d7
commit a660e13a8b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 11 deletions

View file

@ -230,6 +230,10 @@ Customize `gptel-directives' for task-specific prompts."
;; ** Infixes for model parameters
(defun gptel--transient-read-variable (prompt initial-input history)
"Read value from minibuffer and interpret the result as a Lisp object."
(read-from-minibuffer prompt initial-input read-expression-map t history))
(transient-define-infix gptel--infix-num-messages-to-send ()
"Number of recent messages to send with each exchange.
@ -242,7 +246,7 @@ include."
:variable 'gptel--num-messages-to-send
:key "n"
:prompt "Number of past messages to include for context (leave empty for all): "
:reader 'transient-read-number-N0)
:reader 'gptel--transient-read-variable)
(transient-define-infix gptel--infix-max-tokens ()
"Max tokens per response.
@ -259,7 +263,7 @@ will get progressively longer!"
:variable 'gptel-max-tokens
:key "<"
:prompt "Response length in tokens (leave empty: default, 80-200: short, 200-500: long): "
:reader 'transient-read-number-N+)
:reader 'gptel--transient-read-variable)
(transient-define-infix gptel--infix-model ()
"AI Model for Chat."
@ -279,9 +283,8 @@ will get progressively longer!"
:class 'transient-lisp-variable
:variable 'gptel-temperature
:key "t"
:reader (lambda (&rest _)
(read-from-minibuffer "Set temperature (0.0-2.0, leave empty for default): "
(number-to-string gptel-temperature))))
:prompt "Set temperature (0.0-2.0, leave empty for default): "
:reader 'gptel--transient-read-variable)
;; ** Infix for the refactor/rewrite system message

View file

@ -263,7 +263,7 @@ By default, `gptel-host' is used as HOST and \"apikey\" as USER."
secret)
(user-error "No `gptel-api-key' found in the auth source")))
;; FIXME Should we utf-8 encode the api-key here?
;; FIXME Should we utf-8 encode the api-key here?
(defun gptel--api-key ()
"Get api key from `gptel-api-key'."
(pcase gptel-api-key
@ -496,7 +496,7 @@ Model parameters can be let-bound around calls to this function."
(set-marker (make-marker) position buffer))))
(full-prompt
(cond
((null prompt)
((null prompt)
(let ((gptel--system-message system))
(gptel--create-prompt start-marker)))
((stringp prompt)
@ -630,8 +630,7 @@ there."
(goto-char (point-max))))
(t (goto-char (or prompt-end (point-max)))))
(let ((max-entries (and gptel--num-messages-to-send
(* 2 (gptel--numberize
gptel--num-messages-to-send))))
(* 2 gptel--num-messages-to-send)))
(prop) (prompts))
(while (and
(or (not max-entries) (>= max-entries 0))
@ -659,9 +658,9 @@ there."
:messages [,@prompts]
:stream ,(or (and gptel-stream gptel-use-curl) :json-false))))
(when gptel-temperature
(plist-put prompts-plist :temperature (gptel--numberize gptel-temperature)))
(plist-put prompts-plist :temperature gptel-temperature))
(when gptel-max-tokens
(plist-put prompts-plist :max_tokens (gptel--numberize gptel-max-tokens)))
(plist-put prompts-plist :max_tokens gptel-max-tokens))
prompts-plist))
;; TODO: Use `run-hook-wrapped' with an accumulator instead to handle