1
0
Fork 0

Refactored gathering of summary parameters

There was a bug causing the kagi-summarize-url to break, due to an
incorrect parameter set.
This commit is contained in:
Bram Schoenmakers 2024-04-20 09:54:47 +02:00
parent e38a9e1c81
commit 38f74f1a24
Signed by: bram
GPG key ID: 0CCD19DFDC63258F
2 changed files with 94 additions and 54 deletions

View file

@ -430,13 +430,19 @@ https://www.example.com"
(expect #'kagi--display-summary :to-have-been-called) (expect #'kagi--display-summary :to-have-been-called)
(expect #'kagi--insert-summary :not :to-have-been-called)) (expect #'kagi--insert-summary :not :to-have-been-called))
(it "inserts the summary when requested, interactively" (it "inserts the summary when requested, interactively"
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(t nil nil)) (spy-on #'kagi--get-summarizer-parameters :and-return-value
'((insert . t)))
(call-interactively #'kagi-summarize-buffer) (call-interactively #'kagi-summarize-buffer)
(expect #'kagi-summarize :to-have-been-called) (expect #'kagi-summarize :to-have-been-called)
(expect #'kagi--display-summary :not :to-have-been-called) (expect #'kagi--display-summary :not :to-have-been-called)
(expect #'kagi--insert-summary :to-have-been-called)) (expect #'kagi--insert-summary :to-have-been-called))
(it "passes arguments to kagi-summary" (it "passes arguments to kagi-summary"
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(t lang bram random maybe)) (spy-on #'kagi--get-summarizer-parameters :and-return-value
'((insert . t)
(language . lang)
(engine . bram)
(format . random)
(no-cache . maybe)))
(call-interactively #'kagi-summarize-buffer) (call-interactively #'kagi-summarize-buffer)
(expect #'kagi-summarize :to-have-been-called) (expect #'kagi-summarize :to-have-been-called)
(expect #'kagi--display-summary :not :to-have-been-called) (expect #'kagi--display-summary :not :to-have-been-called)
@ -449,7 +455,12 @@ https://www.example.com"
(before-each (before-each
(spy-on #'region-beginning) (spy-on #'region-beginning)
(spy-on #'region-end) (spy-on #'region-end)
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(lang bram random maybe)) (spy-on #'kagi--get-summarizer-parameters :and-return-value
'((insert . t)
(language . lang)
(engine . bram)
(format . random)
(no-cache . maybe)))
(spy-on #'kagi-summarize :and-return-value dummy-output) (spy-on #'kagi-summarize :and-return-value dummy-output)
(spy-on #'buffer-name :and-return-value "buffer-name") (spy-on #'buffer-name :and-return-value "buffer-name")
(spy-on #'buffer-substring-no-properties)) (spy-on #'buffer-substring-no-properties))
@ -469,7 +480,12 @@ https://www.example.com"
(before-each (before-each
(spy-on #'kagi-summarize :and-return-value dummy-output) (spy-on #'kagi-summarize :and-return-value dummy-output)
(spy-on #'read-string :and-return-value "https://www.example.com") (spy-on #'read-string :and-return-value "https://www.example.com")
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(nil lang bram random)) (spy-on #'kagi--get-summarizer-parameters :and-return-value
'((insert . nil)
(language . lang)
(engine . bram)
(format . random)
(no-cache . maybe)))
(spy-on #'kagi--insert-summary)) (spy-on #'kagi--insert-summary))
(it "passes arguments to kagi-summary" (it "passes arguments to kagi-summary"
(call-interactively #'kagi-summarize-url) (call-interactively #'kagi-summarize-url)
@ -510,6 +526,13 @@ https://www.example.com"
(kagi-summarize-url "https://www.example.com" t) (kagi-summarize-url "https://www.example.com" t)
(expect #'kagi--display-summary :not :to-have-been-called) (expect #'kagi--display-summary :not :to-have-been-called)
(expect #'kagi--insert-summary :to-have-been-called) (expect #'kagi--insert-summary :to-have-been-called)
(kagi-test--expect-arg #'kagi--insert-summary 0 :to-equal dummy-output))
(it "inserts a summary when requested interactively"
(spy-on #'kagi--get-summarizer-parameters :and-return-value
'((insert . t)))
(call-interactively #'kagi-summarize-url)
(expect #'kagi--display-summary :not :to-have-been-called)
(expect #'kagi--insert-summary :to-have-been-called)
(kagi-test--expect-arg #'kagi--insert-summary 0 :to-equal dummy-output))))) (kagi-test--expect-arg #'kagi--insert-summary 0 :to-equal dummy-output)))))
;;; kagi-test.el ends here ;;; kagi-test.el ends here

117
kagi.el
View file

@ -679,45 +679,45 @@ to insert when the region is highlighted. Therefore, PROMPTS is a
list of items that can be prompted interactively. It is list of items that can be prompted interactively. It is
a (possibly empty) list with possible elements \\='prompt-for-insert a (possibly empty) list with possible elements \\='prompt-for-insert
or \\='prompt-for-no-cache." or \\='prompt-for-no-cache."
(append (list
(when (seq-contains-p prompts 'prompt-for-insert) (cons 'insert
(list (and (seq-contains-p prompts 'prompt-for-insert)
(and (equal current-prefix-arg '(4)) (equal current-prefix-arg '(4))
(not buffer-read-only) (not buffer-read-only)
(y-or-n-p "Insert summary at point?")))) (y-or-n-p "Insert summary at point?")))
(list (cons 'language
(when (equal current-prefix-arg '(4)) (when (equal current-prefix-arg '(4))
(let ((language-table (mapcar (lambda (lang) (let ((language-table (mapcar (lambda (lang)
(cons (cons
(format "%s" (car lang)) (format "%s" (car lang))
(cdr lang))) (cdr lang)))
kagi--summarizer-languages))) kagi--summarizer-languages)))
(alist-get (alist-get
(completing-read (format-prompt "Output language" "") (completing-read (format-prompt "Output language" "")
language-table nil t nil kagi--language-history) language-table nil t nil kagi--language-history)
language-table language-table
(or kagi-summarizer-default-language "EN") (or kagi-summarizer-default-language "EN")
nil nil
#'string=)))) #'string=))))
(list (cons 'engine
(when (equal current-prefix-arg '(4)) (when (equal current-prefix-arg '(4))
(completing-read (format-prompt "Engine" "") (completing-read (format-prompt "Engine" "")
kagi--summarizer-engines nil t kagi-summarizer-engine))) kagi--summarizer-engines nil t kagi-summarizer-engine)))
(list (cons 'format
(when (equal current-prefix-arg '(4)) (when (equal current-prefix-arg '(4))
(let ((summary-formats '(("Summary" . summary) (let ((summary-formats '(("Summary" . summary)
("Bullet-list" . takeaway)))) ("Bullet-list" . takeaway))))
(alist-get (alist-get
(completing-read (format-prompt "Summary format" "") (completing-read (format-prompt "Summary format" "")
summary-formats nil t) summary-formats nil t)
summary-formats summary-formats
kagi-summarizer-default-summary-format kagi-summarizer-default-summary-format
nil nil
#'string=)))) #'string=))))
(list (cons 'no-cache
(and (seq-contains-p prompts 'prompt-for-no-cache) (and (seq-contains-p prompts 'prompt-for-no-cache)
(equal current-prefix-arg '(4)) (equal current-prefix-arg '(4))
(y-or-n-p "Cache the result?"))))) (y-or-n-p "Cache the result?")))))
;;;###autoload ;;;###autoload
(defun kagi-summarize-buffer (buffer &optional insert language engine format no-cache interactive-p) (defun kagi-summarize-buffer (buffer &optional insert language engine format no-cache interactive-p)
@ -750,11 +750,20 @@ target LANGUAGE to use, which summarizer ENGINE to use and which
summary FORMAT to use. summary FORMAT to use.
INTERACTIVE-P is t when called interactively." INTERACTIVE-P is t when called interactively."
(interactive (append (interactive (let ((buffer (read-buffer (format-prompt "Buffer" "") nil t))
(list (read-buffer (format-prompt "Buffer" "") nil t)) (parameters (kagi--get-summarizer-parameters
(kagi--get-summarizer-parameters '(prompt-for-insert '(prompt-for-insert
prompt-for-no-cache)) prompt-for-no-cache))))
(list t))) (list
buffer
;; optional parameters
(map-elt parameters 'insert)
(map-elt parameters 'language)
(map-elt parameters 'engine)
(map-elt parameters 'format)
(map-elt parameters 'no-cache)
;; interactive-p
t)))
(let ((summary (with-current-buffer buffer (let ((summary (with-current-buffer buffer
(kagi-summarize (buffer-string) language engine format no-cache))) (kagi-summarize (buffer-string) language engine format no-cache)))
(summary-buffer-name (with-current-buffer buffer (summary-buffer-name (with-current-buffer buffer
@ -787,9 +796,12 @@ content.
With a single universal prefix argument (`C-u'), the user is With a single universal prefix argument (`C-u'), the user is
prompted for which target LANGUAGE to use, which summarizer prompted for which target LANGUAGE to use, which summarizer
ENGINE to use and which summary FORMAT to use." ENGINE to use and which summary FORMAT to use."
(interactive (append (interactive (let ((parameters (kagi--get-summarizer-parameters '(prompt-for-no-cache))))
(list (region-beginning) (region-end)) (list (region-beginning) (region-end)
(kagi--get-summarizer-parameters '(prompt-for-no-cache)))) (map-elt parameters 'language)
(map-elt parameters 'engine)
(map-elt parameters 'format)
(map-elt parameters 'no-cache))))
(kagi--display-summary (kagi--display-summary
(kagi-summarize (buffer-substring-no-properties begin end) (kagi-summarize (buffer-substring-no-properties begin end)
language language
@ -834,9 +846,14 @@ types are supported:
- YouTube URLs - YouTube URLs
- Scanned PDFs and images (OCR)" - Scanned PDFs and images (OCR)"
(interactive (interactive
(cons (let ((url (read-string (format-prompt "URL" "")))
(read-string (format-prompt "URL" "")) (parameters (kagi--get-summarizer-parameters '(prompt-for-insert))))
(kagi--get-summarizer-parameters '(prompt-for-insert)))) (list
url
(map-elt parameters 'insert)
(map-elt parameters 'language)
(map-elt parameters 'engine)
(map-elt parameters 'format))))
(let ((summary (kagi-summarize url language engine format))) (let ((summary (kagi-summarize url language engine format)))
(if (and insert (not buffer-read-only)) (if (and insert (not buffer-read-only))
(kagi--insert-summary summary) (kagi--insert-summary summary)