Refactored language selection
Fallback to English if all else fails (invalid language given and an invalid default language code).
This commit is contained in:
parent
016e453238
commit
7d6f6f1cf1
2 changed files with 28 additions and 17 deletions
11
kagi-test.el
11
kagi-test.el
|
@ -254,7 +254,7 @@ https://www.example.com"
|
|||
(describe "kagi-summarize"
|
||||
:var ((kagi-summarizer-default-language))
|
||||
(before-each
|
||||
(setq kagi-summarizer-default-language "XY"))
|
||||
(setq kagi-summarizer-default-language "NL"))
|
||||
(it "returns a summary on minimal text input"
|
||||
(expect (kagi-summarize just-enough-text-input) :to-equal dummy-output))
|
||||
(it "makes exactly one API call"
|
||||
|
@ -287,11 +287,16 @@ https://www.example.com"
|
|||
(it "falls back to the default language for invalid language codes"
|
||||
(expect (kagi-summarize just-enough-text-input "VL") :to-equal dummy-output)
|
||||
(let ((args (car (spy-calls-args-for #'kagi--call-summarizer 0))))
|
||||
(expect (map-elt args "target_language") :to-equal "XY")))
|
||||
(expect (map-elt args "target_language") :to-equal "NL")))
|
||||
(it "falls back to the default language for invalid language names"
|
||||
(expect (kagi-summarize just-enough-text-input "Valyrian") :to-equal dummy-output)
|
||||
(let ((args (car (spy-calls-args-for #'kagi--call-summarizer 0))))
|
||||
(expect (map-elt args "target_language") :to-equal "XY")))
|
||||
(expect (map-elt args "target_language") :to-equal "NL")))
|
||||
(it "falls back to English if the default language is invalid"
|
||||
(setq kagi-summarizer-default-language "XY")
|
||||
(expect (kagi-summarize just-enough-text-input "Valyrian") :to-equal dummy-output)
|
||||
(let ((args (car (spy-calls-args-for #'kagi--call-summarizer 0))))
|
||||
(expect (map-elt args "target_language") :to-equal "EN")))
|
||||
(it "returns a summary for an HTTPS URL"
|
||||
(expect (kagi-summarize dummy-https-url) :to-equal dummy-output))
|
||||
(it "returns a summary for an uppercase HTTPS URL"
|
||||
|
|
32
kagi.el
32
kagi.el
|
@ -513,25 +513,31 @@ no issues."
|
|||
"Non-nil if string S is a URL."
|
||||
(string-match-p (rx (seq bos "http" (? "s") "://" (+ (not space)) eos)) s))
|
||||
|
||||
(defun kagi--valid-language-name-p (language)
|
||||
"Return non-nil if LANGUAGE is a valid language name."
|
||||
(and (stringp language)
|
||||
(map-elt kagi--summarizer-languages (capitalize language))))
|
||||
|
||||
(defun kagi--valid-language-code-p (language)
|
||||
"Return t if LANGUAGE is a valid two letter language code for the summarizer."
|
||||
(and (stringp language)
|
||||
(seq-contains-p
|
||||
(map-values kagi--summarizer-languages)
|
||||
(upcase language))))
|
||||
|
||||
(defun kagi--summarizer-determine-language (hint)
|
||||
"Determine the language for the summary given a language HINT.
|
||||
|
||||
The HINT may be a language code (e.g. `DE') or a language
|
||||
name (e.g. `GERMAN'). If as invalid hint is given, it falls back
|
||||
name (e.g. `German'). If as invalid hint is given, it falls back
|
||||
to `kagi-summarizer-default-language'."
|
||||
(if (stringp hint)
|
||||
(or
|
||||
;; check language code
|
||||
(map-elt kagi--summarizer-languages (capitalize hint))
|
||||
;; not a valid code, check it as a name
|
||||
(and (seq-contains-p
|
||||
(map-values kagi--summarizer-languages)
|
||||
(upcase hint))
|
||||
(upcase hint))
|
||||
;; neither valid code or name, fallback
|
||||
(cond
|
||||
((kagi--valid-language-code-p hint) (upcase hint))
|
||||
((kagi--valid-language-name-p hint)
|
||||
(map-elt kagi--summarizer-languages (capitalize hint)))
|
||||
((kagi--valid-language-code-p kagi-summarizer-default-language)
|
||||
kagi-summarizer-default-language)
|
||||
;; hint was nil or something else, fallback
|
||||
kagi-summarizer-default-language))
|
||||
(t "EN")))
|
||||
|
||||
(defun kagi-summarize (text-or-url &optional language engine format)
|
||||
"Return the summary of the given TEXT-OR-URL.
|
||||
|
|
Loading…
Reference in a new issue