Function: gptel--insert-response
gptel--insert-response is a natively compiled function defined in
gptel.el.
Signature
(gptel--insert-response RESPONSE INFO &optional RAW)
Documentation
Insert the LLM RESPONSE into the gptel buffer.
INFO is a 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--insert-response (response info &optional raw)
"Insert the LLM RESPONSE into the gptel buffer.
INFO is a plist containing information relevant to this buffer.
See `gptel--url-get-response' for details.
Optional RAW disables text properties and transformation."
(let* ((gptel-buffer (plist-get info :buffer))
(start-marker (plist-get info :position))
(tracking-marker (plist-get info :tracking-marker)))
(pcase response
((pred stringp) ;Response text
(with-current-buffer gptel-buffer
(when tracking-marker ;separate from previous response
(set-marker-insertion-type tracking-marker t)
(setq response (concat gptel-response-separator response)))
(save-excursion
(with-current-buffer (marker-buffer start-marker)
(goto-char (or tracking-marker start-marker))
;; (run-hooks 'gptel-pre-response-hook)
(unless (or (bobp) (plist-get info :in-place)
tracking-marker)
(insert gptel-response-separator)
(when gptel-mode
(insert (gptel-response-prefix-string)))
(move-marker start-marker (point)))
(unless raw
(when-let* ((transformer (plist-get info :transformer)))
(setq response (funcall transformer response)))
(add-text-properties
0 (length response) '(gptel response front-sticky (gptel)) response))
(insert response)
(plist-put info :tracking-marker (setq tracking-marker (point-marker)))
;; "Lock" the tracking marker after inserting the response
(set-marker-insertion-type tracking-marker nil)))))
(`(reasoning . ,text)
(when-let* ((include (plist-get info :include-reasoning)))
(if (stringp include)
(with-current-buffer (get-buffer-create
(plist-get info :include-reasoning))
(save-excursion (goto-char (point-max)) (insert text)))
(with-current-buffer (marker-buffer start-marker)
(let ((separator ;Separate from response prefix if required
(and (not tracking-marker) gptel-mode
(not (string-suffix-p "\n" (gptel-response-prefix-string)))
"\n"))
(blocks (if (derived-mode-p 'org-mode)
`("#+begin_reasoning\n" . ,(concat "\n#+end_reasoning"
gptel-response-separator))
;; TODO(reasoning) remove properties and strip instead
(cons (propertize "``` reasoning\n" 'gptel 'ignore
'keymap gptel--markdown-block-map)
(concat (propertize "\n```" 'gptel 'ignore
'keymap gptel--markdown-block-map)
gptel-response-separator)))))
(if (eq include 'ignore)
(progn
(add-text-properties
0 (length text) '(gptel ignore front-sticky (gptel)) text)
(gptel--insert-response
(concat (car blocks) text (cdr blocks)) info t))
(gptel--insert-response (concat separator (car blocks)) info t)
(gptel--insert-response text info)
(gptel--insert-response (cdr blocks) info t))
(save-excursion
(goto-char (plist-get info :tracking-marker))
(if (derived-mode-p 'org-mode) ;fold block
(progn (search-backward "#+end_reasoning" start-marker t)
(when (looking-at "^#\\+end_reasoning")
(org-cycle)))
(when (re-search-backward "^```" start-marker t)
(gptel-markdown-cycle-block)))))))))
(`(tool-call . ,tool-calls)
(gptel--display-tool-calls tool-calls info))
(`(tool-result . ,tool-results)
(gptel--display-tool-results tool-results info)))))