Commit graph

350 commits

Author SHA1 Message Date
Daniel
d790d427ac feat: saved chats grouped by recency, a visible sidebar toggle, and acknowledgements answered cheaply
Saved chats
Grouped the way Open WebUI groups them: Pinned, Today, Yesterday, Previous 3
days, Previous 7 days, Previous 30 days, then calendar months (with the year
once it is not the current one). Chats with no usable timestamp land in Undated
rather than disappearing.

Sidebar toggle
The collapse button used <i class="fas fa-sidebar">, which is a Font Awesome PRO
icon; on the Free 6.5.0 build this app loads it rendered nothing, so the toggle
has been an invisible button since it shipped. It now uses fa-table-columns,
keeps aria-expanded/aria-controls in sync, flips its label between "Hide saved
chats" and "Show saved chats" so the collapsed state is escapable, and animates.

Acknowledgements
"Окей", "Nice", "Perfect", "gracias" and friends now get the existing
"What clinical question would you like me to look up?" reply instead of a
retrieval and a paid generation. "yes", "sure", "no" and "more" are deliberately
excluded: answers end by offering more detail, so those must still be answered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkfrkQwA4YGrGw9LZSpeAq
2026-09-09 18:59:45 +02:00
Daniel
d04a3fe53b fix: translate as HTML so tables and emphasis survive; stop repeat image generation
Translation formatting
LibreTranslate's text mode destroys markdown syntax. Verified against the live
container: table pipes come back as "←", the |---| delimiter row is translated
as prose ("Silencio."), and "**bold**" returns as "** bold**" which no longer
renders. Its html mode leaves tags — and bare [n] markers — completely intact.
Messages and the patient take home are now rendered to HTML, simplified (maths
and UI chrome flattened to text), and translated as HTML. Citation chips are
re-linked from the returned markers afterwards, which is the step the original
html path was missing. A text-mode fallback remains for builds that reject html.

Repeat image generation
Typing "Окей" or "Nice" after an image turn produced another image every time:
the model saw its own "I'll generate an educational image…" in the history and
repeated it. Recognising acknowledgements in every language is not possible, so
the rule is inverted — a short follow-up (<=3 words) that mentions nothing about
a picture does not get the image tool offered at all when the previous assistant
turn produced an image. Terse repeat requests ("again", "ещё", "another one")
still work. The worst case is that a terse question is answered in text.

In-chat images
Generated images render as a 320x240 thumbnail instead of filling the bubble,
and the image itself opens the full-resolution preview.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkfrkQwA4YGrGw9LZSpeAq
2026-09-09 18:49:58 +02:00
Daniel
4d92488f0c fix: translated answers keep their source chips; the patient take home can be translated
Translation
- Stop scrubbing markdown before sending it to LibreTranslate. The scrub
  deleted ordered-list numbering ("1. Give amoxicillin" -> "Give amoxicillin"),
  flattened tables into ambiguous whitespace and ate underscores inside
  identifiers. Raw markdown now goes to the translator unchanged.
- Render the translation through the same markdown pipeline as the original
  bubble, with the message's own sources, so [n] markers come back as the usual
  clickable .assistant-cite chips instead of escaped literal text. Headings,
  lists and tables survive with them.
- When the translator drops citation markers, surface the affected sources in a
  recovery block rather than letting the evidence disappear.
- Image cards are live nodes: they are now re-attached on every path out of a
  translation (success, failure and Show original), so a failed translation no
  longer silently removes a generating image from the message.

Patient take home
- Add a language selector to the take-home modal, reusing the existing
  /translate endpoint and offering only what the local LibreTranslate reports.
- Copy, Export and Email carry what the caregiver is actually reading; the
  original stays canonical behind "Original".

Conversation budget
- The admin field no longer prefills with the environment value, which turned
  the next Save into an accidental override and made the documented "leave
  empty to use the environment" path unreachable. The effective limit is shown
  as a placeholder instead.
