Minor release: LLM-driven GUI personalization. The Web Modeling Editor can now adapt no-code GUI pages to individual user profiles with an LLM, model those profiles with a dedicated form editor and the modeling agent, and generate the web application together with one personalized variant per profile. Additive only: when a project defines no variants, generation is byte-for-byte the previous single-app behavior.
Highlights
- Per-profile GUI page variants: from the GrapesJS-based no-code editor you can auto-personalize a page for a user profile with an LLM. A new backend endpoint
POST /personalize-gui-pagetakes a page snapshot ({components, css}) plus a user-profile model and returns the same shape adapted in styling and wording, ready to be imported back as a page variant. The personalization logic lives in a dedicatedgui_personalization_utilsservice module (the router stays a thin HTTP layer) and its LLM system prompt is a versionable module constant. - Personalized web-application generation: the web-app generator can emit one complete app per version — a Base app plus one personalized variant per user profile — each into its own profile-named subfolder of the output ZIP. A project with no variants generates exactly one app as before.
- User-profile modeling: a new form-based user-profile editor, plus modeling-agent support for creating and editing user-profile (
UserDiagram) models.
Fixes
- User-profile criterion parsing: a criterion typed as
age == 22is now split on the stored==operator instead of the first=(which previously captured= 22as the value and broke type conversion); blank criteria (e.g.age =) are skipped rather than materialized as empty-valued slots. - OCL evaluation on user profiles: constraints referencing an attribute left unset on a profile are skipped instead of building an invalid expression like
" >= 0 and <= 120"and crashing with a Pythoninvalid syntaxerror. - Backend cleanup: the personalization OpenAI model default is consolidated into a single
DEFAULT_OPENAI_MODELconstant, a stray debugprintand two dead branches removed, and the new parsing logic is covered by regression tests.
Frontend (via the submodule bump)
The frontend submodule moves to include the GUI-personalization UI: the user-profile form editor, per-profile page variants with switching, web-app version selection in the generation dialog, and review cleanups (shared variant types, HTML-escaped page/profile names, non-silent generation-flush timeout).