You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bumps version 1.7.2 → 1.7.3 and ships three fixes plus end-to-end
verification:
- Summary persistence on fresh PostgreSQL: dedup stale unique-index
definitions in shared SQLAlchemy metadata before CREATE TABLE, and
idempotently clear legacy colliding indexes. Resolves
DuplicateTable: relation "ix_chat_summary_chat_id" already exists
and the resulting ⚠️ Summary generated but was not persisted.
- Outlet summary reuse for idless plain-chat branches: when the outlet
request carries a chat_id but no stable message refs, read the active
DB branch and align the body via _compatible_db_branch_for_body_ref_fallback
so the generated summary can be persisted and reused.
- Reasoning-model inlet reuse (issue #98): new position-based fallback
(Path 3) accepts the snapshot when body and DB branches have equal
length and roles / tool_calls / tool_call_id match position-by-position.
DB messages with an output array are exempted from content comparison;
DB messages without output still require exact content equality
(fail-closed against edits).
- Path 3 mixed-id fix: process_messages_with_output only strips output
(not id), so real reasoning-chat bodies are mixed-id. The all-idless
guard was removed — reaching Path 3 already requires
_current_branch_refs(messages) is None upstream, so the guard was both
wrong and redundant.
- Path 3 diagnostic logging: when Path 3 is eligible but a per-position
check fails, debug_mode now logs the first failing index and mismatched
field (role / tool_calls / tool_call_id / content-on-no-output).
- End-to-end verification: test_issue98_e2e.py inlines
convert_output_to_messages, process_messages_with_output, and
reconcile_tool_pairs copied verbatim from the OpenWebUI main branch.
The body builder mirrors the real pipeline exactly (genuinely mixed-id),
replaying OpenAI-compatible / Ollama / llama.cpp / tool-call reasoning
chats through the full inlet() entry point. 15/15 e2e tests pass.
Also adds v1.7.3 release notes (EN + CN), updates README/README_CN, and
removes the temporary _diag.py diagnostic script.
@@ -28,6 +28,15 @@ When the selection dialog opens, search for this plugin, check it, and continue.
28
28
-**Protected-head tracking**: Summary rows remember how many leading messages were kept outside the summary. If the current `keep_first` policy no longer preserves those messages, the row is not reused as branch-valid coverage.
29
29
-**Safe upgrade behavior**: Legacy summaries without coverage metadata are not trusted as coverage. The first turn after upgrading may send more raw context until a branch-valid summary row is generated.
30
30
31
+
## What's new in 1.7.3
32
+
33
+
-**Summary persistence on fresh PostgreSQL**: Fixed `DuplicateTable: relation "ix_chat_summary_chat_id" already exists` and the resulting `⚠️ Summary generated but was not persisted`. The shared SQLAlchemy metadata is now deduplicated before `CREATE TABLE`, and legacy colliding indexes are cleared idempotently.
34
+
-**Outlet summary reuse for idless plain-chat branches**: When the outlet request carries a `chat_id` but no stable message refs, the filter now reads the active DB branch and aligns the body against it so the generated summary can be persisted and reused on subsequent turns.
35
+
-**Reasoning-model inlet reuse (issue #98)**: Reasoning models store folded `<details type="reasoning">` content in the DB, but the request body reconstructed by `process_messages_with_output` strips or re-tags the reasoning, so cached summaries were rejected every turn. A new position-based fallback (Path 3) accepts the snapshot when body and DB branches have equal length and roles / tool_calls / tool_call_id match position-by-position. DB messages with an `output` array are exempted from content comparison; DB messages without `output` still require exact content equality, so edited or tampered bodies are rejected.
36
+
-**Path 3 mixed-id fix**: `process_messages_with_output` only strips `output` (not `id`), so real reasoning-chat bodies are mixed-id — the all-idless guard was removed; Path 3 now accepts real reasoning chats.
37
+
-**Path 3 diagnostic logging**: when Path 3 is eligible but a per-position check fails, `debug_mode` now logs the first failing index and the mismatched field (role / tool_calls / tool_call_id / content), so silent rejections are observable.
38
+
-**End-to-end verification**: A new test module inlines `convert_output_to_messages`, `process_messages_with_output`, and `reconcile_tool_pairs` copied verbatim from the OpenWebUI main branch, and replays OpenAI-compatible / Ollama / llama.cpp / tool-call reasoning chats through the full `inlet()` entry point. The body builder mirrors the real pipeline exactly (genuinely mixed-id), with regression tests covering the mixed-id shape and Path 3 acceptance.
39
+
31
40
## What's new in 1.7.2
32
41
33
42
-**Summary injection safety guard**: Injected summaries now explicitly state that goals, open loops, and tool state inside the summary are historical context only, not new instructions.
@@ -221,6 +230,6 @@ If this plugin has been useful, a star on [OpenWebUI Extensions](https://github.
221
230
222
231
## Changelog
223
232
224
-
See [`v1.7.2` Release Notes](https://github.com/Fu-Jie/openwebui-extensions/blob/main/plugins/filters/async-context-compression/v1.7.2.md) for the release-specific summary.
233
+
See [`v1.7.3` Release Notes](https://github.com/Fu-Jie/openwebui-extensions/blob/main/plugins/filters/async-context-compression/v1.7.3.md) for the release-specific summary.
225
234
226
235
See the full history on GitHub: [OpenWebUI Extensions](https://github.com/Fu-Jie/openwebui-extensions)
0 commit comments