diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-01 20:04:11 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-01 20:04:11 +0200 |
| commit | e3421bd781a103d3495a8a741bc04541ada59c6d (patch) | |
| tree | d1d70b0fe64889308716c783e303248aaedda3fb | |
| parent | 2fae45408489594d009215c82c2ca9acdc00e394 (diff) | |
| download | llamachat-24f6a6f40dc30eb604427f49084da79ace383841.tar.gz llamachat-24f6a6f40dc30eb604427f49084da79ace383841.zip | |
chore: release 0.3.0v0.3.0
| -rw-r--r-- | CHANGELOG.md | 49 | ||||
| -rw-r--r-- | llamachat/__init__.py | 2 |
2 files changed, 44 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ddfc863..451092f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,51 @@ All notable changes to this project are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.3.0] - 2026-08-01 + +### Changed + +- `max_searches` now defaults to 2, up from 1. The empty-reply failure that + forced the lower cap has two causes, both now understood: the model was + never told its last search was spent, fixed below, and llama-server's + quantized KV cache degrades tool calling, which is a server setting rather + than something this client can control. With `f16` KV and the final-round + note, a question needing two searches answered 4 and 5 times out of 6 on + two runs, against 3 of 3 broken before. Single-search turns are solid, 6 + of 6. Lower it back to 1 when running a quantized KV cache, or if empty + replies are more annoying than a second search is useful. + +### Fixed + +- A turn that used its last search no longer ends with an empty reply. The + final round's tool result now states that the search tool is gone and the + answer is due. Withdrawing the tool schema was invisible to the model, + which asked for another search regardless: this model's chat template + defines its own `<tool_call><function=...>` XML dialect, so the request + came back either as literal text in the reply or buried in the thinking + block, and in both cases the reply itself was empty. The note rides on the + tool result because a trailing system message is rejected outright, the + template raising "System message must be at the beginning". Measured on + the question that first showed the bug: 3 of 5 turns broken before, 5 of + 5 answered after. ### Added +- Conversation titles are written by the model. Once a reply finishes in a + session still carrying its placeholder title, the exchange is sent back in + a short side request asking for a title of at most six words, and the + answer replaces the opening words of the question the entry was created + with. The trigger is the placeholder rather than the turn number, so a + first reply that comes back empty does not forfeit titling for the rest of + the session, and a one-shot window, which appends every question to the + same entry until New is pressed, is titled from the question that actually + got answered. It runs on its own thread and is silent about failure: an + unreachable router or an unusable reply leaves the original title in place + rather than raising. + Thinking is disabled for that request through the chat template, since a + reasoning model otherwise spends the whole token budget on its thoughts + and returns an empty answer. + - Web search through a SearXNG instance. The model is offered a `web_search` tool and decides for itself when a question needs current information; llamachat runs the query and feeds the results back. Off by default, and @@ -22,11 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Six configuration keys: `search_enabled`, `search_url`, `search_results`, `search_snippet_chars`, `search_timeout` and `max_searches`. Searches are capped per turn, after which the tool is withdrawn and the model must - answer. The cap defaults to 1: a second tool call, issued once the model - has seen the first results, comes back as literal `<tool_call>` text - rather than a structured call, and a turn that ends on one leaves the - reply empty. Raise it when the model and llama.cpp build handle - follow-up calls. + answer. - Searches are stored per message in a new `searches` column, so reopening a conversation still shows what was looked up. They are deliberately kept out of the full-text index, or web text nobody wrote would compete with diff --git a/llamachat/__init__.py b/llamachat/__init__.py index 9dbd5c5..04fc36e 100644 --- a/llamachat/__init__.py +++ b/llamachat/__init__.py @@ -12,4 +12,4 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -__version__ = "0.2.1" +__version__ = "0.3.0" |
