-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path+gptel.el
More file actions
93 lines (87 loc) · 3.49 KB
/
+gptel.el
File metadata and controls
93 lines (87 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;;; +gptel.el -*- lexical-binding: t; -*-
;; Moved to +local.el
;; (after! gptel
;; (gptel-make-anthropic "Claude"
;; :stream t
;; :key gptel-api-key))
(defvar gptel-lookup--history nil)
(defun gptel-lookup (prompt)
(interactive (list (read-string "Ask ChatGPT: " nil gptel-lookup--history)))
(when (string= prompt "") (user-error "A prompt is required."))
(gptel-request
prompt
:callback
(lambda (response info)
(if (not response)
(message "gptel-lookup failed with message: %s" (plist-get info :status))
(with-current-buffer (get-buffer-create "*gptel-lookup*")
(let ((inhibit-read-only t))
(erase-buffer)
(insert response))
(special-mode)
(display-buffer (current-buffer)
`((display-buffer-in-side-window)
(side . bottom)
(window-height . ,#'fit-window-to-buffer))))))))
(defun +gptel-rewrite-and-replace (bounds &optional directive)
(interactive
(list
(cond
((use-region-p) (cons (region-beginning) (region-end)))
((derived-mode-p 'text-mode)
(list (bounds-of-thing-at-point 'sentence)))
(t (cons (line-beginning-position) (line-end-position))))
(and current-prefix-arg
(read-string "ChatGPT Directive: "
"You are a prose editor. Rewrite my prompt more professionally."))))
(gptel-request
(buffer-substring-no-properties (car bounds) (cdr bounds)) ;the prompt
:system (or directive "You are a prose editor. Rewrite my prompt more professionally.")
:buffer (current-buffer)
:context (cons (set-marker (make-marker) (car bounds))
(set-marker (make-marker) (cdr bounds)))
:callback
(lambda (response info)
(if (not response)
(message "ChatGPT response failed with: %s" (plist-get info :status))
(let* ((bounds (plist-get info :context))
(beg (car bounds))
(end (cdr bounds))
(buf (plist-get info :buffer)))
(with-current-buffer buf
(save-excursion
(goto-char beg)
(kill-region beg end)
(insert response)
(set-marker beg nil)
(set-marker end nil)
(message "Rewrote line. Original line saved to kill-ring."))))))))
;; ;; Create a kagi backend if you don't have one defined
;; (defvar gptel--kagi
;; (gptel-make-kagi "Kagi" :key "YOUR_KAGI_KEY")) ;or function that returns a key
;;
;; ;; Function that requests kagi for a url summary and shows it in a side-window
;; (defun my/kagi-summarize (url)
;; (let ((gptel-backend gptel--kagi)
;; (gptel-model "summarize:agnes")) ;or summarize:cecil, summarize:daphne, summarize:muriel
;; (gptel-request
;; url
;; :callback
;; (lambda (response info)
;; (if response
;; (with-current-buffer (get-buffer-create "*Kagi Summary*")
;; (let ((inhibit-read-only t))
;; (erase-buffer)
;; (visual-line-mode 1)
;; (insert response)
;; (display-buffer
;; (current-buffer)
;; '((display-buffer-in-side-window
;; display-buffer-at-bottom)
;; (side . bottom))))
;; (special-mode 1))
;; (message "gptel-request failed with message: %s"
;; (plist-get info :status)))))))
;;
;; ;; Make this function available to Embark
;; (keymap-set embark-url-map "=" #'my/kagi-summarize)