Skip to content

Commit 7ac9201

Browse files
committed
gptel-gemini: Handle multiple text parts in parser
* gptel-gemini.el (gptel-curl--parse-stream, gptel--parse-response): Handle multiple text parts in the same message when parsing. This kind of response is generated by the flash-thinking Gemini models.
1 parent 1668405 commit 7ac9201

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

gptel-gemini.el

+13-3
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,25 @@
4949
(save-match-data
5050
(when-let*
5151
((response (gptel--json-read))
52-
(text (map-nested-elt
53-
response '(:candidates 0 :content :parts 0 :text))))
52+
(parts (map-nested-elt
53+
response '(:candidates 0 :content :parts)))
54+
(text (cl-loop for part across parts
55+
for tx = (plist-get part :text)
56+
when tx collect tx into txs
57+
finally return
58+
(and txs (mapconcat #'identity txs "\n\n")))))
5459
(push text content-strs))))
5560
(error
5661
(goto-char (match-beginning 0))))
5762
(apply #'concat (nreverse content-strs))))
5863

5964
(cl-defmethod gptel--parse-response ((_backend gptel-gemini) response _info)
60-
(map-nested-elt response '(:candidates 0 :content :parts 0 :text)))
65+
(let ((parts (map-nested-elt response '(:candidates 0 :content :parts))))
66+
(cl-loop for part across parts
67+
for tx = (plist-get part :text)
68+
when tx collect tx into txs
69+
finally return
70+
(and txs (mapconcat #'identity txs "\n\n")))))
6171

6272
(cl-defmethod gptel--request-data ((_backend gptel-gemini) prompts)
6373
"JSON encode PROMPTS for sending to Gemini."

0 commit comments

Comments
 (0)