# OpenRath v1.2.2 Released July 5, 2026 (UTC+8). ## What changed v1.2.2 adds an optional LiteLLM adapter and a small set of session ergonomics, then hardens concurrency, compression, registry lifetime, and persistence round-trips. | Addition | Contract | | --- | --- | | `openrath[litellm]` | Registers `provider_kind="litellm"` for synchronous and streaming chat calls. | | `Session.text()` | Returns the latest non-empty assistant text, or `None`. | | `ChunkTable` sequence protocol | Supports `len(table)`, indexing, slicing, and iteration. | | Same-path file serialization | File read/write/list/exists operations using exactly the same path string share one resource lane. | | Compression guard | A response ending with `finish_reason="length"` raises instead of replacing history with a truncated summary. | ## Compatibility - LiteLLM remains optional. Selecting `provider_kind="litellm"` without the extra installed fails with an unknown provider-kind error. - A `ChunkTable` slice returns `tuple[ChunkRow, ...]`, not another `ChunkTable`. - `Session.text()` only reads assistant chunks. A compressed session contains one user chunk, so `compressed.text()` returns `None`. - `Session.__repr__` now includes a short UUID; repr is not a serialization format. - The session registry holds weak references. Applications must keep their own strong reference or persist sessions that must remain discoverable. Full code changes: [v1.2.1...v1.2.2](https://github.com/Rath-Team/OpenRath/compare/v1.2.1...v1.2.2).