Function: gptel-curl--stream-insert-response
gptel-curl--stream-insert-response is a natively compiled function
defined in gptel.el.
Signature
(gptel-curl--stream-insert-response RESPONSE INFO &optional RAW)
Documentation
Insert streaming RESPONSE from an LLM into the gptel buffer.
INFO is a mutable plist containing information relevant to this buffer.
See gptel--url-get-response for details.
Optional RAW disables text properties and transformation.
Source Code
;; Defined in /nix/store/q3r7g81pvghw7a523kjk2k2zih3pfk8z-emacs-packages-deps/share/emacs/site-lisp/elpa/gptel-20261002.545/gptel.el
(defun gptel-curl--stream-insert-response (response info &optional raw)
"Insert streaming RESPONSE from an LLM into the gptel buffer.
INFO is a mutable plist containing information relevant to this buffer.
See `gptel--url-get-response' for details.
Optional RAW disables text properties and transformation."
(pcase response
((pred stringp)
(let ((start-marker (plist-get info :position))
(tracking-marker (plist-get info :tracking-marker))
(transformer (plist-get info :transformer)))
(with-current-buffer (marker-buffer start-marker)
(save-excursion
(unless tracking-marker
(goto-char start-marker)
(unless (or (bobp) (plist-get info :in-place))
(insert gptel-response-separator)
(when gptel-mode
;; Put prefix before AI response.
(insert (gptel-response-prefix-string)))
(move-marker start-marker (point)))
(setq tracking-marker (set-marker (make-marker) (point)))
;; Ensure that you can type below the response while it's streaming
(if (eobp) (insert "\n"))
(plist-put info :tracking-marker tracking-marker))
;; "Unlock" the tracking marker before inserting the response chunk
(set-marker-insertion-type tracking-marker t)
(goto-char tracking-marker)
(unless raw
(when transformer
(setq response (funcall transformer response)))
(add-text-properties
0 (length response) '(gptel response front-sticky (gptel))
response))
;; (run-hooks 'gptel-pre-stream-hook)
(insert response)
(run-hooks 'gptel-post-stream-hook)
;; "Lock" the tracking marker again
(set-marker-insertion-type tracking-marker nil)))))
(`(reasoning . ,text)
(gptel--display-reasoning-stream text info))
(`(tool-call . ,tool-calls)
(gptel--display-tool-calls tool-calls info))
(`(tool-result . ,tool-results)
(gptel--display-tool-results tool-results info)
;; Adjust for tool calls inside reasoning blocks
(when (eq (plist-get info :reasoning-block) 'in)
(when-let* ((rm (plist-get info :reasoning-marker))
(tm (plist-get info :tracking-marker)))
(move-marker rm tm (marker-buffer tm)))))))