1
0
Fork 0

Add function to retrieve summaries from a text or URL

This function can be called from Lisp.
This commit is contained in:
Bram Schoenmakers 2023-12-28 23:13:40 +01:00
parent 575ac76fa3
commit 94dda4d760
Signed by: bram
GPG key ID: 0CCD19DFDC63258F

31
kagi.el
View file

@ -260,16 +260,6 @@ list of conses."
`(("url" . ,url))))) `(("url" . ,url)))))
(kagi--call-summarizer request-obj))) (kagi--call-summarizer request-obj)))
(defun kagi--get-summary (request-function)
"Return a summary text.
F is a function to call the Summarizer API that returns a JSON response."
(let* ((response (funcall request-function))
(parsed-response (json-parse-string response))
(data (gethash "data" parsed-response))
(output (gethash "output" data)))
(kagi--format-output output)))
(defun kagi--display-summary (summary buffer-name) (defun kagi--display-summary (summary buffer-name)
"Display the SUMMARY in a buffer called BUFFER-NAME." "Display the SUMMARY in a buffer called BUFFER-NAME."
(with-current-buffer (get-buffer-create buffer-name) (with-current-buffer (get-buffer-create buffer-name)
@ -333,13 +323,28 @@ Returns a formatted string to be displayed by the shell."
"Generate a name for the summary buffer, HINT will be part of the name." "Generate a name for the summary buffer, HINT will be part of the name."
(format "%s (summary)" hint)) (format "%s (summary)" hint))
(defun kagi--url-p (s)
"Non-nil if string S is a URL."
(string-match-p (rx (seq "http" (? "s") "://")) s))
;;;###autoload
(defun kagi-summarize (text-or-url)
"Return the summary of the given TEXT-OR-URL."
(let* ((response (if (kagi--url-p text-or-url)
(kagi--call-url-summarizer text-or-url)
(kagi--call-text-summarizer text-or-url)))
(parsed-response (json-parse-string response))
(data (gethash "data" parsed-response))
(output (gethash "output" data)))
(kagi--format-output output)))
;;;###autoload ;;;###autoload
(defun kagi-summarize-buffer (buffer) (defun kagi-summarize-buffer (buffer)
"Summarize the BUFFER's content and show it in a new window." "Summarize the BUFFER's content and show it in a new window."
(interactive "b") (interactive "b")
(with-current-buffer buffer (with-current-buffer buffer
(kagi--display-summary (kagi--display-summary
(kagi--get-summary (lambda () (kagi--call-text-summarizer (buffer-string)))) (kagi-summarize (buffer-string))
(kagi--summary-buffer-name (buffer-name))))) (kagi--summary-buffer-name (buffer-name)))))
;;;###autoload ;;;###autoload
@ -349,7 +354,7 @@ Returns a formatted string to be displayed by the shell."
Shows the summary in a new window." Shows the summary in a new window."
(interactive "r") (interactive "r")
(kagi--display-summary (kagi--display-summary
(kagi--get-summary (lambda () (kagi--call-text-summarizer (buffer-substring begin end)))) (kagi-summarize (buffer-substring-no-properties begin end))
(kagi--summary-buffer-name (buffer-name)))) (kagi--summary-buffer-name (buffer-name))))
;;;###autoload ;;;###autoload
@ -368,7 +373,7 @@ supported:
- Scanned PDFs and images (OCR)" - Scanned PDFs and images (OCR)"
(interactive "sURL: ") (interactive "sURL: ")
(kagi--display-summary (kagi--display-summary
(kagi--get-summary (lambda () (kagi--call-url-summarizer url))) (kagi-summarize url)
(kagi--summary-buffer-name (kagi--get-domain-name url)))) (kagi--summary-buffer-name (kagi--get-domain-name url))))
(provide 'kagi) (provide 'kagi)