Function: gptel--url-parse-response
gptel--url-parse-response is a natively compiled function defined in
gptel-request.el.
Signature
(gptel--url-parse-response BACKEND PROC-INFO)
Documentation
Parse response from BACKEND with PROC-INFO.
Source Code
;; Defined in /nix/store/q3r7g81pvghw7a523kjk2k2zih3pfk8z-emacs-packages-deps/share/emacs/site-lisp/elpa/gptel-20261002.545/gptel-request.el
(defun gptel--url-parse-response (backend proc-info)
"Parse response from BACKEND with PROC-INFO."
(when gptel-log-level ;logging
(save-excursion
(goto-char url-http-end-of-headers)
(when (eq gptel-log-level 'debug)
(gptel--log (gptel--json-encode (buffer-substring-no-properties (point-min) (point)))
"response headers"))
(gptel--log (buffer-substring-no-properties (point) (point-max))
"response body")))
(if-let* ((http-msg (string-trim (buffer-substring (line-beginning-position)
(line-end-position))))
(http-status
(save-match-data
(and (string-match "HTTP/[.0-9]+ +\\([0-9]+\\)" http-msg)
(match-string 1 http-msg))))
(response (progn (goto-char url-http-end-of-headers)
(condition-case nil
(gptel--json-read)
(error 'json-read-error)))))
(cond
;; FIXME Handle the case where HTTP 100 is followed by HTTP (not 200) BUG #194
((or (memq url-http-response-status '(200 100))
(string-match-p "\\(?:1\\|2\\)00 OK" http-msg))
(list (and-let* ((resp (gptel--parse-response backend response proc-info))
((not (string-blank-p resp))))
(string-trim resp))
http-status http-msg))
((and-let* ((error-data (gptel--parse-response-error response)))
(list nil http-status http-msg error-data)))
((eq response 'json-read-error)
(list nil http-status (concat "(" http-msg ") Malformed JSON in response.") "json-read-error"))
(t (list nil http-status (concat "(" http-msg ") Could not parse HTTP response.")
"Could not parse HTTP response.")))
(list nil (concat "(" http-msg ") Could not parse HTTP response.")
"Could not parse HTTP response.")))