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--insert-summary :not :to-have-been-called))
(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)
(expect #'kagi-summarize :to-have-been-called)
(expect #'kagi--display-summary :not :to-have-been-called)
(expect #'kagi--insert-summary :to-have-been-called))
(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)
(expect #'kagi-summarize :to-have-been-called)
(expect #'kagi--display-summary :not :to-have-been-called)
@ -449,7 +455,12 @@ https://www.example.com"
(before-each
(spy-on #'region-beginning)
(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 #'buffer-name :and-return-value "buffer-name")
(spy-on #'buffer-substring-no-properties))
@ -469,7 +480,12 @@ https://www.example.com"
(before-each
(spy-on #'kagi-summarize :and-return-value dummy-output)
(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))
(it "passes arguments to kagi-summary"
(call-interactively #'kagi-summarize-url)
@ -510,6 +526,13 @@ https://www.example.com"
(kagi-summarize-url "https://www.example.com" t)
(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))
(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.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
a (possibly empty) list with possible elements \\='prompt-for-insert
or \\='prompt-for-no-cache."
(append
(when (seq-contains-p prompts 'prompt-for-insert)
(list
(and (equal current-prefix-arg '(4))
(not buffer-read-only)
(y-or-n-p "Insert summary at point?"))))
(list
(when (equal current-prefix-arg '(4))
(let ((language-table (mapcar (lambda (lang)
(cons
(format "%s" (car lang))
(cdr lang)))
kagi--summarizer-languages)))
(alist-get
(completing-read (format-prompt "Output language" "")
language-table nil t nil kagi--language-history)
language-table
(or kagi-summarizer-default-language "EN")
nil
#'string=))))
(list
(when (equal current-prefix-arg '(4))
(completing-read (format-prompt "Engine" "")
kagi--summarizer-engines nil t kagi-summarizer-engine)))
(list
(when (equal current-prefix-arg '(4))
(let ((summary-formats '(("Summary" . summary)
("Bullet-list" . takeaway))))
(alist-get
(completing-read (format-prompt "Summary format" "")
summary-formats nil t)
summary-formats
kagi-summarizer-default-summary-format
nil
#'string=))))
(list
(and (seq-contains-p prompts 'prompt-for-no-cache)
(equal current-prefix-arg '(4))
(y-or-n-p "Cache the result?")))))
(list
(cons 'insert
(and (seq-contains-p prompts 'prompt-for-insert)
(equal current-prefix-arg '(4))
(not buffer-read-only)
(y-or-n-p "Insert summary at point?")))
(cons 'language
(when (equal current-prefix-arg '(4))
(let ((language-table (mapcar (lambda (lang)
(cons
(format "%s" (car lang))
(cdr lang)))
kagi--summarizer-languages)))
(alist-get
(completing-read (format-prompt "Output language" "")
language-table nil t nil kagi--language-history)
language-table
(or kagi-summarizer-default-language "EN")
nil
#'string=))))
(cons 'engine
(when (equal current-prefix-arg '(4))
(completing-read (format-prompt "Engine" "")
kagi--summarizer-engines nil t kagi-summarizer-engine)))
(cons 'format
(when (equal current-prefix-arg '(4))
(let ((summary-formats '(("Summary" . summary)
("Bullet-list" . takeaway))))
(alist-get
(completing-read (format-prompt "Summary format" "")
summary-formats nil t)
summary-formats
kagi-summarizer-default-summary-format
nil
#'string=))))
(cons 'no-cache
(and (seq-contains-p prompts 'prompt-for-no-cache)
(equal current-prefix-arg '(4))
(y-or-n-p "Cache the result?")))))
;;;###autoload
(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.
INTERACTIVE-P is t when called interactively."
(interactive (append
(list (read-buffer (format-prompt "Buffer" "") nil t))
(kagi--get-summarizer-parameters '(prompt-for-insert
prompt-for-no-cache))
(list t)))
(interactive (let ((buffer (read-buffer (format-prompt "Buffer" "") nil t))
(parameters (kagi--get-summarizer-parameters
'(prompt-for-insert
prompt-for-no-cache))))
(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
(kagi-summarize (buffer-string) language engine format no-cache)))
(summary-buffer-name (with-current-buffer buffer
@ -787,9 +796,12 @@ content.
With a single universal prefix argument (`C-u'), the user is
prompted for which target LANGUAGE to use, which summarizer
ENGINE to use and which summary FORMAT to use."
(interactive (append
(list (region-beginning) (region-end))
(kagi--get-summarizer-parameters '(prompt-for-no-cache))))
(interactive (let ((parameters (kagi--get-summarizer-parameters '(prompt-for-no-cache))))
(list (region-beginning) (region-end)
(map-elt parameters 'language)
(map-elt parameters 'engine)
(map-elt parameters 'format)
(map-elt parameters 'no-cache))))
(kagi--display-summary
(kagi-summarize (buffer-substring-no-properties begin end)
language
@ -834,9 +846,14 @@ types are supported:
- YouTube URLs
- Scanned PDFs and images (OCR)"
(interactive
(cons
(read-string (format-prompt "URL" ""))
(kagi--get-summarizer-parameters '(prompt-for-insert))))
(let ((url (read-string (format-prompt "URL" "")))
(parameters (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)))
(if (and insert (not buffer-read-only))
(kagi--insert-summary summary)