From 01a761a2ff0ef22b547a1a9670812c5b86e17de3 Mon Sep 17 00:00:00 2001 From: Bram Schoenmakers Date: Sun, 18 Feb 2024 20:19:44 +0100 Subject: [PATCH] Refactored summarizer engine selection and added tests --- kagi-test.el | 17 ++++++++++++++++- kagi.el | 16 +++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/kagi-test.el b/kagi-test.el index 41959c3..57e6bcc 100644 --- a/kagi-test.el +++ b/kagi-test.el @@ -304,6 +304,21 @@ https://www.example.com" (it "returns a summary for an HTTP URL" (expect (kagi-summarize dummy-http-url) :to-equal dummy-output)) (it "throws for an unsupported URL scheme" - (expect (kagi-summarize dummy-ftp-url) :to-throw))))) + (expect (kagi-summarize dummy-ftp-url) :to-throw)) + (it "return a summary for a valid engine with different capitalization" + (expect (kagi-summarize dummy-https-url nil "Daphne") :to-equal dummy-output) + (let ((args (car (spy-calls-args-for #'kagi--call-summarizer 0)))) + (expect (map-elt args "engine") :to-equal "daphne")) + ) + (it "uses kagi-summarizer-engine variable for invalid engine values" + (setq kagi-summarizer-engine "Daphne") + (expect (kagi-summarize dummy-https-url nil "bram") :to-equal dummy-output) + (let ((args (car (spy-calls-args-for #'kagi--call-summarizer 0)))) + (expect (map-elt args "engine") :to-equal "daphne"))) + (it "uses the cecil engine when an invalid engine is configured" + (setq kagi-summarizer-engine "steve") + (expect (kagi-summarize dummy-https-url) :to-equal dummy-output) + (let ((args (car (spy-calls-args-for #'kagi--call-summarizer 0)))) + (expect (map-elt args "engine") :to-equal "cecil")))))) ;;; kagi-test.el ends here diff --git a/kagi.el b/kagi.el index e150fd8..cbb8359 100644 --- a/kagi.el +++ b/kagi.el @@ -539,6 +539,18 @@ to `kagi-summarizer-default-language'." kagi-summarizer-default-language) (t "EN"))) +(defun kagi--valid-engine-p (engine) + "Return non-nil when the given ENGINE is valid." + (and (stringp engine) + (map-elt kagi--summarizer-engines (downcase engine)))) + +(defun kagi--summarizer-engine (hint) + "Return a valid engine name based on the name given in HINT." + (cond ((kagi--valid-engine-p hint) (downcase hint)) + ((kagi--valid-engine-p kagi-summarizer-engine) + (downcase kagi-summarizer-engine)) + (t "cecil"))) + (defun kagi-summarize (text-or-url &optional language engine format) "Return the summary of the given TEXT-OR-URL. @@ -554,9 +566,7 @@ of text and `takeaway' returns a bullet list." (let* ((kagi-summarizer-default-language (kagi--summarizer-determine-language language)) (kagi-summarizer-engine - (if (stringp engine) - (downcase engine) - kagi-summarizer-engine)) + (kagi--summarizer-engine engine)) (kagi-summarizer-default-summary-format format)) (if-let* ((response (if (kagi--url-p text-or-url) (kagi--call-url-summarizer text-or-url)