branch: elpa/gptel commit 859e7c753fe90c05ebfde06f6b1aee130b404da7 Author: Andrew De Angelis <bobodeange...@gmail.com> Commit: GitHub <nore...@github.com>
gptel-ollama: Merge request options correctly (#473, #490) * gptel-ollama.el (gptel--request-data): Merge request options for an Ollama request specified by the model/backend configuration and gptel options (like `gptel-temperature') correctly. --- gptel-ollama.el | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/gptel-ollama.el b/gptel-ollama.el index dc2a2da6b4..cd0b83e7b9 100644 --- a/gptel-ollama.el +++ b/gptel-ollama.el @@ -80,31 +80,27 @@ Intended for internal use only.") (push (list :role "system" :content gptel--system-message) prompts)) - (let ((prompts-plist - `(:model ,(gptel--model-name gptel-model) - :messages [,@prompts] - :stream ,(or (and gptel-stream gptel-use-curl - (gptel-backend-stream gptel-backend)) - :json-false))) - options-plist) - (when gptel-temperature + (let* ((prompts-plist + (gptel--merge-plists + `(:model ,(gptel--model-name gptel-model) + :messages [,@prompts] + :stream ,(or (and gptel-stream gptel-use-curl + (gptel-backend-stream gptel-backend)) + :json-false)) + (gptel-backend-request-params gptel-backend) + (gptel--model-request-params gptel-model))) + ;; the initial options (if any) from request params + (options-plist (plist-get prompts-plist :options))) + + ;; if the temperature and max-tokens aren't set as + ;; backend/model-specific, use the global settings + (when (and gptel-temperature (not (plist-get options-plist :temperature))) (setq options-plist - (plist-put options-plist :temperature - gptel-temperature))) - (when gptel-max-tokens + (plist-put options-plist :temperature gptel-temperature))) + (when (and gptel-max-tokens (not (plist-get options-plist :num_predict))) (setq options-plist - (plist-put options-plist :num_predict - gptel-max-tokens))) - ;; FIXME: These options will be lost if there are model/backend-specific - ;; :options, since `gptel--merge-plists' does not merge plist values - ;; recursively. - (when options-plist - (plist-put prompts-plist :options options-plist)) - ;; Merge request params with model and backend params. - (gptel--merge-plists - prompts-plist - (gptel-backend-request-params gptel-backend) - (gptel--model-request-params gptel-model)))) + (plist-put options-plist :num_predict gptel-max-tokens))) + (plist-put prompts-plist :options options-plist))) (cl-defmethod gptel--parse-list ((_backend gptel-ollama) prompt-list) (cl-loop for text in prompt-list