branch: elpa/gptel commit aef57c2d3f99b894938450ec6a241a9959966973 Author: Karthik Chikmagalur <karthikchikmaga...@gmail.com> Commit: Karthik Chikmagalur <karthikchikmaga...@gmail.com>
gptel-openai-extras: Fix Deepseek repeated roles error * gptel-openai-extras.el (gptel--parse-buffer): Add a cl-defmethod for gptel-deepseek to merge successive prompts with the same role (user/assistant) in the messages array. The Deepseek API requires strictly alternating message roles in the conversation prompt. --- gptel-openai-extras.el | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gptel-openai-extras.el b/gptel-openai-extras.el index e5b7b04dc6..c9e0630747 100644 --- a/gptel-openai-extras.el +++ b/gptel-openai-extras.el @@ -309,6 +309,25 @@ parameters." (when (and (stringp reasoning) (length> reasoning 0)) (plist-put info :reasoning reasoning)))) +(cl-defmethod gptel--parse-buffer :around ((_backend gptel-deepseek) max-entries) + "Merge successive prompts in the prompts list that have the same role. + +The Deepseek API requires strictly alternating roles (user/assistant) in messages." + (let* ((prompts (cl-call-next-method)) + (index prompts)) + (prog1 prompts + (while index + (let ((p1 (car index)) + (p2 (cadr index)) + (rest (cdr index))) + (when (and p2 (equal (plist-get p1 :role) + (plist-get p2 :role))) + (setf (plist-get p1 :content) + (concat (plist-get p1 :content) "\n" + (plist-get p2 :content))) + (setcdr index (cdr rest))) + (setq index (cdr index))))))) + ;;;###autoload (cl-defun gptel-make-deepseek (name &key curl-args stream key request-params