Skip to content

Fix/timestamps - #108

Merged
MegalithOfficial merged 4 commits into
LettuceAI:mainfrom
Husky110:fix/timestamps
Oct 16, 2026
Merged

MegalithOfficial merged 4 commits into
LettuceAI:mainfrom
Husky110:fix/timestamps

Conversation

@Husky110

Copy link
Copy Markdown
Collaborator

Release 2.2.6:

2.2.6 — Historical Companion Time & USC Lorebook Import

Released 2026-10-15

A companion's clock can now sit anywhere in history — freeze or tick it to a date before 1970 and it stays there instead of jumping back to today. Reasoning effort gains two higher levels, X-High and Max, and lorebooks exported in Lettuce's USC format import with their entries again.

Improvements

  • Higher reasoning effort levels. Reasoning effort adds two higher levels, X-High and Max, alongside Low, Medium, and High, shown wherever a provider or local engine supports effort-based reasoning. Whether a given model actually honours the higher levels depends on the provider. When no explicit thinking budget is set, each level maps to a higher default budget (X-High 32k, Max 64k tokens).

Bug Fixes

  • Pre-1970 companion time. Companion time awareness now honours a clock set before 1970, so a companion living in, say, 1305 keeps its in-game date instead of snapping back to the real system time. The fix carries through the whole effective timeline: message timestamps, memory "observed" times, soul-growth validity, scheduled notes, and the emotional and relationship state all stay on the companion's clock. Authored baseline soul facts stay in effect regardless of the date, and retrieved memories are shown to the model oldest-to-newest so it reads them as a chronology.
  • USC lorebook import. Importing a lorebook exported in Lettuce's own USC format now brings its entries in. The importer previously only understood the legacy WorldInfo/SillyTavern layout, so a USC file was imported as an empty lorebook; both formats are now detected and imported correctly, preserving titles, keywords, and ordering.

…meline

Time awareness stored the effective (in-game) clock as unsigned milliseconds,
so a frozen/ticking override set before 1970 (e.g. a companion living in 1508)
was rejected by as_u64() and silently snapped back to the real system time.
This threads i64 through the whole effective-time chain so negative (pre-epoch)
in-game times are preserved end to end.

- temporal: companion_effective_now, TimeOverride, TemporalRange, message and
  memory timestamp formatting and temporal-query parsing are signed; removed
  the .max(0) epoch clamps.
- companion state: emotional/relationship/continuity timestamps, soul-growth
  validity fields and the typed time-override preference are i64.
- storage: effective_at / observed_at and the scheduled-notes effective fields
  are signed on read, write and export/import; wall-clock and duration fields
  stay unsigned by design.
- authored/baseline soul facts are timeless (ALWAYS_EFFECTIVE_FROM) so a
  past-set companion keeps its personality; the sentinel is JS-safe for the
  frontend round-trip.
- memories are presented to the model oldest-to-newest by observed time.
- frontend schema: allow negative effective timestamps (drop nonnegative).
The lorebook importer only understood the flat WorldInfo/SillyTavern shape,
so a file exported in Lettuce's own USC format ({schema, kind, payload}) fed
its envelope to that parser, which found no top-level `entries` and silently
imported a lorebook with zero entries. Even the entry field names differ
(keywords vs keys, title vs name, camelCase vs snake_case).

lorebook_import now detects the USC envelope (is_usc_value) and unwraps it via
the existing parse_usc_value, mapping the payload to the lorebook and its
entries directly (title, keywords, alwaysActive, caseSensitive, priority and
displayOrder preserved; ids regenerated to avoid collisions on re-import).
Non-USC input still takes the WorldInfo path unchanged. Adds regression tests
for both formats.
Extends the reasoning effort control beyond Low/Medium/High with two higher
levels, X-High and Max, shown wherever a provider or local engine exposes
effort-based reasoning (the effort value is forwarded verbatim, so whether a
model honours the level is up to the provider).

- schema: reasoningEffort enum gains "xhigh" and "max"
- UI: both effort pickers (AdvancedModelSettingsForm dynamic + non-dynamic,
  EditModelPage) list the new levels; grids widen to six columns
- i18n: en/de labels and descriptions for the new levels (other locales fall
  back to English)
- controller + Rust resolve_reasoning_budget: default thinking budgets extended
  to xhigh 32768 and max 65536, kept in sync on both sides
Covers the 2.2.6 release: pre-1970 companion time, USC lorebook import, and
the new X-High / Max reasoning effort levels.
@MegalithOfficial
MegalithOfficial merged commit 02c723d into LettuceAI:main Oct 16, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants