branch: elpa/gptel
commit 54ce1c3d26715414a014c67e3b9062d9997333ce
Author: Karthik Chikmagalur <[email protected]>
Commit: Karthik Chikmagalur <[email protected]>
gptel-curl: Handle Deepseek API variance (#709)
* gptel-openai-extras.el (gptel-curl--parse-stream): Some deepseek
model providers will stop supplying "reasoning_content" entries in
the streaming response after the end of the reasoning block. This
breaks our check in `gptel-deepseek' to detect if we're working
with a reasoning or non-reasoning model. Fix by explicitly
setting the :reasoning-block key in INFO to indicate that we're in
a reasoning block, then use the value of :reasoning-block to
determine if the model is reasoning-capable.
* gptel-curl.el (gptel-curl--stream-filter): Set :reasoning-block
when reading reasoning content delivered via a separate JSON
field (i.e. when it's not integrated in the main response stream.)
---
gptel-curl.el | 2 ++
gptel-openai-extras.el | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/gptel-curl.el b/gptel-curl.el
index 11ced1fbe4..425d25aeee 100644
--- a/gptel-curl.el
+++ b/gptel-curl.el
@@ -338,6 +338,8 @@ Optional RAW disables text properties and transformation."
((stringp reasoning)
;; Obtained from separate JSON field in response
(funcall callback (cons 'reasoning reasoning) proc-info)
+ (unless reasoning-block ;Record that we're in a reasoning
block (#709)
+ (plist-put proc-info :reasoning-block 'in))
(plist-put proc-info :reasoning nil)) ;Reset for next
parsing round
((and (null reasoning-block) (length> response 0))
(if (string-match-p "^ *<think>" response)
diff --git a/gptel-openai-extras.el b/gptel-openai-extras.el
index c9e0630747..078666cb7b 100644
--- a/gptel-openai-extras.el
+++ b/gptel-openai-extras.el
@@ -296,7 +296,7 @@ parameters."
(concat (plist-get info :reasoning) reasoning))
(when-let* ((content (plist-get delta :content))
((not (eq content :null))))
- (if (plist-member delta :reasoning_content) ;Check for
reasoning model
+ (if (eq (plist-get info :reasoning-block) 'in) ;Check if
in reasoning block
(plist-put info :reasoning-block t) ;End of streaming
reasoning block
(plist-put info :reasoning-block 'done)) ;Not using a
reasoning model
(throw 'done t)))))))))))