| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2025-03-14 | 11.6 kB | |
| Version v0.9.8 source code.tar.gz | 2025-03-14 | 135.8 kB | |
| Version v0.9.8 source code.zip | 2025-03-14 | 154.8 kB | |
| Totals: 3 Items | 302.2 kB | 0 | |
Version 0.9.8 adds support for new Gemini, Anthropic, OpenAI, Perplexity, and DeepSeek models, introduces LLM tool use/function calling, a redesign of gptel-menu, includes new customization hooks, dry-run options and refined settings, improvements to the rewrite feature and control of LLM “reasoning” content.
Breaking changes
-
gemini-prohas been removed from the list of Gemini models, as this model is no longer supported by the Gemini API. -
Sending an active region in Org mode will now apply Org mode-specific rules to the text, such as branching context.
-
The following obsolete variables and functions have been removed:
gptel-send-menu: Usegptel-menuinstead.gptel-host: Usegptel-make-openaiinstead.gptel-playback: Usegptel-streaminstead.gptel--debug: Usegptel-log-levelinstead.
New models and backends
-
Add support for several new Gemini models including
gemini-2.0-flash,gemini-2.0-pro-expandgemini-2.0-flash-thinking-exp, among others. -
Add support for the Anthropic model
claude-3-7-sonnet-20250219, including its “reasoning” output. -
Add support for OpenAI’s
o1,o3-miniandgpt-4.5-previewmodels. -
Add support for Perplexity. While gptel supported Perplexity in earlier releases by reusing its OpenAI support, there is now first class support for the Perplexity API, including citations.
-
Add support for DeepSeek. While gptel supported DeepSeek in earlier releases by reusing its OpenAI support, there is now first class support for the DeepSeek API, including support for handling “reasoning” output.
New features and UI changes
-
gptel-rewritenow supports iterating on responses. -
gptel supports the ability to simulate/dry-run requests so you can see exactly what will be sent. This payload preview can now be edited in place and the request continued.
-
Directories can now be added to gptel’s global context. Doing so will add all files in the directory recursively.
-
“Oneshot” settings: when using gptel’s Transient menus, request parameters, directives and tools can now be set for the next request only in addition to globally across the Emacs session and buffer-locally. This is useful for making one-off requests with different settings.
-
gptel-modecan now be used in all modes derived fromtext-mode. -
gptel now tries to handle LLM responses that are in mixed Org/Markdown markup correctly.
-
Add
gptel-org-convert-responseto toggle the automatic conversion of (possibly) Markdown-formatted LLM responses to Org markup where appropriate. -
You can now look up registered gptel backends using the
gptel-get-backendfunction. This is intended to make scripting and configuring gptel easier.gptel-get-backendis a generalized variable so you can (un)set backends withsetf. -
Tool use: gptel now supports LLM tool use, or function calling. Essentially you can equip the LLM with capabilities (such as filesystem access, web search, control of Emacs or introspection of Emacs’ state and more) that it can use to perform tasks for you. gptel runs these tools using argument values provided by the LLMs. This requires specifying tools, which are elisp functions with plain text descriptions of their arguments and results. gptel does not include any tools out of the box yet.
-
You can look up registered gptel tools using the
gptel-get-toolfunction. This is intended to make scripting and configuring gptel easier.gptel-get-toolis a generalized variable so you can (un)set tools withsetf. -
New hooks for customization:
gptel-prompt-filter-hookruns in a temporary buffer containing the text to be sent, before the full query is created. It can be used for arbitrary text transformations to the source text.gptel-post-request-hookruns after the request is sent, and (possibly) before any response is received. This is intended for preparatory/reset code.gptel-post-rewrite-hookruns after agptel-rewriterequest is successfully and fully received.
-
gptel-menuhas been redesigned. It now shows a verbose description of what will be sent and where the output will go. This is intended to provide clarity on gptel’s default prompting behavior, as well as the effect of the various prompt/response redirection it provides. Incompatible combinations of options are now disallowed. -
The spacing between the end of the prompt and the beginning of the response in buffers is now customizable via
gptel-response-separator, and can be any string. -
gptel-context-remove-allis now an interactive command. -
gptel now handles “reasoning” content produced by LLMs. Some LLMs include in their response a “thinking” or “reasoning” section. This text improves the quality of the LLM’s final output, but may not be interesting to you by itself. The new user option
gptel-include-reasoningcontrols whether and how gptel displays this content. -
(Anthropic API only) Some LLM backends can cache content sent to it by gptel, so that only the newly included part of the text needs to be processed on subsequent conversation turns. This results in faster and significantly cheaper processing. The new user option
gptel-cachecan be used to specify caching preferences for prompts, the system message and/or tool definitions. This is supported only by the Anthropic API right now. -
(Org mode) Org property drawers are now stripped from the prompt text before sending queries. You can control this behavior or specify additional Org elements to ignore via
gptel-org-ignore-elements. (For more complex pre-processing you can usegptel-prompt-filter-hook.)
Notable Bug fixes
- Fix response mix-up when running concurrent requests in Org mode buffers.
- gptel now works around an Org fontification bug where streaming responses in Org mode buffers sometimes caused source code blocks to remain unfontified.
Pull requests
- Fix bug where dry run updates status message by @daedsidog in https://github.com/karthink/gptel/pull/498
- README: add prefix string docs for gptel-org-branching-context by @erganemic in https://github.com/karthink/gptel/pull/499
- Fix typo by @gamboz in https://github.com/karthink/gptel/pull/505
- Possible bug fix 473 by @andrewdea in https://github.com/karthink/gptel/pull/490
- Support adding files in directories to context by @benthamite in https://github.com/karthink/gptel/pull/438
- Remove gptel-extensions package by @gavinhughes in https://github.com/karthink/gptel/pull/522
- Add windows platform check for the curl file size thresh by @AustinMooreT in https://github.com/karthink/gptel/pull/519
- chore: update gptel-openai.el by @eltociear in https://github.com/karthink/gptel/pull/535
- fix(private-gpt): passing system directive by @rosenstrauch in https://github.com/karthink/gptel/pull/531
- Add gemini-2.0-flash-thinking-exp by @jlcheng in https://github.com/karthink/gptel/pull/528
- Add support for OpenAI o1 model by @tillydray in https://github.com/karthink/gptel/pull/559
- Update examples by @Lyonsclay in https://github.com/karthink/gptel/pull/569
- Fix mark deactivation timing in gptel-rewrite by @ultronozm in https://github.com/karthink/gptel/pull/577
- Add gptel-perplexity backend by @pirminj in https://github.com/karthink/gptel/pull/581
- gptel: Use substitute-command-keys in context by @cashpw in https://github.com/karthink/gptel/pull/589
- Pass nil results through to model by @psionic-k in https://github.com/karthink/gptel/pull/596
- Parameters Required by @psionic-k in https://github.com/karthink/gptel/pull/600
- Variable number of newlines before responses by @psionic-k in https://github.com/karthink/gptel/pull/599
- Updates required Org version notice from 9.6.7 to 9.7 by @grettke in https://github.com/karthink/gptel/pull/602
- gptel-context: Use current buffer as default by @LemonBreezes in https://github.com/karthink/gptel/pull/595
- Improve robustness:
gptel-org--link-standalone-pby @tillydray in https://github.com/karthink/gptel/pull/594 - gptel: Make gptel-model variable definition dynamic by @pabl0 in https://github.com/karthink/gptel/pull/606
- gptel-transient: Improve directive/system message editing by @pabl0 in https://github.com/karthink/gptel/pull/616
- gptel-transient: (really) unmark before editing crowdsourced prompt by @pabl0 in https://github.com/karthink/gptel/pull/618
- Fix read-only behaviour in gptel--edit-directive by @pabl0 in https://github.com/karthink/gptel/pull/622
- gptel-transient: Improve parsing of crowdsourced prompts CSV file by @pabl0 in https://github.com/karthink/gptel/pull/615
- Fix type error in read_buffer tool use example by @m-n in https://github.com/karthink/gptel/pull/632
- Small documentation tweaks by @pabl0 in https://github.com/karthink/gptel/pull/625
- gptel-transient: Ensure user enters a number when prompted by @pabl0 in https://github.com/karthink/gptel/pull/637
- Update gptel-gemini.el models by @braun-steven in https://github.com/karthink/gptel/pull/639
- gptel-transient: Fix face related bug by @pabl0 in https://github.com/karthink/gptel/pull/638
- gptel-transient: Use proper ellipsis for consistent UI by @pabl0 in https://github.com/karthink/gptel/pull/640
- gptel-transient: Report what is being sent from kill-ring by @pabl0 in https://github.com/karthink/gptel/pull/642
- gptel-openai-extras: reasoning and deep-research perplexity models by @markus1189 in https://github.com/karthink/gptel/pull/664
- gptel: Prefer LLM terminology over GPT by @pabl0 in https://github.com/karthink/gptel/pull/635
- Add support for gpt-4.5-preview by @benthamite in https://github.com/karthink/gptel/pull/673
- Fix typo in docs by @markus1189 in https://github.com/karthink/gptel/pull/676
- NEWS: Use org comment by @pabl0 in https://github.com/karthink/gptel/pull/696
New Contributors
- @erganemic made their first contribution in https://github.com/karthink/gptel/pull/499
- @gamboz made their first contribution in https://github.com/karthink/gptel/pull/505
- @andrewdea made their first contribution in https://github.com/karthink/gptel/pull/490
- @gavinhughes made their first contribution in https://github.com/karthink/gptel/pull/522
- @AustinMooreT made their first contribution in https://github.com/karthink/gptel/pull/519
- @eltociear made their first contribution in https://github.com/karthink/gptel/pull/535
- @jlcheng made their first contribution in https://github.com/karthink/gptel/pull/528
- @Lyonsclay made their first contribution in https://github.com/karthink/gptel/pull/569
- @ultronozm made their first contribution in https://github.com/karthink/gptel/pull/577
- @pirminj made their first contribution in https://github.com/karthink/gptel/pull/581
- @grettke made their first contribution in https://github.com/karthink/gptel/pull/602
- @LemonBreezes made their first contribution in https://github.com/karthink/gptel/pull/595
- @m-n made their first contribution in https://github.com/karthink/gptel/pull/632
- @braun-steven made their first contribution in https://github.com/karthink/gptel/pull/639
- @markus1189 made their first contribution in https://github.com/karthink/gptel/pull/664
Full Changelog: https://github.com/karthink/gptel/compare/v0.9.7...v0.9.8