Function: gptel--preprocess-schema
gptel--preprocess-schema is a natively compiled function defined in
gptel-request.el.
Signature
(gptel--preprocess-schema SPEC)
Documentation
Set additionalProperties for objects in SPEC destructively.
Convert symbol :types to strings.
Source Code
;; Defined in /nix/store/q3r7g81pvghw7a523kjk2k2zih3pfk8z-emacs-packages-deps/share/emacs/site-lisp/elpa/gptel-20261002.545/gptel-request.el
(defun gptel--preprocess-schema (spec)
"Set additionalProperties for objects in SPEC destructively.
Convert symbol :types to strings."
;; NOTE: Do not use `sequencep' here, as that covers strings too and breaks
;; things.
(when (or (listp spec) (vectorp spec))
(cond
((vectorp spec)
(cl-loop for element across spec
for idx upfrom 0
do (aset spec idx (gptel--preprocess-schema element))))
((keywordp (car spec))
(let ((tail spec))
(while tail
(when (eq (car tail) :type)
(when (symbolp (cadr tail)) ;Convert symbol :type to string
(setcar (cdr tail) (symbol-name (cadr tail))))
(when (equal (cadr tail) "object") ;Add additional object fields
(plist-put tail :additionalProperties :json-false)
(let ((vprops (vconcat
(cl-loop
for prop in (plist-get tail :properties) by #'cddr
collect (substring (symbol-name prop) 1)))))
(plist-put tail :required vprops)
(plist-put tail :propertyOrdering vprops))))
(when (or (listp (cadr tail)) (vectorp (cadr tail)))
(gptel--preprocess-schema (cadr tail)))
(setq tail (cddr tail)))))
((listp spec) (dolist (element spec)
(when (listp element)
(gptel--preprocess-schema element))))))
spec)