- Report source 'default' honestly instead of naming an unset env var.
- The load-failure notice now lands on the <p> instead of an <input>'s
  textContent, where it rendered nothing.
- One validator for the budget everywhere: conversationLimit() replaces a
  parseInt that accepted "120000abc".

Other
- /assistant is addressed by its URL, not by ped_last_tab, so "/" no longer
  reopens the assistant; the URL follows tab changes and Back leaves it.
- Remove the dead DeepL path (it referenced an undefined DEEPL_BASES) and stop
  offering admins a provider the server silently ignores.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkfrkQwA4YGrGw9LZSpeAq
2026-09-09 18:40:23 +02:00
Daniel
9a42b96ec9 feat: admin controls the conversation budget — saved override wins over CLINICAL_ASSISTANT_CONVERSATION_CHARS, validated 1000-1000000, empty falls back to env
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 58s
Forgejo Android APK / Build signed APK (push) Successful in 2m7s
2026-09-09 17:49:57 +02:00
Daniel
598731e170 fix: conversation budget is env-only — admin panel shows CLINICAL_ASSISTANT_CONVERSATION_CHARS read-only and never saves the key; server ignores saved overrides
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 48s
Forgejo Android APK / Build signed APK (push) Successful in 2m17s
2026-09-09 17:32:15 +02:00
Daniel
1267d1b7fc fix: login screen — remove Download Android app (APK) link and About Pediatric Clinical Tools block
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 55s
Forgejo Android APK / Build signed APK (push) Successful in 2m22s
2026-09-09 16:37:47 +02:00
Daniel
e1f1a58917 fix: Download transcript stays in the toolbar with its download icon (no empty round space); drawer keeps plain text Go back only
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 46s
Forgejo Android APK / Build signed APK (push) Successful in 2m3s
2026-09-09 15:37:21 +02:00
Daniel
fe102d64b4 fix: mobile drawer is a plain text menu (no icons) — Go back and Download transcript rows; toolbar download hidden on mobile 2026-09-09 15:21:18 +02:00
Daniel
ff8c1132c1 feat: ChatGPT/OWUI mobile assistant — viewport-locked overlay with drawer (no disjoint scrolling), plain rows without chat icons, ⋮ options; desktop collapsible saved-chats rail
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 49s
Forgejo Android APK / Build signed APK (push) Successful in 2m15s
2026-09-09 15:06:47 +02:00
Daniel
b115491858 feat: the assistant is its own full page at /assistant — no underlying app scrolling, back returns home; menu links to it
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 46s
Forgejo Android APK / Build signed APK (push) Successful in 2m9s
2026-09-09 13:36:30 +02:00
Daniel
118c6cfb64 fix: hardened image-done handling with visible errors; plain-text translation; mobile menu no-icons truncation
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 55s
Forgejo Android APK / Build signed APK (push) Successful in 2m2s
2026-09-09 12:34:28 +02:00
Daniel
094de9ebd1 fix: mobile menu — no icons, hard-truncated titles within the drawer width, ⋮ always visible without horizontal scroll; translation uses the reliable plain-text path
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 50s
Forgejo Android APK / Build signed APK (push) Successful in 2m11s
2026-09-09 12:29:37 +02:00
Daniel
ec4f1905de fix: DOMParser guard in translation simplification; translate test contract updated to html mode
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 51s
Forgejo Android APK / Build signed APK (push) Successful in 1m58s
2026-09-09 05:09:02 +02:00
Daniel
07af95b89a feat: device TTS preferred in voice mode with model fallback; permanent src-garbage scrub; simplified-HTML translation with text fallback; New chat closes the drawer; real FA icons; audio unlock restored 2026-09-09 05:06:40 +02:00
Daniel
3a55937177 fix: real FA icon on saved-chat rows (no more \\f086 leak); rows truncate to the drawer width on mobile 2026-09-09 05:02:19 +02:00
Daniel
143030bf00 fix: usable mobile chat menu — left drawer with close X and backdrop, main-menu style rows, internal message scroll to the question, taller sources scroll; context metadata line removed from image cards 2026-09-09 04:39:20 +02:00
Daniel
653d6d6ed6 fix: strip [src]/[source] placeholder tokens from rendered answers instead of showing src
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 59s
Forgejo Android APK / Build signed APK (push) Successful in 2m15s
2026-09-09 04:22:15 +02:00
Daniel
2f7d929464 fix: translation 400 — translate raw markdown as text and re-render; download buttons on previews and library items; Done state on image completion; mic mirrors the working dictation flow; send→stop icon; grouped bottom-left tools
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 46s
Forgejo Android APK / Build signed APK (push) Successful in 2m4s
2026-09-09 04:17:18 +02:00
Daniel
d6476f99d9 fix: send button morphs into a clickable STOP icon while working (no more disabled spinner); grouped bottom-left tools; silent-recording message; completed images auto-join the library; transient image-status retries 2026-09-09 04:12:30 +02:00
Daniel
a4945d4d1d fix: completed images auto-join the library; chat image cards retry transient status failures instead of freezing 2026-09-09 04:09:29 +02:00
Daniel
fe63014a1f feat: image generation everywhere — deterministic fallback when the model writes text, unbounded completion poll, No-chat default with description-only generation, context passed with every image job; stop-icon send button; attach/mic bottom-left composer; single-model selectors hidden; admin image allowlist from discovered models; PDF take-home export; new-chat confirm removed; sources same-height column with internal scroll 2026-09-09 04:04:00 +02:00
Daniel
5e6de10d0a fix: delegated model-selection persistence, admin-settable conversation budget (DB overrides env), unbounded image poll 2026-09-09 03:20:21 +02:00
Daniel
ddc835b952 feat: visible Saved indicator under the composer — chats are autosaved, now you can see it 2026-09-09 03:15:21 +02:00
Daniel
e52fa86ad7 feat: send button morphs into a red stop while the assistant works (Open WebUI style); cancel-search button removed 2026-09-09 03:13:39 +02:00
Daniel
8a03fbb689 fix: voice — recorder codec chain with iOS mp4 fallback, audio-session unlock on voice gestures, unbounded image poll until completion 2026-09-09 03:11:43 +02:00
Daniel
b21080f2a6 feat: admin allowlists for chat and image models (users see the model pill once configured) 2026-09-09 02:58:30 +02:00
Daniel
73955dd5f9 feat: model selection in chat (composer pill + popup image model), deterministic image dispatch when the model writes text instead of calling the tool, markdown-rendered email, OWUI stacked composer, left mobile drawer, Go back in topbar, DeepL removed, image history inside the Create image popup 2026-09-09 02:55:28 +02:00
Daniel
982a089fcb fix: authHeaders must include Content-Type — Express never parsed JSON bodies, causing empty "Question is required" on every chat send. Also: Learning Hub back in the main menu, sources-only right column, image gallery as the user library with poll+preview, queued job reference handling 2026-09-09 02:13:17 +02:00
Daniel
7fdbcd51e6 feat: ChatGPT-style chat list — abbreviated rows with relative dates, pinned-first ordering, ⋮ menu (Rename/Pin/Export/Delete); clinical context always on; warn-only budget; mic live-transcript fallback; learning-hub page mode; composer autosize; include-context icon fix 2026-09-09 00:14:34 +02:00
Daniel
23788d63c5 feat: Open WebUI presentation — unboxed assistant messages, hairline OWUI tables without card containers
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 54s
Forgejo Android APK / Build signed APK (push) Successful in 2m2s
2026-09-08 23:46:29 +02:00
Daniel
bb218750d9 feat: Create image tool at rail top (describe or pick a chat), Images gallery of past creations, ChatGPT-style composer icons (headset/mic/attach/send), example tap asks immediately 2026-09-08 23:40:53 +02:00
Daniel
309d85ae86 feat: ChatGPT-style mobile UI — slim top bar with saved-chats drawer, plain example prompts, floating pill composer 2026-09-08 23:15:24 +02:00
Daniel
cc9188fa08 fix: OWUI hover-delete on saved-chat rows (row click opens, trash icon deletes)
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 56s
Forgejo Android APK / Build signed APK (push) Successful in 2m3s
2026-09-08 22:45:13 +02:00
Daniel
da86c7db79 fix: OWUI-style polish — fullscreen workspace replaces main menu, row-click saved chats (delete stays as hover), markdown-rendered patient handout, admin-only raw transcript, /api TTS URL, scrollable unclipped tables, action buttons hidden in exports, autosave-only copy 2026-09-08 22:41:08 +02:00
Daniel
2e0951995c fix: take-home and translate-languages fetch URLs must be /api-prefixed
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 48s
Forgejo Android APK / Build signed APK (push) Successful in 2m11s
2026-09-08 20:07:27 +02:00
Daniel
09a4e02e39 feat: patient take home (copy/export/email), composer mic dictation, voice conversation mode, provider-aware translate languages 2026-09-08 20:01:46 +02:00
Daniel
3626f590d8 fix: QA-found defect — streamed assistant rows missing Copy/Translate/Regenerate actions 2026-09-08 19:39:39 +02:00
Daniel
79de7ccddb fix: reviewer findings — mhchem macro wrapping, regenerate history dedupe, strict safe image allowlist, stale docs 2026-09-08 19:25:31 +02:00
Daniel
8b072496e2 feat: Open WebUI-style assistant workspace — 3-column layout, markdown/math/code/tables, autosave with images, translation (LibreTranslate+DeepL), citation modal, Learning Hub moved in, handoff removed 2026-09-08 18:52:35 +02:00
Daniel
17a0ebe68b fix: new-chat confirm uses the site dialog; remove assistant intro paragraph
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 24s
Forgejo Android APK / Build signed APK (push) Successful in 2m6s
2026-09-08 16:38:08 +02:00
Daniel
81abc60591 Merge branch 'fix/attach-images-20260907'
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 24s
Forgejo Android APK / Build signed APK (push) Successful in 2m13s
2026-09-08 15:53:05 +02:00
Daniel
94210ac0a1 feat: attach images to clinical search with strict validation and multimodal routing 2026-09-08 15:53:05 +02:00
Daniel
3464f2d456 fix: drop redundant Full conversation unchanged from image context label 2026-09-08 15:52:37 +02:00
Daniel
c237826ef6 feat: clinical handoff as the standard site modal, closes back to the chat
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 24s
Forgejo Android APK / Build signed APK (push) Successful in 1m59s
2026-09-07 21:10:23 +02:00
Daniel
be889567f5 fix: remove reopen-image-history UI, trim budget label, image-storage preflight now passes with scoped ListBucket 2026-09-07 21:05:55 +02:00
Daniel
f1ac24a17d fix: simple prompt editing (save + restore original only), live users search, straight responsive admin rows
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 22s
Forgejo Android APK / Build signed APK (push) Successful in 1m55s
2026-09-07 19:30:40 +02:00
Daniel
e7599128ec fix: separate Scribe/Clinical/Learning prompt sections; drop model classification entirely with scrub migration
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 26s
Forgejo Android APK / Build signed APK (push) Successful in 1m58s
2026-09-07 18:22:51 +02:00
Daniel
13fca7887d feat: unify Admin model/prompt UI — single prompt dropdown, two image-model dropdowns, searchable/scrollable users, remove classification/custom-add, consistent font, concise labels 2026-09-07 18:18:48 +02:00
Daniel
bb82295173 fix: single image-model dropdown applied to both workflows; concise budget labels 2026-09-07 17:58:28 +02:00
Daniel
6be2d1375a feat: integrate durable image jobs/private assets into current core 2026-09-07 16:53:42 +02:00