gptel: save/restore multi-line directives (#180)
* gptel.el (gptel--restore-state, gptel--save-state): Try to support writing/reading multi-line directives in Org and other modes correctly when saving the buffer. The support is preliminary and works as follows: - org-mode: Replace newlines with "\n" before writing the relevant org property. - other modes: escape newlines with print-escape-newlines when updating local vars. Neither of these is a good fix, but brings support for multi-line directives up from completely broken to works-via-hack. They are subject to change in the future and might break some chat files. :(
This commit is contained in:
parent
d2f56c62a0
commit
c41a53f526
1 changed files with 16 additions and 15 deletions
31
gptel.el
31
gptel.el
|
@ -580,7 +580,7 @@ for when gptel restores chat metadata."
|
||||||
(setq-local gptel-model model))
|
(setq-local gptel-model model))
|
||||||
(gptel--restore-backend (org-entry-get (point-min) "GPTEL_BACKEND"))
|
(gptel--restore-backend (org-entry-get (point-min) "GPTEL_BACKEND"))
|
||||||
(when-let ((system (org-entry-get (point-min) "GPTEL_SYSTEM")))
|
(when-let ((system (org-entry-get (point-min) "GPTEL_SYSTEM")))
|
||||||
(setq-local gptel--system-message system))
|
(setq-local gptel--system-message (string-replace "\\n" "\n" system)))
|
||||||
(when-let ((temp (org-entry-get (point-min) "GPTEL_TEMPERATURE")))
|
(when-let ((temp (org-entry-get (point-min) "GPTEL_TEMPERATURE")))
|
||||||
(setq-local gptel-temperature (gptel--numberize temp))))
|
(setq-local gptel-temperature (gptel--numberize temp))))
|
||||||
(error (message "Could not restore gptel state, sorry!")))))
|
(error (message "Could not restore gptel state, sorry!")))))
|
||||||
|
@ -611,7 +611,7 @@ file."
|
||||||
(unless (string= (default-value 'gptel--system-message)
|
(unless (string= (default-value 'gptel--system-message)
|
||||||
gptel--system-message)
|
gptel--system-message)
|
||||||
(org-entry-put (point-min) "GPTEL_SYSTEM"
|
(org-entry-put (point-min) "GPTEL_SYSTEM"
|
||||||
gptel--system-message))
|
(string-replace "\n" "\\n" gptel--system-message)))
|
||||||
(when gptel-max-tokens
|
(when gptel-max-tokens
|
||||||
(org-entry-put
|
(org-entry-put
|
||||||
(point-min) "GPTEL_MAX_TOKENS" gptel-max-tokens))
|
(point-min) "GPTEL_MAX_TOKENS" gptel-max-tokens))
|
||||||
|
@ -627,19 +627,20 @@ file."
|
||||||
(> attempts 0))
|
(> attempts 0))
|
||||||
(funcall write-bounds (1- attempts)))))))
|
(funcall write-bounds (1- attempts)))))))
|
||||||
(funcall write-bounds 6))))
|
(funcall write-bounds 6))))
|
||||||
(_ (save-excursion
|
(_ (let ((print-escape-newlines t))
|
||||||
(save-restriction
|
(save-excursion
|
||||||
(add-file-local-variable 'gptel-model gptel-model)
|
(save-restriction
|
||||||
(add-file-local-variable 'gptel--backend-name
|
(add-file-local-variable 'gptel-model gptel-model)
|
||||||
(gptel-backend-name gptel-backend))
|
(add-file-local-variable 'gptel--backend-name
|
||||||
(unless (equal (default-value 'gptel-temperature) gptel-temperature)
|
(gptel-backend-name gptel-backend))
|
||||||
(add-file-local-variable 'gptel-temperature gptel-temperature))
|
(unless (equal (default-value 'gptel-temperature) gptel-temperature)
|
||||||
(unless (string= (default-value 'gptel--system-message)
|
(add-file-local-variable 'gptel-temperature gptel-temperature))
|
||||||
gptel--system-message)
|
(unless (string= (default-value 'gptel--system-message)
|
||||||
(add-file-local-variable 'gptel--system-message gptel--system-message))
|
gptel--system-message)
|
||||||
(when gptel-max-tokens
|
(add-file-local-variable 'gptel--system-message gptel--system-message))
|
||||||
(add-file-local-variable 'gptel-max-tokens gptel-max-tokens))
|
(when gptel-max-tokens
|
||||||
(add-file-local-variable 'gptel--bounds (gptel--get-bounds)))))))
|
(add-file-local-variable 'gptel-max-tokens gptel-max-tokens))
|
||||||
|
(add-file-local-variable 'gptel--bounds (gptel--get-bounds))))))))
|
||||||
|
|
||||||
(defun gptel--get-bounds ()
|
(defun gptel--get-bounds ()
|
||||||
"Return the gptel response boundaries as an alist."
|
"Return the gptel response boundaries as an alist."
|
||||||
|
|
Loading…
Add table
Reference in a new issue