add gptel
This commit is contained in:
@@ -4093,6 +4093,78 @@ appropriately.
|
|||||||
(setq-default lisp-indent-function #'+oreo/lisp-indent-function))
|
(setq-default lisp-indent-function #'+oreo/lisp-indent-function))
|
||||||
#+end_src
|
#+end_src
|
||||||
* Miscellaneous
|
* Miscellaneous
|
||||||
|
** gptel
|
||||||
|
LLMs in my Emacs?? What kind of developer have I become!
|
||||||
|
|
||||||
|
I came kinda late to the party with AI and LLM usage for development -
|
||||||
|
I did try them out much earlier near 2022-2023 but found them
|
||||||
|
obtrusive to use. They didn't integrate into my workflow well and
|
||||||
|
providing the context necessary for some of the problems I was facing
|
||||||
|
was, in and of itself, a gargantuan task.
|
||||||
|
|
||||||
|
~gptel~ changes that in quite a dramatic way: incredibly smooth
|
||||||
|
integration of LLMs into my Emacs instance. Some things this package
|
||||||
|
does:
|
||||||
|
- Call an LLM from any buffer in Emacs: from code buffers, to a
|
||||||
|
dedicated chat buffer, even [[*EShell][EShell]]!
|
||||||
|
- Maintain large persistent conversations just by saving the
|
||||||
|
conversation to disc
|
||||||
|
- Use ~org-mode~ for conversations, so generated code is actually in
|
||||||
|
clean source code blocks
|
||||||
|
- Allows one to slickly use all options available via one transient
|
||||||
|
interface ~gptel-menu~
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package gptel
|
||||||
|
:straight t
|
||||||
|
:general
|
||||||
|
(app-leader
|
||||||
|
"g" #'gptel-menu)
|
||||||
|
(local-leader
|
||||||
|
:keymaps 'gptel-mode-map
|
||||||
|
"RET" #'gptel-send)
|
||||||
|
:init
|
||||||
|
(setq gptel-default-mode 'org-mode
|
||||||
|
gptel-prompt-prefix-alist '((markdown-mode . "# Prompt:")
|
||||||
|
(org-mode . "* Prompt:")
|
||||||
|
(text-mode . "# Prompt:"))
|
||||||
|
gptel-response-prefix-alist '((markdown-mode . "# Response:\n")
|
||||||
|
(org-mode . "* Response:\n")
|
||||||
|
(text-mode . "# Response:\n"))
|
||||||
|
gptel-directives
|
||||||
|
'((default . "You are a large language model living in Emacs and a helpful assistant. Respond concisely and with justification.")
|
||||||
|
(programming . "You are a large language model and a careful programmer. Provide code and only code as output without any additional text, prompt or note.")
|
||||||
|
(writing . "You are a large language model and a writing assistant. Respond concisely.")
|
||||||
|
(chat . "You are a large language model and a conversation partner. Respond concisely.")
|
||||||
|
(networking . "You are a large language model and an experienced networking technician talking to a colleague. You have the CCNA qualification. Respond concisely and with justification.")))
|
||||||
|
:config
|
||||||
|
(defun gptel-auto-fill-response (beg end)
|
||||||
|
"Auto-fill the text response inserted between BEG and END, skipping Org
|
||||||
|
source code blocks."
|
||||||
|
(save-excursion
|
||||||
|
(goto-char beg)
|
||||||
|
(let ((current-point beg))
|
||||||
|
(while (re-search-forward "^\s*#\\+begin_src\\|^\s*#\\+end_src" end t)
|
||||||
|
;; we've found a block indicator - what kind of block is it?
|
||||||
|
(let ((block-start (match-beginning 0))
|
||||||
|
(block-end (match-end 0)))
|
||||||
|
(cond
|
||||||
|
((and (string-match-p "^\s*#\\+begin_src" (match-string 0))
|
||||||
|
(< current-point block-start))
|
||||||
|
;; We should fill everything we can up to the source block
|
||||||
|
(fill-region current-point block-start)
|
||||||
|
;; make sure we move current-point to look for the "end of block"
|
||||||
|
(setq current-point block-end))
|
||||||
|
(t
|
||||||
|
;; we're at an end block indicator, so we should bump our
|
||||||
|
;; current-point just past it.
|
||||||
|
(setq current-point (1+ block-end)))))
|
||||||
|
(goto-char current-point))
|
||||||
|
(when (< current-point end)
|
||||||
|
;; Any stragglers, get them filled as well
|
||||||
|
(fill-region current-point end)))))
|
||||||
|
|
||||||
|
(add-hook 'gptel-post-response-functions #'gptel-auto-fill-response))
|
||||||
|
#+end_src
|
||||||
** Evil additions
|
** Evil additions
|
||||||
Additional packages that add the functionality of plugins in Vim I
|
Additional packages that add the functionality of plugins in Vim I
|
||||||
really liked, as well as some new stuff.
|
really liked, as well as some new stuff.
|
||||||
|
|||||||
Reference in New Issue
Block a user