4.1 KiB
kagi.el README
Introduction
This Emacs package provides the following functionalities from the Kagi search engine:
- FastGPT
- Kagi's open source LLM offering, as a shell inspired by xenodium's chatgpt-shell.
- Universal Summarizer
- Summarizes texts, webpages, videos and more.
Both functions are accessed through an API.
Setup
- Create a Kagi account if you haven't done so already. An account is free, and comes with 100 trial searches.
- In your account settings, put a balance for the API part (note that this is a separate balance than the subscription). The recommendation is to start with a one-time charge of $5. A single query ranges from 1 to 5 cents typically, depending on the amount of tokens processed.
- In the API portal, create an API token. Put the result in
kagi-api-token
.
Commands
FastGPT
The FastGPT functionality has only one command: kagi-fastgpt-shell
. This opens a shell buffer in a new window where prompts can be typed.
Universal Summarizer
-
kagi-summarize-buffer
- Summarizes the content of a buffer and displays it in a separate buffer.
-
kagi-summarize-region
- Similarly, the text inside the region is summarized and shown in a separate buffer.
-
kagi-summarize-url
- Prompts for a URL of which a summary is composed and displayed.
Installation and configuration
kagi.el is not on MELPA (yet?), so for now only Git access is possible.
Clone with:
git clone https://codeberg.org/bram85/kagi.el.git /path/to/kagi.el
Note that kagi.el has a dependency on the shell-maker package, which is available on MELPA.
You way want to load and configure the package with use-package
, for example put the following in your Emacs init file:
(use-package kagi
:commands
kagi-fastgpt-shell
kagi-summarize-buffer
kagi-summarize-region
kagi-summarize-url
:ensure nil
:load-path "/path/to/kagi.el"
:custom
(kagi-api-token "ABCDEF")
;; or use a function, e.g. with the password-store package:
(kagi-api-token (lambda () (password-store-get "Kagi/API")))
;; summarizer settings
(kagi-api-summarizer-engine "cecil")
(kagi-api-summarize-default-language "EN")
:custom-face
;; kagi-code defaults to fixed-pitch, but can be overridden as
;; follows:
(kagi-code ((t (:inherit org-verbatim)))))
The token can be supplied directly as a string, but you could write a lambda to retrieve the token from a more secure location (e.g. with the combination of pass(1) and the password-store package that comes with it).
Embark integration
The kagi.el package can be integrated with Embark, to easily summarize a buffer, region or an URL. In order to be consistent with all keymaps, and to avoid clashes, the functionality is behind the K prefix key. Press K s to trigger the summarize functionality.
Add the following to your configuration to trigger summary functionality with key K s:
(defmacro embark-kagi-map (name function)
"Macro for defining a keymap for accessing Kagi functionality through Embark."
`(defvar-keymap ,name
:doc "Keymap for accessing Kagi functionality with Embark."
:parent nil
"s" #',function))
(embark-kagi-map embark-kagi-buffer-map kagi-summarize-buffer)
(keymap-set embark-buffer-map "K" embark-kagi-buffer-map)
(embark-kagi-map embark-kagi-region-map kagi-summarize-region)
(keymap-set embark-region-map "K" embark-kagi-region-map)
(embark-kagi-map embark-kagi-url-map kagi-summarize-url)
(keymap-set embark-url-map "K" embark-kagi-url-map)
References
- Kagi FastGPT API
- Kagi Universal Summarizer API
- xenodium's chatgpt-shell, which also provides shell-maker required by the FastGPT shell.