From 0447b84596da58f640be7d0654928e7eaf152cd9 Mon Sep 17 00:00:00 2001 From: OOKOWUOR Date: Tue, 10 Feb 2026 20:48:46 +0300 Subject: [PATCH] Hover effect and Data Anonymization module --- WWW/Image1.PNG | Bin 0 -> 20076 bytes WWW/Image2.PNG | Bin 0 -> 18448 bytes WWW/Image3.PNG | Bin 0 -> 121236 bytes WWW/Image4.PNG | Bin 0 -> 41052 bytes WWW/anon_assets/custom.css | 290 +++++ WWW/clipboard.min.js | 7 + WWW/styles.css | 671 ++++++---- modules/anonymization_functions.R | 129 ++ modules/mod_quant_anonymization.R | 362 +++++ server.R | 1468 ++++++++++----------- server/anon/server_module_quant.R | 1687 ++++++++++++++++++++++++ server/deep_learning.R | 2028 ++++++++++++++--------------- server/header_footer_configs.R | 188 +-- server/load_libraries.R | 19 + static_files/labelling_file.xlsx | Bin 1177355 -> 1347905 bytes ui.R | 232 ++-- ui/anonymization_ui.R | 14 + ui/dashboard_body.R | 231 ++-- ui/load_r_packages.R | 20 +- ui/sidebar_hover_collapse.R | 175 +++ users_db/users.sqlite | Bin 12288 -> 20480 bytes 21 files changed, 5263 insertions(+), 2258 deletions(-) create mode 100644 WWW/Image1.PNG create mode 100644 WWW/Image2.PNG create mode 100644 WWW/Image3.PNG create mode 100644 WWW/Image4.PNG create mode 100644 WWW/anon_assets/custom.css create mode 100644 WWW/clipboard.min.js create mode 100644 modules/anonymization_functions.R create mode 100644 modules/mod_quant_anonymization.R create mode 100644 server/anon/server_module_quant.R create mode 100644 server/load_libraries.R create mode 100644 ui/anonymization_ui.R create mode 100644 ui/sidebar_hover_collapse.R diff --git a/WWW/Image1.PNG b/WWW/Image1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f172327706bebc6322cbf3c794c0546bf0154a3e GIT binary patch literal 20076 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%0A%yXi>- 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℞(aakAgW3603C`4pQ6X|ZUw2N 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%0AleA60dJ2}jXxVwn=PB>Mz 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 literal 0 HcmV?d00001 diff --git a/WWW/Image4.PNG b/WWW/Image4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e7e1d0530237e96e6a31b12bdda7d26a69ad3ec6 GIT binary patch literal 41052 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 N002ovPDHLkV1l9~t>ORx literal 0 HcmV?d00001 diff --git a/WWW/anon_assets/custom.css b/WWW/anon_assets/custom.css new file mode 100644 index 0000000..b607588 --- /dev/null +++ b/WWW/anon_assets/custom.css @@ -0,0 +1,290 @@ +/* custom.css */ + +/* ----------------------------------------------------------------------- + 0) Base reset + scope + ----------------------------------------------------------------------- */ +.anon-root, +.anon-root *, +.anon-root *::before, +.anon-root *::after { + box-sizing: border-box; +} + +.anon-root { + width: 100%; + min-height: 85vh; + position: relative; + overflow: hidden; /* keep module self-contained */ + font-family: Arial, sans-serif; + padding: 0 !important; + margin: 0 !important; +} + +/* Allow children to shrink properly (important for scroll containers) */ +.anon-root .container-fluid, +.anon-root .row, +.anon-root [class*="col-"], +.anon-root .tab-content, +.anon-root .tab-pane, +.anon-root .tab-pane.active { + min-height: 0 !important; + min-width: 0 !important; +} + +/* ----------------------------------------------------------------------- + 1) Dashboard container (landing removed) + ----------------------------------------------------------------------- */ +.anon-root .anon-dashboard { + min-height: 85vh; +} + +/* tab content should not force the whole page to grow */ +.anon-root .anon-dashboard .tab-content { + min-height: 0 !important; +} + +/* ----------------------------------------------------------------------- + 2) Layout heights (make the anonymization dashboard row fixed-height) + ----------------------------------------------------------------------- */ +/* Targets the row inside the Dashboard tabPanel */ +.anon-root .anon-dashboard .tab-pane.active > .row { + height: calc(100vh - 160px); /* adjust if your top header spacing differs */ + overflow: hidden !important; +} + +/* LEFT PANEL: the primary vertical scroller */ +.anon-root [id$="left-panel"] { + height: 100%; + overflow-y: auto !important; + overflow-x: hidden !important; + padding-right: 8px; +} + +/* left scrollbar styling */ +.anon-root [id$="left-panel"]::-webkit-scrollbar { width: 8px; } +.anon-root [id$="left-panel"]::-webkit-scrollbar-thumb { background: #c9c9c9; border-radius: 4px; } +.anon-root [id$="left-panel"]::-webkit-scrollbar-track { background: transparent; } + +/* RIGHT PANEL: fill height and split 50/50 */ +.anon-root [id$="right-panel"] { + height: 100%; + overflow: hidden !important; +} + +/* Right containers stretch to full height */ +.anon-root .right-containers { + height: 100% !important; + min-height: 0 !important; + display: flex !important; + flex-direction: column !important; + gap: 12px !important; + overflow: hidden !important; +} + +/* Each box gets equal share */ +.anon-root .right-box { + flex: 1 1 0 !important; /* equal split */ + min-height: 0 !important; + display: flex !important; + flex-direction: column !important; + + background: #ffffff; + border: 1px solid #e6e6e6; + border-radius: 8px; +} + +/* Headers */ +.anon-root .right-header { + flex: 0 0 auto !important; + padding: 10px 12px; + border-bottom: 1px solid #eeeeee; + background: #ffffff; + z-index: 2; +} + +.anon-root .right-header h3 { + margin: 0; + font-size: 18px; + font-weight: 700; +} + +/* Body becomes internal scroll container */ +.anon-root .right-body { + flex: 1 1 auto !important; + min-height: 0 !important; + overflow-y: auto !important; + overflow-x: hidden !important; + padding: 10px 12px; +} + +/* Preview table wrapper: allow scroll (both directions if needed) */ +.anon-root .table-wrap { + height: 100%; + min-height: 0 !important; + overflow: auto !important; +} + +.anon-root table { + width: 100% !important; + border-collapse: collapse; +} + +/* ----------------------------------------------------------------------- + 3) Risk summary cards + ----------------------------------------------------------------------- */ +.anon-root .risk-summary-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + align-items: start; +} + +.anon-root .summary-card { + border: 1px solid #e6e6e6; + border-radius: 8px; + padding: 10px 12px; + background: #fafafa; +} + +/* ----------------------------------------------------------------------- + 4) Gauges + ----------------------------------------------------------------------- */ +.anon-root .gauge .gauge-value, +.anon-root .gauge .gauge-label { + display: none !important; +} + +.anon-root #preview-gauges .gauge-box { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; +} + +.anon-root #preview-gauges h4 { + margin: 0 0 6px 0; +} + +/* ----------------------------------------------------------------------- + 5) Copy buttons (module-scoped) + ----------------------------------------------------------------------- */ +.anon-root button[id^="copy_"] { + float: right; + font-size: 12px; + background-color: #e0e0e0; + border: none; + border-radius: 5px; + padding: 6px 10px; + box-shadow: 1px 1px 3px rgba(0,0,0,0.15); + cursor: pointer; + margin-bottom: 10px; + position: relative; + z-index: 10; +} + +/* ----------------------------------------------------------------------- + 6) Inline suppress icon button + ----------------------------------------------------------------------- */ +.anon-root .qid-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + margin-bottom: 6px; +} + +.anon-root .icon-button { + background: #dc3545; + color: #ffffff; + border: none; + border-radius: 6px; + padding: 0; + cursor: pointer; + height: 32px; + width: 32px; + display: flex; + align-items: center; + justify-content: center; +} + +.anon-root .icon-button:hover { opacity: 0.9; } +.anon-root .icon-button .fa { pointer-events: none; } + +/* ----------------------------------------------------------------------- + 7) Leaflet map sizing + ----------------------------------------------------------------------- */ +.anon-root [id$="geo_map"] { + height: 420px; + border: 1px solid #e6e6e6; + border-radius: 8px; + overflow: hidden; +} + +/* ----------------------------------------------------------------------- + 8) Download note + ----------------------------------------------------------------------- */ +.anon-root .download-note { + font-size: 12px; + color: #444444; + background: #f7f7f7; + border: 1px dashed #dddddd; + border-radius: 8px; + padding: 8px; + margin-top: 8px; +} + +/* ----------------------------------------------------------------------- + 9) Dark mode (toggle should add/remove .dark-mode on .anon-root) + ----------------------------------------------------------------------- */ +.anon-root.dark-mode { + background-color: #1e1e1e !important; + color: #ffffff; +} + +.anon-root.dark-mode .right-box { + background: #2a2a2a; + border-color: #444444; +} + +.anon-root.dark-mode .right-header { + background: #2a2a2a; + border-bottom-color: #444444; +} + +.anon-root.dark-mode .summary-card { + background: #2e2e2e; + border-color: #444444; +} + +.anon-root.dark-mode button[id^="copy_"] { + background-color: #444444; + color: #ffffff; +} + +/* ----------------------------------------------------------------------- + 10) Responsive adjustments + ----------------------------------------------------------------------- */ +@media (max-width: 992px) { + /* On smaller screens, let the page flow naturally */ + .anon-root .anon-dashboard .tab-pane.active > .row { + height: auto; + overflow: visible !important; + } + + .anon-root [id$="left-panel"] { + height: auto; + max-height: none; + } + + .anon-root [id$="right-panel"] { + height: auto; + } + + .anon-root .right-containers { + height: auto !important; + } + + .anon-root .risk-summary-grid { + grid-template-columns: 1fr; + } +} diff --git a/WWW/clipboard.min.js b/WWW/clipboard.min.js new file mode 100644 index 0000000..513aa38 --- /dev/null +++ b/WWW/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"= diff --git a/WWW/styles.css b/WWW/styles.css index 72210d0..87b8bec 100644 --- a/WWW/styles.css +++ b/WWW/styles.css @@ -1,146 +1,362 @@ -/* Media query for tablets */ -@media (min-width: 577px) and (max-width: 992px) { - .roundbuttons { - width: 50%; /* Adjust the width for tablets */ - } +/* ========================================================================== + APHRC — FINAL PERFECT CSS + - Outer sidebar transparent (no extra layer) + - Only inner pill visible + - Pill is dark blue/gray (AdminLTE-like) + - No dark ring around dashboard + ========================================================================== */ + +/* ========================= + 0) Palette / globals + ========================= */ +:root{ + --aphrc-green: #7BC148; + --aphrc-cyan: #00BFC4; + --aphrc-text: #333333; + --aphrc-bg: #FFFFFF; + + /* Layout constants */ + --aphrc-topbar-height: 110px; /* adjust if needed */ + --aphrc-sidebar-collapsed: 56px; + --aphrc-sidebar-expanded: 240px; + --aphrc-transition-ms: 320ms; + + /* Pill styling */ + --aphrc-pill-color: #1f2d33; /* dark blue/gray */ + --aphrc-pill-radius: 18px; + --aphrc-pill-pad-y: 10px; + --aphrc-pill-pad-x: 8px; } +html, body{ height: 100%; } -input[type="radio"] { - width: 12px; - height: 12px; - accent-color: #17a2b8; - border: 1px solid #7bc148; /* Green border */ - cursor: pointer; +body{ + color: var(--aphrc-text); + background: var(--aphrc-bg); + overflow-x: hidden; } +/* ========================= + 1) Remove AdminLTE dark canvas/ring + ========================= */ +html, +body, +.wrapper, +.content-wrapper, +.right-side, +.main-footer{ + background-color: var(--aphrc-bg) !important; +} -.box.box-success > .box-header { - background-color: #bde0a3 !important; /* lighter green header */ - } +.wrapper, +.content-wrapper, +.right-side{ + box-shadow: none !important; + border: 0 !important; +} +.content-wrapper{ + border-left: 0 !important; +} -.footer { - background-color: #7bc148; - color: white; - padding: 0px; - text-align: center; - } - - .socialform { - text-align: center; - padding: 10px; - } - .footer a { - margin: 0px; - color: white; - } - .footer a:hover { - color: #337ab7; - } - - hr { - width: 100%; /* Adjust the percentage to control the length */ - } - - - .header { - background: white; - color: #7bc148; - padding: 10px; - display: flex; - align-items: center; - text-align:center; - } - - hr { - width: 100%; /* Adjust the percentage to control the length */ - } - - .logo { - flex-shrink: 0; - margin-right: 20px; - max-height: 80%; - max-width: 80%; - } - - .header-text h1 { - font-size: 30px; - font-weight: bold; - text-align:center; - } - - .header-text h3 { - font-size: 20px; - - } - - - /* navbar (rest of the header) */ - .skin-blue .main-header .navbar { - background-color:green; +/* ========================= + 2) Remove AdminLTE header bar (you use .custom-header) + ========================= */ +.main-header, +.main-header .navbar, +.skin-blue .main-header .navbar, +.skin-green .main-header .navbar{ + display: none !important; + height: 0 !important; + min-height: 0 !important; + border: 0 !important; + margin: 0 !important; + padding: 0 !important; +} - } +/* Make room for your custom header */ +body .wrapper{ + padding-top: var(--aphrc-topbar-height) !important; +} - /* main sidebar */ - .skin-blue .main-sidebar { - background-color: #7BC148; +.content-wrapper, .right-side, .content{ + padding-top: 0 !important; + margin-top: 0 !important; +} - } - /* active selected tab in the sidebarmenu */ - .skin-blue .main-sidebar .sidebar .sidebar-menu .active a{ - background-color:#7BC148; - } +/* ========================= + 3) Your custom header (.custom-header) + ========================= */ +.custom-header{ + position: fixed !important; + top: 0 !important; + left: 0 !important; + right: 0 !important; + z-index: 3000 !important; + background-color: var(--aphrc-green) !important; + color: #fff !important; + padding: 10px !important; + margin: 0 !important; + border: 0 !important; + box-shadow: none !important; +} - /* other links in the sidebarmenu */ - .skin-blue .main-sidebar .sidebar .sidebar-menu a{ - background-color: #7BC148; - border-color: #7BC148; - color: #ffffff; - } +/* Keep your older .header (white) if used elsewhere (login etc.) */ +.header{ + background: #fff; + color: var(--aphrc-green); + padding: 10px; + display: flex; + align-items: center; + text-align: center; +} - /* other links in the sidebarmenu when hovered */ - .skin-blue .main-sidebar .sidebar .sidebar-menu a:hover{ - background-color: #2c3b41; - } - /* toggle button when hovered */ - .skin-blue .main-header .navbar .sidebar-toggle:hover{ - background-color: #D37D28; - } - /* toggle button when hovered */ - .skin-blue .main-header .navbar .sidebar-toggle{ - margin:1em; - } +.logo{ + flex-shrink: 0; + margin-right: 20px; + max-height: 80%; + max-width: 80%; +} - /* body */ - .content-wrapper, .right-side { - background-color: #ffffff; - padding-left: 1.5em; +.header-text h1{ + font-size: 30px; + font-weight: bold; + text-align: center; +} +.header-text h3{ + font-size: 20px; +} + +/* ========================= + 4) Sidebar: transparent shell + dark pill only + ========================= */ + +/* Sidebar shell (outer area) is TRANSPARENT and non-blocking */ +.main-sidebar, +.left-side, +.skin-green .main-sidebar, +.skin-blue .main-sidebar, +.main-sidebar .sidebar{ + background: transparent !important; + background-color: transparent !important; + border: 0 !important; + box-shadow: none !important; +} + +/* Fixed positioning and hover-expand */ +.main-sidebar{ + position: fixed !important; + left: 0 !important; + top: var(--aphrc-topbar-height) !important; + height: calc(100vh - var(--aphrc-topbar-height)) !important; + + width: var(--aphrc-sidebar-collapsed) !important; + + overflow: visible !important; /* important: pill can have shadow */ + z-index: 2000 !important; + + transition: width var(--aphrc-transition-ms) cubic-bezier(0.22, 1, 0.36, 1) !important; + will-change: width; + + pointer-events: none !important; /* outer shell won’t block footer/clicks */ +} + +.main-sidebar:hover{ + width: var(--aphrc-sidebar-expanded) !important; +} + +/* Content aligned to collapsed sidebar */ +.content-wrapper, .right-side, .main-footer{ + margin-left: var(--aphrc-sidebar-collapsed) !important; + transition: margin-left var(--aphrc-transition-ms) cubic-bezier(0.22, 1, 0.36, 1) !important; +} + +.main-sidebar:hover ~ .content-wrapper, +.main-sidebar:hover ~ .right-side, +.main-sidebar:hover ~ .main-footer{ + margin-left: var(--aphrc-sidebar-expanded) !important; +} + +/* Sidebar inner container */ +.main-sidebar .sidebar{ + padding-top: 8px !important; + margin-top: 0 !important; + overflow: visible !important; +} + +/* Make ONLY the pill interactive */ +.main-sidebar .sidebar-menu{ + pointer-events: auto !important; +} + +/* Stop old rules that paint every green */ +.skin-green .main-sidebar .sidebar .sidebar-menu a, +.skin-blue .main-sidebar .sidebar .sidebar-menu a{ + background: transparent !important; + background-color: transparent !important; + border-color: transparent !important; +} + +/* The DARK PILL panel (height = content) */ +.main-sidebar .sidebar-menu{ + background: var(--aphrc-pill-color) !important; + background-color: var(--aphrc-pill-color) !important; + + margin: 12px var(--aphrc-pill-pad-x) !important; + padding: var(--aphrc-pill-pad-y) 0 !important; + + border-radius: var(--aphrc-pill-radius) !important; + box-shadow: 0 10px 24px rgba(0,0,0,0.18) !important; + + overflow: hidden !important; + list-style: none !important; +} + +/* Menu items */ +.main-sidebar .sidebar-menu > li{ margin: 0 !important; } + +.main-sidebar .sidebar-menu > li > a{ + height: 44px !important; + display: flex !important; + align-items: center !important; + box-sizing: border-box !important; + line-height: 44px !important; + + /* collapsed: icons centered */ + justify-content: center !important; + padding: 0 !important; + + color: #ffffff !important; + border-radius: 12px !important; +} + +/* Icons */ +.main-sidebar .sidebar-menu > li > a > i{ + font-size: 16px !important; + margin: 0 !important; + width: auto !important; +} + +/* Hover/active (dark theme) */ +.main-sidebar .sidebar-menu > li > a:hover{ + background: rgba(255,255,255,0.10) !important; +} +.main-sidebar .sidebar-menu > li.active > a, +.main-sidebar .sidebar-menu > li > a:focus{ + background: rgba(255,255,255,0.16) !important; +} + +/* Collapsed: hide labels */ +.main-sidebar .sidebar-menu > li > a > span, +.main-sidebar .sidebar-menu > li > a > .pull-right-container{ + display: none !important; +} + +/* Expanded hover: show labels and align left */ +.main-sidebar:hover .sidebar-menu > li > a{ + justify-content: flex-start !important; + padding: 0 15px !important; +} +.main-sidebar:hover .sidebar-menu > li > a > i{ + margin-right: 10px !important; +} +.main-sidebar:hover .sidebar-menu > li > a > span, +.main-sidebar:hover .sidebar-menu > li > a > .pull-right-container{ + display: inline-block !important; +} + +/* Small screens: tighten pill */ +@media (max-width: 576px){ + .main-sidebar .sidebar-menu{ + border-radius: 16px !important; + margin: 10px 6px !important; } - - - /*Tables*/ - -.dataTables_wrapper , .dataTables_wrapper .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper{ - color:#000000; - background-color:#ffffff; - } - - thead { - color: #ffffff; - font-size:1.2em; - background-color:#17a2b8; - } - - tbody { - color: #000000; - font-size:1.2em; - } - +} + +/* ========================= + 5) Content area styling + ========================= */ +.content-wrapper, .right-side{ + background-color: #ffffff !important; + padding-left: 1.5em !important; +} + +/* ========================= + 6) Tables / DataTables + ========================= */ +.dataTables_wrapper, +.dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_processing{ + color:#000000 !important; + background-color:#ffffff !important; +} + +thead{ + color: #ffffff !important; + font-size:1.2em !important; + background-color:#17a2b8 !important; +} +tbody{ + color: #000000 !important; + font-size:1.2em !important; +} + +table{ + background-color: white !important; + color: black !important; + border: 1px solid #ddd !important; +} +th{ + background-color: #17a2b8 !important; + color: white !important; +} +td{ + background-color: #ffffff !important; + color: black !important; +} + +/* ========================= + 7) Forms / inputs + ========================= */ +input[type="radio"]{ + width: 12px; + height: 12px; + accent-color: #17a2b8; + border: 1px solid var(--aphrc-green); + cursor: pointer; +} + +.shiny-input-checkbox input[type='checkbox']{ + background-color: #4CAF50; +} + +.bootstrap-switch{ + background-color: #4CAF50 !important; +} + +@media (min-width: 577px) and (max-width: 992px){ + .roundbuttons{ width: 50%; } +} + +#primaryTabs{ + color: var(--aphrc-green); + width: 100%; +} + +/* ========================= + 8) Upload / overview panels and cards + ========================= */ #upload_form{ padding-left: 1.2em; justify-content: left; align-items: left; + + background: var(--aphrc-bg); + border: 2px solid var(--aphrc-green); + border-radius: 14px; + box-shadow: 0 10px 24px rgba(0,0,0,0.10); + padding: 14px 16px; + margin: 16px auto; } #OverViewMenu{ @@ -148,166 +364,161 @@ input[type="radio"] { overflow-y: auto; } -table { - background-color: white; - color: black; - border: 1px solid #ddd; +.aphrc-row{ + background: var(--aphrc-bg); + border: 2px solid var(--aphrc-green); + border-radius: 14px; + box-shadow: 0 10px 24px rgba(0,0,0,0.10); + padding: 14px 16px; + margin: 16px auto; } -th { - background-color: #17a2b8; - color: white; +.aphrc-row:hover, +.upload_form:hover, +#aphrc-row1:hover{ + box-shadow: 0 14px 28px rgba(0,0,0,0.12); + transform: translateY(-1px); + transition: all .18s ease-in-out; } -td { - background-color: #ffffff; - color: black; +/* ========================= + 9) Boxes + ========================= */ +.box.box-success > .box-header{ + background-color: #bde0a3 !important; } -.shiny-input-checkbox input[type='checkbox'] { - background-color: #4CAF50; - } - - - .bootstrap-switch{ - background-color: #4CAF50 !important; +/* ========================= + 10) Footer (your custom .footer) + ========================= */ +.footer{ + background-color: var(--aphrc-green); + color: white; + padding: 0px; + text-align: center; } -#primaryTabs { - color: #7bc148; - width: 100%; +.socialform{ + text-align: center; + padding: 10px; +} +.footer a{ + margin: 0px; + color: white; +} +.footer a:hover{ + color: #337ab7; } +/* ========================= + 11) HR + ========================= */ +hr{ width: 100%; } -.auth-container { +/* ========================= + 12) Auth / login page UI + ========================= */ +.auth-container{ max-width: 400px; margin: 6% auto; padding: 30px 25px; - border-color:#7bc148; + border-color: var(--aphrc-green); border-radius: 15px; - border-width:2px; + border-width: 2px; background-color: #fff; box-shadow: 0 0 25px rgba(0, 0, 0, 0.1); } -.auth-title { +.auth-title{ font-weight: 600; font-size: 24px; margin-bottom: 20px; } -.toggle-buttons { +.toggle-buttons{ display: flex; justify-content: center; margin-bottom: 20px; } -.toggle-buttons button { +.toggle-buttons button{ margin: 0 5px; - background-color: #7bc148; + background-color: var(--aphrc-green); } -#logoutID { +#logoutID{ background-color: white; color: gray; font-size: 18px; border: 2px solid gray; cursor: pointer; - /* Center icon */ display: flex; justify-content: center; align-items: center; } - -#logoutBtn:hover { - background-color: #c82333; - } - -#loading_screen { - position: fixed; - top: 0; left: 0; - width: 100%; height: 100%; - background-color: #ffffff; - z-index: 9999; - display: flex; - justify-content: center; - align-items: center; - font-size: 40px; - color: #7bc148; - } - - -#loader svg circle { - stroke-width: 20px !important; /* increase this for a thicker ring */ - } - - /* APHRC palette */ -:root{ - --aphrc-green: #7BC148; - --aphrc-cyan: #00BFC4; - --aphrc-text: #333333; - --aphrc-bg: #FFFFFF; -} -/* Row container with shadow + border */ -.aphrc-row { - background: var(--aphrc-bg); - border: 2px solid var(--aphrc-green); - border-radius: 14px; - box-shadow: 0 10px 24px rgba(0,0,0,0.10); - padding: 14px 16px; /* space around row contents */ - margin: 16px auto; /* vertical rhythm */ -} -/* Optional subtle hover lift */ -.aphrc-row:hover{ - box-shadow: 0 14px 28px rgba(0,0,0,0.12); - transform: translateY(-1px); - transition: all .18s ease-in-out; +#logoutBtn:hover{ + background-color: #c82333; } -.aphrc-row:hover{ - box-shadow: 0 14px 28px rgba(0,0,0,0.12); - transform: translateY(-1px); - transition: all .18s ease-in-out; +/* ========================= + 13) Loading screen / loader + ========================= */ +#loading_screen{ + position: fixed; + top: 0; left: 0; + width: 100%; height: 100%; + background-color: #ffffff; + z-index: 9999; + display: flex; + justify-content: center; + align-items: center; + font-size: 40px; + color: var(--aphrc-green); } - - -#upload_form{ - padding-left: 1.2em; - justify-content: left; - align-items: left; - background: var(--aphrc-bg); - border: 2px solid var(--aphrc-green); - border-radius: 14px; - box-shadow: 0 10px 24px rgba(0,0,0,0.10); - padding: 14px 16px; /* space around row contents */ - margin: 16px auto; /* vertical rhythm */ +#loader svg circle{ + stroke-width: 20px !important; } -.upload_form:hover{ - box-shadow: 0 14px 28px rgba(0,0,0,0.12); - transform: translateY(-1px); - transition: all .18s ease-in-out; +/* ========================= + 14) Progress bar + ========================= */ +.top-progress .progress-bar{ + background-color: var(--aphrc-green) !important; } - - -#aphrc-row1:hover{ - box-shadow: 0 14px 28px rgba(0,0,0,0.12); - transform: translateY(-1px); - transition: all .18s ease-in-out; +/* ========================= + 15) Anonymization module isolation + ========================= */ +.anon-root table, +.anon-root th, +.anon-root td, +.anon-root thead, +.anon-root tbody{ + all: unset; } -#aphrc-row1:hover{ - box-shadow: 0 14px 28px rgba(0,0,0,0.12); - transform: translateY(-1px); - transition: all .18s ease-in-out; +.anon-root table{ + width: 100% !important; + border-collapse: collapse !important; + display: table; } -.top-progress .progress-bar { - background-color: #7bc148 !important; - } +.anon-root thead{ display: table-header-group; } +.anon-root tbody{ display: table-row-group; } +.anon-root tr{ display: table-row; } +.anon-root th, +.anon-root td{ + display: table-cell; + padding: 6px 10px; + border: 1px solid #e6e6e6; + vertical-align: top; +} +.anon-root{ + padding: 0 !important; + margin: 0 !important; +} diff --git a/modules/anonymization_functions.R b/modules/anonymization_functions.R new file mode 100644 index 0000000..acc227b --- /dev/null +++ b/modules/anonymization_functions.R @@ -0,0 +1,129 @@ +# anonymization_functions.R + +# Load required packages +library(dplyr) +library(sdcMicro) +library(digest) +library(uuid) + +# --- MASKING --- +# Replace every character in character columns with "*" +apply_masking <- function(df, cols){ + df %>% + mutate(across( + all_of(cols), + ~ if (is.character(.x)) stringr::str_replace_all(.x, ".", "*") else .x + )) +} +attr(apply_masking, "description") <- "Replace each character in specified columns with '*'" + +# --- SUPPRESSION --- +# Remove the specified columns entirely +apply_suppression <- function(df, cols) { + df %>% select(-any_of(cols)) +} +attr(apply_suppression, "description") <- "Drop the specified columns" + +# --- BUCKETING --- +# Groups numeric values into fixed-width bins starting at 0 +apply_bucketing <- function(df, cols, bin_size) { + df %>% + mutate(across( + all_of(cols), + ~ { + max_val <- max(.x, na.rm = TRUE) + breaks <- seq(0, max_val + bin_size, by = bin_size) + labels <- paste0(head(breaks, -1), "-", breaks[-1] - 1) + cut(.x, breaks = breaks, labels = labels, include.lowest = TRUE, right = FALSE) + } + )) +} +attr(apply_bucketing, "description") <- "Bucket numeric columns into fixed-width intervals starting at 0" + +# --- PSEUDONYMIZATION --- +# Hash each value in the specified columns with SHA-256 +apply_pseudonymization <- function(df, cols) { + df %>% + mutate(across( + all_of(cols), + ~ digest(as.character(.x), algo = "sha256") + )) +} +attr(apply_pseudonymization, "description") <- "Replace values with SHA-256 hash digests" + +# --- TOKENIZATION --- +# Replace each value with a random 10-character alphanumeric token +apply_tokenization <- function(df, cols, seed = 123) { + set.seed(seed) + df %>% + mutate(across( + all_of(cols), + ~ replicate(n(), paste0(sample(c(0:9, letters, LETTERS), 10, TRUE), collapse = "")) + )) +} +attr(apply_tokenization, "description") <- "Replace values with random 10-character tokens" + +# --- BASIC K-ANONYMITY --- +# Keeps only those QID-groups of size >= k +apply_k_anonymity <- function(df, cols, k) { + df %>% + group_by(across(all_of(cols))) %>% + mutate(.group_size = n()) %>% + ungroup() %>% + filter(.group_size >= k) %>% + select(-.group_size) +} +attr(apply_k_anonymity, "description") <- "Filter to only those groups whose size >= k" + +# --- EXTENDED K-ANONYMITY --- +# Suppress direct IDs, generalize numeric QIDs, then enforce k-anonymity via sdcMicro +apply_k_extended <- function(df, qids, k, bucket_cols = list(), direct_ids = character()) { + # 1) Suppress direct identifiers + df_proc <- df %>% select(-any_of(direct_ids)) + df_proc$row_id_temp <- seq_len(nrow(df_proc)) + + # 2) Generalize numeric QIDs + for (col in names(bucket_cols)) { + df_proc[[col]] <- bucket_cols[[col]](df_proc[[col]]) + } + + # 3) sdcMicro k-anonymity + qids2 <- intersect(qids, names(df_proc)) + sdcObj <- createSdcObj(dat = df_proc, keyVars = qids2) + sdcObj <- kAnon(sdcObj, k = k) + df_k <- extractManipData(sdcObj) + + # 4) Combine matched & unmatched + matched <- df_k %>% select(-row_id_temp) + unmatched <- df_proc %>% filter(!row_id_temp %in% df_k$row_id_temp) %>% select(-row_id_temp) + bind_rows(matched, unmatched) +} +attr(apply_k_extended, "description") <- "Extended k-anonymity with bucketing & suppression" + +# --- L-DIVERSITY --- +# Keep only those QID groups where the sensitive attribute has >= l distinct values +apply_l_diversity <- function(df, qids, sensitive_attr, l) { + df %>% + group_by(across(all_of(qids))) %>% + filter(n_distinct(.data[[sensitive_attr]]) >= l) %>% + ungroup() +} +attr(apply_l_diversity, "description") <- "Filter groups to ensure >= l diversity in the sensitive attribute" + +# --- T-CLOSENESS --- +# Keep only those QID groups whose distribution of the sensitive attribute is within threshold t of the global distribution +apply_t_closeness <- function(df, qids, sensitive_attr, t) { + # compute global distribution + global_dist <- df %>% count(.data[[sensitive_attr]]) %>% mutate(prop = n / sum(n)) + + df %>% + group_by(across(all_of(qids))) %>% + filter({ + local <- count(cur_data(), .data[[sensitive_attr]]) %>% mutate(prop = n / sum(n)) + # total variation distance + tvd <- sum(abs(global_dist$prop - local$prop)) / 2 + tvd <= t + }) %>% + ungroup() +} +attr(apply_t_closeness, "description") <- "Filter groups whose sensitive-attribute distribution is within t of the global distribution" diff --git a/modules/mod_quant_anonymization.R b/modules/mod_quant_anonymization.R new file mode 100644 index 0000000..f119dd1 --- /dev/null +++ b/modules/mod_quant_anonymization.R @@ -0,0 +1,362 @@ +# modules/mod_quant_anonymization.R + +# IMPORTANT: keep these global so anon_quant_server_logic() is visible +source(.anon_server_mod, local = FALSE) + +# ---- Quantitative anonymization module ---- +mod_quant_anon_ui <- function(id) { + ns <- shiny::NS(id) + + # Precompute namespaced IDs used in JS strings + ns_right_panel <- ns("right-panel") + ns_main_tabs <- ns("main_tabs") + ns_remove_ids <- ns("remove_ids") # must exist in identifier_selector output + ns_remove_inline <- ns("remove_ids_inline") + ns_method <- ns("method") + + # ACE IDs + ns_r_ace <- ns("r_code_ace") + ns_stata_ace <- ns("stata_code_ace") + ns_py_ace <- ns("python_code_ace") + ns_copy_r <- ns("copy_r") + ns_copy_st <- ns("copy_stata") + ns_copy_py <- ns("copy_py") + + # Single main section + ns_dashboard <- ns("dashboard") + + shiny::div( + id = ns("anon_root"), + class = "anon-root", + shiny::tagList( + shinyjs::useShinyjs(), + + shiny::tags$head( + # Font Awesome (icons) + shiny::tags$link( + rel = "stylesheet", + href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" + ), + + # Copy helper JS (works with namespaced ACE ids) + shiny::tags$script(shiny::HTML(" + function copyAce(editorId, btnId) { + var ed = ace.edit(editorId); + if(!ed) return; + var code = ed.getValue(); + var ta = document.createElement('textarea'); + ta.value = code; + document.body.appendChild(ta); + ta.select(); + document.execCommand('copy'); + document.body.removeChild(ta); + var btn = document.getElementById(btnId); + if(btn){ + btn.innerText = 'Copied!'; + setTimeout(function(){ btn.innerText = '📋 Copy'; }, 2000); + } + } + ")) + ), + + # ==== MAIN DASHBOARD (visible immediately) ==== + shiny::div( + id = ns_dashboard, + class = "anon-dashboard", + style = "display:block; padding:20px;", + + shiny::tabsetPanel( + id = ns_main_tabs, + + # -------------------------- DASHBOARD TAB ------------------------------- + shiny::tabPanel( + "Dashboard", + shiny::fluidRow( + + # ---------- LEFT PANEL ---------- + shiny::column( + width = 4, id = ns("left-panel"), + + # Step 0 (platform dataset picker + optional file upload fallback) + shiny::wellPanel( + shiny::tags$h4("Step 0: Load Data"), + + shiny::div( + style = "padding:8px; border:1px solid #eee; border-radius:6px;", + shiny::tags$strong("Use already uploaded and Selecetd data"), + shiny::br(), + shiny::uiOutput(ns("platform_dataset_picker")), + shiny::actionButton( + ns("use_platform_data"), + "Load selected dataset", + class = "btn btn-success btn-block" + ), + shiny::tags$small( + style = "display:block; margin-top:6px; color:#666;", + "" + ) + ), + + shiny::tags$hr(), + shiny::textOutput(ns("n_obs_text")) + ), + + + # Step 1 + shiny::wellPanel( + shiny::div( + class = "qid-header", + shiny::tags$h4("Step 1: Remove Direct Identifiers"), + shiny::tags$button( + id = ns_remove_inline, + class = "icon-button", + title = "Suppress & Remove Identifiers", + onclick = sprintf("$('#%s').click();", ns_remove_ids), + shiny::tags$i(class = "fa fa-eraser") + ) + ), + shiny::uiOutput(ns("identifier_selector")) + ), + + # Step 2 + shiny::wellPanel( + shiny::tags$h4("Step 2: Select Quasi-Identifiers"), + shiny::uiOutput(ns("bucket_ui")) + ), + + # Step 3 + shiny::wellPanel( + shiny::tags$h4("Step 3: Choose Method & Parameters"), + shiny::selectInput( + ns_method, + "Anonymization Method:", + choices = c( + "Masking", "Suppression", "Bucketing", + "Pseudonymization", "Tokenization", + "K-Anonymity", + "Generalization", + "Anonymize Coordinates" + ), + selected = "Masking" + ), + + shiny::uiOutput(ns("extra_input")), + + shiny::conditionalPanel( + condition = sprintf("input['%s'] == 'Generalization'", ns_method), + shiny::div( + style = "margin-top:8px; padding:10px; background:#f5f5f5; border-radius:4px;", + shiny::tags$strong("Generalization tips:"), + shiny::tags$ul( + shiny::tags$li("Use drag & drop for categorical variables."), + shiny::tags$li(shiny::HTML("Switch to Custom numeric ranges for numeric variables. Non-numeric fields will be hidden in that mode.")), + shiny::tags$li("Ranges must not overlap or touch.") + ) + ) + ), + + shiny::fluidRow( + shiny::column(4, shiny::actionButton(ns("apply"), "Apply", class = "btn btn-primary btn-block")), + shiny::column(4, shiny::actionButton(ns("undo"), "Undo", class = "btn btn-warning btn-block")), + shiny::column(4, shiny::actionButton(ns("reset"), "Reset", class = "btn btn-danger btn-block")) + ), + + # Advisor + shiny::wellPanel( + shiny::tags$h4("Bin-Size Advisor"), + shiny::selectInput( + ns("advisor_var"), + "Choose numeric variable:", + choices = NULL, + selectize = TRUE + ), + shiny::actionButton(ns("advisor_run"), "Show suggestions", class = "btn btn-info btn-block"), + shiny::tags$hr(), + shiny::tags$h5("Overall Histogram"), + shiny::plotOutput(ns("advisor_dist"), height = "220px"), + shiny::tags$h5("Summary Statistics"), + shiny::verbatimTextOutput(ns("advisor_summary")), + shiny::tags$h5("Bin-width Suggestions"), + shiny::tableOutput(ns("advisor_table")), + shiny::plotOutput(ns("advisor_plot"), height = "220px") + ), + + # Downloads / Report + shiny::wellPanel( + shiny::checkboxInput(ns("dark_mode"), "Enable Dark Mode"), + shiny::tags$hr(), + shiny::tags$h4("Downloads"), + shiny::downloadButton(ns("download"), "Download CSV", class = "btn-block mb-1"), + shiny::downloadButton(ns("download_excel"), "Download Excel", class = "btn-block mb-1"), + shiny::downloadButton(ns("download_dta"), "Download Stata", class = "btn-block mb-1"), + shiny::downloadButton(ns("download_report"), "Download Risk Report As pdf", class = "btn-block mb-1"), + shiny::actionButton(ns("view_report"), "View Report", class = "btn btn-info btn-block"), + + shiny::conditionalPanel( + condition = sprintf("input['%s'] == 'Anonymize Coordinates'", ns_method), + shiny::div( + class = "download-note", + shiny::HTML("Note: When Anonymize Coordinates is the last applied method, the standard downloads above will export the anonymized coordinates. No separate download is needed.") + ) + ), + + shiny::tags$hr(), + shiny::uiOutput(ns("k_report")), + shiny::tags$hr(), + shiny::tags$h4("Steps Log"), + shiny::verbatimTextOutput(ns("step_log"), placeholder = TRUE) + ) + ) + ), + + # ---------- RIGHT PANEL ---------- + shiny::column( + width = 8, id = ns_right_panel, + shiny::div( + class = "right-containers", + + # === Container 1: Data Preview / Map === + shiny::div( + class = "right-box", + shiny::div(class = "right-header", shiny::tags$h3("Data Preview")), + shiny::div( + class = "right-body", + + shiny::conditionalPanel( + condition = sprintf("input['%s'] == 'Anonymize Coordinates'", ns_method), + leaflet::leafletOutput(ns("geo_map"), height = "420px") + ), + + shiny::conditionalPanel( + condition = sprintf("input['%s'] != 'Anonymize Coordinates'", ns_method), + shiny::div( + id = ns("preview-table"), + class = "table-wrap", + shiny::tableOutput(ns("preview_merged")) + ) + ) + ) + ), + + # === Container 2: Risk Assessment === + shiny::div( + class = "right-box", + shiny::div(class = "right-header", shiny::tags$h3("Risk Assessment")), + shiny::div( + class = "right-body", + shiny::div( + class = "risk-summary-grid", + shiny::div(class = "summary-card", shiny::uiOutput(ns("risk_before"))), + shiny::div(class = "summary-card", shiny::uiOutput(ns("risk_after"))) + ), + shiny::tags$br(), + shiny::div( + id = ns("preview-gauges"), + shiny::fluidRow( + shiny::column( + width = 6, + shiny::div( + class = "gauge-box", + shiny::tags$h4("Risk Before"), + flexdashboard::gaugeOutput(ns("gauge_before"), height = "200px") + ) + ), + shiny::column( + width = 6, + shiny::div( + class = "gauge-box", + shiny::tags$h4("Risk After"), + flexdashboard::gaugeOutput(ns("gauge_after"), height = "200px") + ) + ) + ) + ) + ) + ) + ) + ) + ) + ), + + # ----------------------------- CODES TAB --------------------------------- + shiny::tabPanel( + "Codes", + shiny::fluidRow( + shiny::column( + width = 4, + shiny::tags$h4("R Code"), + shinyAce::aceEditor( + outputId = ns_r_ace, + mode = "r", + theme = "chrome", + readOnly = TRUE, + height = "400px" + ), + shiny::actionButton( + ns_copy_r, "📋 Copy", + class = "btn btn-primary btn-block", + onclick = sprintf("copyAce('%s','%s')", ns_r_ace, ns_copy_r) + ) + ), + shiny::column( + width = 4, + shiny::tags$h4("Stata Code"), + shinyAce::aceEditor( + outputId = ns_stata_ace, + mode = "stata", + theme = "chrome", + readOnly = TRUE, + height = "400px" + ), + shiny::actionButton( + ns_copy_st, "📋 Copy", + class = "btn btn-primary btn-block", + onclick = sprintf("copyAce('%s','%s')", ns_stata_ace, ns_copy_st) + ) + ), + shiny::column( + width = 4, + shiny::tags$h4("Python Code"), + shinyAce::aceEditor( + outputId = ns_py_ace, + mode = "python", + theme = "chrome", + readOnly = TRUE, + height = "400px" + ), + shiny::actionButton( + ns_copy_py, "📋 Copy", + class = "btn btn-primary btn-block", + onclick = sprintf("copyAce('%s','%s')", ns_py_ace, ns_copy_py) + ) + ) + ) + ), + + # -------------------------- DESCRIPTIONS TAB ---------------------------- + shiny::tabPanel( + "Descriptions", + shiny::uiOutput(ns("descriptions_panel")) + ) + ) + ) + ) + ) +} + +# Allow passing rv_current from main server to anon logic +mod_quant_anon_server <- function(id, rv_current = NULL) { + shiny::moduleServer(id, function(input, output, session) { + if (exists("anon_quant_server_logic", mode = "function", inherits = TRUE)) { + get("anon_quant_server_logic", mode = "function", inherits = TRUE)( + input, output, session, + rv_current = rv_current + ) + } else { + shiny::showNotification( + "anon_quant_server_logic() not found. Check server/anon/server_module_quant.R", + type = "error" + ) + } + }) +} diff --git a/server.R b/server.R index dc5355a..f17d59d 100644 --- a/server.R +++ b/server.R @@ -12,735 +12,749 @@ function(input, output, session){ USER = user_auth(input, output, session) authed_started = reactiveVal(FALSE) - - observeEvent(USER$logged_in, { - req(isTRUE(USER$logged_in)) - waiter_show( - html = spin_loaders(id = 3, style="width:56px;height:56px;color:#7BC148;"), - color = "#FFF" - ) - - if (authed_started()) return() - authed_started(TRUE) - - app_username = USER$username - model_training_caret_pb = Attendant$new("model_training_caret_pb", hide_on_max = TRUE) - data_upload_id_pb = Attendant$new("data_upload_id_pb", hide_on_max = TRUE) - model_metrics_caret_pb = Attendant$new("model_metrics_caret_pb", hide_on_max = TRUE) - deploy_models_caret_pb = Attendant$new("deploy_models_caret_pb", hide_on_max = TRUE) - predict_models_caret_pb = Attendant$new("predict_models_caret_pb", hide_on_max = TRUE) - predict_endpoint_models_caret_pb = Attendant$new("predict_endpoint_models_caret_pb", hide_on_max = TRUE) - generate_research_questions_outcome_pb = Attendant$new("generate_research_questions_outcome_pb", hide_on_max = TRUE) - generate_research_questions_additional_analysis_pb = Attendant$new("generate_research_questions_additional_analysis_pb", hide_on_max = TRUE) - feature_engineering_perform_preprocess_pb = Attendant$new("feature_engineering_perform_preprocess_pb", hide_on_max = TRUE) - model_training_caret_metrics_download_all_zip_pb = Attendant$new("model_training_caret_metrics_download_all_zip_pb", hide_on_max = TRUE) - - #### ---- Input validators --------------------------------------------------- - source("server/input_validators.R") - #### ---- Create needed folders for datasets and logs ------------------------ - source("server/create_dirs.R", local=TRUE) - - #### ---- FastAPI base URL réactif (lié au champ fastapi_base) ---- - source("R/utils_logging.R") - - DEFAULT_API_BASE <- Sys.getenv("FASTAPI_BASE", "http://api:8000") - - source("server/automl_controls_server.R") - source("server/train_model_server.R") - source("R/utils_api.R") - source("server/deploy_model_server.R", local=TRUE) - source("ui/deploy_model_ui.R", local=TRUE) - source("server/predict_pycaret_server.R", local = TRUE) - - api_base <- reactive({ - val <- input$fastapi_base - if (is.null(val) || !nzchar(trimws(val))) { - DEFAULT_API_BASE - } else { - trimws(val) - } - }) - - - #### ---- Placeholder for reactive values ------------------------------------ - ##### -------- Currently selected dataset ------------------------------------ - rv_current = reactiveValues( - dataset_id = NULL - , metadata_id = NULL - , data = NULL - , selected_vars = NULL - , selected_var = NULL - , working_df = NULL - , current_filter = NULL - , current_filter_reset = NULL - , manage_data_title_explore = NULL - , missing_prop = NULL - , has_missing_data_check=FALSE - , manage_data_title_transform = NULL - , merge_data_title_merge = NULL - , transform_data_select_vars = NULL - , vartype = NULL - , changed_variable_type_log = NULL - , transform_data_plot_df = NULL - , renamed_variable_log = NULL - , transform_data_quick_plot_out = NULL - , recoded_variable_labels_log = NULL - , missing_prop_df = NULL - , created_missing_values_log = NULL - , outlier_values = NULL - , handle_missing_values_log = NULL - , handle_outlier_values_log = NULL - , transform_data_plot_missing_data_out = NULL - , quick_explore_summary = NULL - , max_tockens = 10000 - , seed = 9991 - , outcome = NULL - , vartype_all = NULL - ) - - #####------------------Plots Reactive------------------- - - plots_sec_rv <- reactiveValues( - plot_rv=NULL - ,tab_rv=NULL - ,plot_bivariate_auto=NULL - ,plot_corr = NULL - ) - - - ##### --------- Meta data --------------------------------------------- - rv_metadata = reactiveValues( - upload_logs = NULL - , dataset_ids = NULL - , data_summary_str = NULL - , data_summary_skim = NULL - , data_summary_summary = NULL - , data_summary_summarytools = NULL - ) - - rv_database <- reactiveValues(schema_list = NULL - , table_list = NULL - , conn = NULL - , schema_selected = NULL - , table_selected = NULL - , df_table = data.frame() - , df_table_str = NULL - , query_table_name = NULL - , database_host = NULL - , database_name = NULL - , database_user = NULL - , database_pass = NULL - , details = NULL - ) - - ## --- - - rv_omop<- reactiveValues( - url = NULL ) - - - ## LLM/GAI - rv_generative_ai = reactiveValues( - history = NULL - ) - - ## Reactive values for ML/AI module - rv_ml_ai = reactiveValues( - session_id = NULL - , seed_value = NULL - , dataset_id = NULL - , analysis_type = NULL - , task = NULL - , outcome = NULL - , model_formula = NULL - , partition_ratio = NULL - , predictors = NULL - , excluded_predictors = NULL - , ml_ai_setup_result = NULL - , history = NULL - , split = NULL - , train_df = NULL - , test_df = NULL - , preprocessed = NULL - , feature_engineering_preprocessed_log = NULL - , at_least_one_model = FALSE - ) - - ## RV to hold UIs - rv_ui_models = reactiveValues( - model_training_caret_models_ols_check = NULL - , model_training_caret_models_ols_advance_control = NULL - ) - - ## Train control caret - rv_train_control_caret = reactiveValues( - method = "cv" - , number = 5 - , repeats = NA - , search = "grid" - , verboseIter = FALSE - , savePredictions = FALSE - , classProbs = TRUE - ) - - ## Trained models - rv_training_models = reactiveValues( - ols_model = NULL - , ols_param = FALSE - , ols_name = NULL - , ols_trained_model = NULL - , rf_model = NULL - , rf_param = FALSE - , rf_name = NULL - , rf_trained_model = NULL - , all_trained_models = NULL - ) - - rv_training_results = reactiveValues( - models = NULL - , train_metrics_df = NULL - , test_metrics_objs = NULL - , post_model_metrics_objs = NULL - , control_parameters = NULL - , tuned_parameters = NULL - ) - - # Update training results when a new model is trained - automl_controls_server( - id = "automl_controls", - rv_current = rv_current, - rv_ml_ai = rv_ml_ai, - api_base = api_base - ) - - train_model_server( - id = "train_model", - rv_current = rv_current, - rv_ml_ai = rv_ml_ai, - api_base = api_base - ) - - # End update training - # ---- (A) Detect if a complete PyCaret run is available (leaderboard displayed) ---- - .can_show_by_train <- reactive({ - curr_ds <- rv_current$dataset_id %||% rv_ml_ai$dataset_id - isTRUE(rv_ml_ai$status %in% c("Finished","Finished_NoPlots")) && - !is.null(rv_ml_ai$leaderboard) && NROW(rv_ml_ai$leaderboard) > 0 && - isTRUE(nzchar(rv_ml_ai$trained_dataset_id)) && - identical(rv_ml_ai$trained_dataset_id, curr_ds) - }) - - observeEvent(rv_current$dataset_id, { - # If we change the dataset, we clean up the transient state linked to the previous train. - if (!identical(rv_current$dataset_id, rv_ml_ai$trained_dataset_id)) { - rv_ml_ai$leaderboard <- NULL - rv_ml_ai$leaderboard_full <- NULL - rv_ml_ai$test_leaderboard <- NULL - rv_ml_ai$test_leaderboard_full <- NULL - rv_ml_ai$models <- NULL - rv_ml_ai$eval_metrics <- NULL - rv_ml_ai$eval_plots <- NULL - rv_ml_ai$status <- NULL - } - }, ignoreInit = FALSE) - - - - # ---- (B) Datasets with pre-trained models (historical) ---- - .get_models_index_csv <- function() file.path(getwd(), app_username, "logs", "models", "index.csv") - dataset_has_history <- reactive({ - idx <- .get_models_index_csv() - if (!file.exists(idx)) return(FALSE) - df <- tryCatch(read.csv(idx, stringsAsFactors = FALSE), error = function(e) NULL) - if (is.null(df) || !"dataset_id" %in% names(df)) return(FALSE) - ds <- rv_ml_ai$dataset_id %||% rv_current$dataset_id - if (is.null(ds) || !nzchar(ds)) return(FALSE) - any(df$dataset_id == ds & (df$framework %in% c("PyCaret","pycaret","Pycaret"))) - }) - - # Expose known datasets for the Deploy module (used in its selector) - observe({ - idx <- .get_models_index_csv() - if (!file.exists(idx)) return(invisible(NULL)) - df <- tryCatch(read.csv(idx, stringsAsFactors = FALSE), error = function(e) NULL) - if (is.null(df) || !"dataset_id" %in% names(df)) return(invisible(NULL)) - rv_current$known_datasets <- sort(unique(df$dataset_id)) - }) - .can_show_deploy <- reactive({ - isTRUE(.can_show_by_train()) || isTRUE(dataset_has_history()) - }) - # (keep this if you still use it on the JS side) - output$can_show_deploy <- reactive({ .can_show_deploy() }) - outputOptions(output, "can_show_deploy", suspendWhenHidden = FALSE) - - # ---- Deploy tab UI container ---- - output$deploy_container <- renderUI({ - if (!isTRUE(.can_show_deploy())) return(NULL) # => onglet totalement vide - column(width = 12, deployment_ui("deploy")) - }) - - outputOptions(output, "can_show_deploy", suspendWhenHidden = FALSE) - ## Deployed models table - rv_deploy_models = reactiveValues( - trained_models_table = NULL - ) - - ## Deployed models - rv_deployed_models = reactiveValues() - - ## Reactive values to stock AutoML leaderboard - rv_automl <- reactiveValues( - leaderboard = NULL - ) - - #### ---- App title ---------------------------------------------------- - source("server/header_footer_configs.R", local=TRUE) - app_title() - - ###-------App Footer-------------------------- - - footer_language_translation() - ###-------Menu Translate--------- - - menu_translation() - - #### ---- Change language ---------------------------------------------------- - output$change_language = change_language - - source("server/change_language_update.R", local = TRUE) - change_language_update() - - #### ---- Upload data UI -------------------------------------------- - source("ui/upload_data.R", local = TRUE) - output$upload_type = upload_type - - #### ---- Upload dataset/files UI -------------------------------------------- - source("server/input_files.R", local = TRUE) - output$input_files = input_files - - #### ---- Show uploaded datasets UI -------------------------------------------- - output$show_uploaded = show_uploaded - - #### ---- Data upload form ----------------------------------------------- - source("ui/upload_form.R", local = TRUE) - output$study_name = study_name - output$study_country = study_country - output$additional_info = additional_info - output$submit_upload = submit_upload - - #### ---- Databse and API connection warning --------------------- - db_api_con_future - - #### ---- Upload datasets ---------------------------------------- - source("server/upload_data.R", local = TRUE) - upload_data_server() - - #### ---- Database integration ---------------------------------------- - source("server/database_integration.R", local = TRUE) - database_integration_server() - - #### --- Database related form elements ---### - output$db_type = db_type - output$db_host = db_host - output$db_name = db_name - output$db_user = db_user - output$db_pwd = db_pwd - output$db_connect = db_connect - output$db_schema_list = db_schema_list - output$db_table_list = db_table_list - output$db_custom_query = db_custom_query - output$db_run_query = db_run_query - output$db_port = db_port - output$db_disconnect = db_disconnect - output$db_tab_query = db_tab_query - output$existing_connection = existing_connection - - source("server/omop_analysis.R", local = TRUE) - omop_analysis_server() - - stderr_file_path <- file.path(getwd(), app_username, "output", "dq_stderr.txt") - - stderr_content<-create_log_reader(stderr_file_path) - - - #### ---- Collect logs ---------------------------------------- - source("server/collect_logs.R", local = TRUE) - collect_logs_server() - - #### ---- Display uploaded datasets ---------------------------------------- - source("server/display_uploaded_data.R", local = TRUE) - display_uploaded_data_server() - - #### ---- Delete uploaded dadatsets ---------------------------------------- - source("server/delete_uploaded_data.R", local = TRUE) - delete_uploaded_data_server() - - #### ---- Update logfiles based on existing datasets -------------------#### - source("server/update_logs.R", local = TRUE) - update_logs_server() - - #### ---- Manage data ---------------------------------------------- - - ##### ---- Select data --------------------------------------------- - source("server/select_data.R", local = TRUE) - select_data_server() - manage_data_show_server() - - ##### ---- Display meta data for the selected dataset --------------------------------------------- - source("server/display_metadata.R", local = TRUE) - display_selected_metadata_server() - reset_display_selected_metadata_server() - - ##### ---- Currently selected data --------------------------------------------- - source("server/selected_data.R", local = TRUE) - currently_selected_data_server() - - ##### ----Generate summary stats for the row data ------------------- - source("server/manage_data_summary.R", local = TRUE) - generate_data_summary_server() - display_data_summary_server() - - #### ----- Explore data ----------------------------------------------- - source("server/explore_data.R", local = TRUE) - explore_data_server() - explore_data_subactions_server() - - ##----User Defined Visualization section----------------------- - source("ui/user_defined_visualization_header.R", local = TRUE) - output$user_output_type = user_output_type - output$user_tab_options = user_tab_options - output$user_calc_var = user_calc_var - #output$user_strata_var = user_strata_var - output$user_row_var = user_row_var - output$usr_create_cross_tab = usr_create_cross_tab - output$user_download_table = user_download_table - - output$user_table_options = user_table_options - output$user_report_numeric = user_report_numeric - output$user_add_p_value = user_add_p_value - output$user_add_confidence_interval = user_add_confidence_interval - output$user_drop_missing_values = user_drop_missing_values - output$user_table_caption = user_table_caption - - output$user_plot_options = user_plot_options - output$user_select_variable_on_x_axis = user_select_variable_on_x_axis - output$user_select_variable_on_y_axis = user_select_variable_on_y_axis - output$user_plot_title = user_plot_title - output$user_x_axis_label = user_x_axis_label - output$user_y_axis_label = user_y_axis_label - output$user_create = user_create - output$user_download = user_download - - output$user_more_plot_options = user_more_plot_options - output$user_transform_to_doughnut = user_transform_to_doughnut - output$user_select_color_variable = user_select_color_variable - output$user_select_group_variable = user_select_group_variable - output$user_visual_orientation = user_visual_orientation - output$user_bar_width = user_bar_width - output$user_line_size = user_line_size - output$user_select_line_type = user_select_line_type - output$user_add_shapes = user_add_shapes - - output$user_select_shape = user_select_shape - output$user_add_smooth = user_add_smooth - output$user_display_confidence_interval = user_display_confidence_interval - output$user_level_of_confidence_interval = user_level_of_confidence_interval - output$user_select_line_join = user_select_line_join - output$user_add_line_type = user_add_line_type - output$user_add_points = user_add_points - output$user_y_variable_summary_type = user_y_variable_summary_type - output$user_title_position = user_title_position - - output$user_size_of_plot_title = user_size_of_plot_title - output$user_axis_title_size = user_axis_title_size - output$user_facet_title_size = user_facet_title_size - output$user_axis_text_size = user_axis_text_size - output$user_data_label_size = user_data_label_size - output$user_x_axis_text_angle = user_x_axis_text_angle - output$user_legend_title = user_legend_title - output$user_stacked = user_stacked - output$user_add_density = user_add_density - output$user_remove_histogram = user_remove_histogram - output$user_select_color_variable_single = user_select_color_variable_single - output$user_select_color_parlet = user_select_color_parlet - output$user_numeric_summary = user_numeric_summary - output$user_tab_more_out = user_tab_more_out - output$user_graph_more_out = user_tab_more_out - - output$bivariate_header_label = bivariate_header_label - output$corrplot_header_label = corrplot_header_label - - output$user_select_bivariate_single_color = user_select_bivariate_single_color - output$user_select_color_parlet_bivariate = user_select_color_parlet_bivariate - output$user_select_color_parlet_corrplot = user_select_color_parlet_corrplot - output$bivariate_plot_title = bivariate_plot_title - output$corrplot_title = corrplot_title - output$user_download_autoreport = user_download_autoreport - output$user_generatebivriate = user_generatebivriate - - - - ##### ---- Explore data actions ---------------------------------- - explore_data_actions_server() - - ##### ---- Filter data -------------------------------------------- - explore_data_filter_server() - explore_data_apply_filter_server() - explore_data_current_filter_server() - - ##### ---- Show/display ------------------------------------------------------- - explore_show_data_server() - explore_data_reset_current_filter_server() - - ##### ---- Compute proportion of missing data --------------------------- - explore_missing_data_server() - - ##### ---- Select variables --------------------------------------------- - explore_data_select_variables_server() - explore_data_selected_variables_server() - - ##### ---- Update data ----------------------------------------------- - explore_data_update_data_server() - - #### ---- Transform variables -------------------------------------- #### - source("server/transform_data.R", local = TRUE) - - ##### ---- Select variables to transform ------------------------------------### - transform_data_select_variables_server() - - ##### ---- Change type -----------------------------------------------### - transform_data_change_type_server() - - ##### ---- Rename variables -----------------------------------------------### - transform_data_rename_variables_server() - - ##### ---- Recode/change value labels ---------------------------------------### - transform_data_quick_explore_recode_server() - - ##### ---- Handle missing data ---------------------------------------### - transform_data_create_missing_values_server() - - ##### ---- Identify outliers ---------------------------------------### - transform_data_identify_outliers_server() - - ##### ---- Handle missing values ---------------------------------------### - transform_data_handle_missing_values_server() - - ##### ---- Plot transform data ----------------------------------------------### - transform_data_quick_explore_plot_server() - - ##### ---- Plot missing data ----------------------------------------------### - transform_data_plot_missing_data_server() - - #### ---- Combine datasets with the existing one --------------------------------------#### - source("server/combine_data.R", local = TRUE) - - ##### ---- List of internal data ------------------------------------------#### - combine_data_list_datasets() - - ##### ---- Combine data options ------------------------------------------#### - combine_data_type() - - ##### ---- Combine data mtch type ------------------------------------------#### - combine_data_match_type() - - ##### ---- Combine data variables matched --------------------#### - combine_data_variable_matching() - - #### ----- Perform matching ---------------------------------#### - combine_data_perform_variable_match() - - ##### ---- Combine data perform merging --------------------#### - combine_data_perform_merging() - - #### ---- Reset combine data --------------------------------#### - combine_data_reset() - - ##### ---- Control Custom visualizations ------------------ ##### - source("server/user_defined_visualization.R", local = TRUE) - user_defined_server() - - ### ------- OMOP ------------------------------------------ ##### - - #### ----- Cohort Constructor ---------##### - source("server/run_cohort_pipeline.R", local = TRUE) - run_cohort_pipeline() - - #### ----- Feature Extraction ---------##### - source("server/feature_extraction_pipeline.R", local = TRUE) - feature_extraction_pipeline() - - #### ---- Achilles Integration -------------------#### - - source("server/run_achilles.R", local = TRUE) - achilles_integration_server() - - ### ---- OMOP CDM Summaries---------------------------#### - source("server/omop_summaries.R", local = TRUE) - omopVizServer() - - #### ---- Generate Research Questions --------------------------------------#### - source("server/research_questions.R", local = TRUE) - generate_research_questions_choices() - - - ##### ---- API Token ------------------ #### - generate_research_questions_api_token() - generate_research_questions_api_store() - - #### ---- Addional prompts --------------- #### - generate_research_questions_additional() - - #### ---- Generate insights using Gemini --------------- #### - generate_research_questions_gemini() - - #### ---- Machine learning and AI --------------- #### - - ##### ----- Set ML/AI UI ------------------- #### - source("server/setup_models.R", local=TRUE) - setup_models_ui() - - ##### ----- Preprocessing ------------------- #### - source("server/feature_engineering.R", local=TRUE) - - #### Preprocessing ------------------------------------------- #### - feature_engineering_perform_preprocess_server() - - #### ------ Missing value imputation -------------------------- #### - feature_engineering_recipe_server() - feature_engineering_impute_missing_server() - - #### ----- Modelling framework --------------------------------- #### - - source("server/modelling_framework.R", local=TRUE) - modelling_framework_choices() - - #### ----- Model setup ----------------------------------------- #### - source("server/model_training_setup.R", local=TRUE) - model_training_setup_server() - - #### ----- Caret models --------------------------------------- #### - source("server/model_training_caret_models.R", local=TRUE) - - ## LM/GLM - model_training_caret_models_ols_server() - - ## RF - model_training_caret_models_rf_server() - - ## GBM - model_training_caret_models_gbm_server() - - ## xgbTree - model_training_caret_models_xgbTree_server() - - ## xgbLinear - model_training_caret_models_xgbLinear_server() - - ## svmRadial - model_training_caret_models_svmRadial_server() - - ## svmLinear - model_training_caret_models_svmLinear_server() - - ## svmPoly - model_training_caret_models_svmPoly_server() - - ## glmnet - model_training_caret_models_glmnet_server() - - ## LASSO - model_training_caret_models_lasso_server() - - ## Ridge - model_training_caret_models_ridge_server() - - ## KNN - model_training_caret_models_knn_server() - - ## NNET - model_training_caret_models_nnet_server() - - ## TREEBAG - model_training_caret_models_treebag_server() - - ## avNNet - model_training_caret_models_avNNet_server() - - ## PLS - model_training_caret_models_pls_server() - - ## GAM - model_training_caret_models_gam_server() - - #### ----- Train all models ----------------------------------- #### - source("server/train_caret_models.R", local=TRUE) - model_training_caret_train_all_server() - - #### ----- Compare trained models ------------------------------ #### - source("server/compare_trained_caret_models.R", local=TRUE) - model_training_caret_train_metrics_server() - - #### ----- Deploy trained models ------------------------------- #### - source("server/deploy_trained_caret_models.R", local=TRUE) - deploy_trained_caret_models() - - #### ---- Predict using no-code models ------------------------ #### - source("server/predict_trained_caret_models.R", local=TRUE) - predict_trained_caret_models() - - #### ---- PyCaret Integration (API) ---------------------------------------------------- - - # New ADD - rv_ml_ai <- rv_ml_ai %||% reactiveValues(target = NULL, outcome = NULL) - rv_current <- rv_current %||% reactiveValues(target = NULL) - - deployment_server(id="deploy",rv_ml_ai=rv_ml_ai,rv_current = rv_current,api_base=api_base) - predict_pycaret_server("predict_pycaret", api_base , rv_current, rv_ml_ai) - - # END NEW ADD - #### ---- Call current dataset for FastAPI --------------------------------------------------- - source("server/automl_server.R", local=TRUE) - automl_server("automl_module", rv_current, rv_ml_ai) - - observe({ - req(!is.null(rv_ml_ai$modelling_framework)) # Check if value exist - - if (tolower(rv_ml_ai$modelling_framework) == "pycaret") { - output$automl_module_ui <- renderUI({ - automl_ui("automl_module") - }) - } else { - output$automl_module_ui <- renderUI({ - h4("") - }) - } - }) - - observeEvent(input$modelling_framework_choices, { - rv_ml_ai$framework <- tolower(input$modelling_framework_choices %||% "") - }, ignoreInit = FALSE) - - #### ---- Deep Learning Server ----- ### - source("server/deep_learning.R", local=TRUE) - deep_learning() - - #### ---- Reset various components --------------------------------------#### - ## Various components come before this - source("server/resets.R", local = TRUE) - - ##### ---- Reset on delete or language change ------------------- #### - reset_data_server() - - #### ---- Activate required fields --------------------------------------#### - iv$enable() - iv_url$enable() - iv_ml$enable() - - waiter_hide() + observeEvent(USER$logged_in, { + req(isTRUE(USER$logged_in)) + waiter_show( + html = spin_loaders(id = 3, style="width:56px;height:56px;color:#7BC148;"), + color = "#FFF" + ) + + if (authed_started()) return() + authed_started(TRUE) + + app_username = USER$username + + # ---- Anonymization sources ---- + source("modules/anonymization_functions.R", local = FALSE) + source("server/anon/server_module_quant.R", local = FALSE) + source("modules/mod_quant_anonymization.R", local = FALSE) + # ---- ---- + + model_training_caret_pb = Attendant$new("model_training_caret_pb", hide_on_max = TRUE) + data_upload_id_pb = Attendant$new("data_upload_id_pb", hide_on_max = TRUE) + model_metrics_caret_pb = Attendant$new("model_metrics_caret_pb", hide_on_max = TRUE) + deploy_models_caret_pb = Attendant$new("deploy_models_caret_pb", hide_on_max = TRUE) + predict_models_caret_pb = Attendant$new("predict_models_caret_pb", hide_on_max = TRUE) + predict_endpoint_models_caret_pb = Attendant$new("predict_endpoint_models_caret_pb", hide_on_max = TRUE) + generate_research_questions_outcome_pb = Attendant$new("generate_research_questions_outcome_pb", hide_on_max = TRUE) + generate_research_questions_additional_analysis_pb = Attendant$new("generate_research_questions_additional_analysis_pb", hide_on_max = TRUE) + feature_engineering_perform_preprocess_pb = Attendant$new("feature_engineering_perform_preprocess_pb", hide_on_max = TRUE) + model_training_caret_metrics_download_all_zip_pb = Attendant$new("model_training_caret_metrics_download_all_zip_pb", hide_on_max = TRUE) + + #### ---- Input validators --------------------------------------------------- + source("server/input_validators.R") + #### ---- Create needed folders for datasets and logs ------------------------ + source("server/create_dirs.R", local=TRUE) + + #### ---- FastAPI base URL réactif (lié au champ fastapi_base) ---- + source("R/utils_logging.R") + + DEFAULT_API_BASE <- Sys.getenv("FASTAPI_BASE", "http://api:8000") + + source("server/automl_controls_server.R") + source("server/train_model_server.R") + source("R/utils_api.R") + source("server/deploy_model_server.R", local=TRUE) + source("ui/deploy_model_ui.R", local=TRUE) + source("server/predict_pycaret_server.R", local = TRUE) + + api_base <- reactive({ + val <- input$fastapi_base + if (is.null(val) || !nzchar(trimws(val))) { + DEFAULT_API_BASE + } else { + trimws(val) + } + }) + + + #### ---- Placeholder for reactive values ------------------------------------ + ##### -------- Currently selected dataset ------------------------------------ + rv_current = reactiveValues( + dataset_id = NULL + , metadata_id = NULL + , data = NULL + , selected_vars = NULL + , selected_var = NULL + , working_df = NULL + , current_filter = NULL + , current_filter_reset = NULL + , manage_data_title_explore = NULL + , missing_prop = NULL + , has_missing_data_check=FALSE + , manage_data_title_transform = NULL + , merge_data_title_merge = NULL + , transform_data_select_vars = NULL + , vartype = NULL + , changed_variable_type_log = NULL + , transform_data_plot_df = NULL + , renamed_variable_log = NULL + , transform_data_quick_plot_out = NULL + , recoded_variable_labels_log = NULL + , missing_prop_df = NULL + , created_missing_values_log = NULL + , outlier_values = NULL + , handle_missing_values_log = NULL + , handle_outlier_values_log = NULL + , transform_data_plot_missing_data_out = NULL + , quick_explore_summary = NULL + , max_tockens = 10000 + , seed = 9991 + , outcome = NULL + , vartype_all = NULL + ) + + # ---- Anonymization module server ---- + if (exists("mod_quant_anon_server", mode = "function", inherits = TRUE)) { + mod_quant_anon_server("quant_anon", rv_current = rv_current) + } else { + showNotification("mod_quant_anon_server() not found. Check modules/mod_quant_anonymization.R", type = "error") + } + # ---- ---- + + #####------------------Plots Reactive------------------- + + plots_sec_rv <- reactiveValues( + plot_rv=NULL + ,tab_rv=NULL + ,plot_bivariate_auto=NULL + ,plot_corr = NULL + ) + + + ##### --------- Meta data --------------------------------------------- + rv_metadata = reactiveValues( + upload_logs = NULL + , dataset_ids = NULL + , data_summary_str = NULL + , data_summary_skim = NULL + , data_summary_summary = NULL + , data_summary_summarytools = NULL + ) + + rv_database <- reactiveValues(schema_list = NULL + , table_list = NULL + , conn = NULL + , schema_selected = NULL + , table_selected = NULL + , df_table = data.frame() + , df_table_str = NULL + , query_table_name = NULL + , database_host = NULL + , database_name = NULL + , database_user = NULL + , database_pass = NULL + , details = NULL + ) + + ## --- + + rv_omop<- reactiveValues( + url = NULL ) + + + ## LLM/GAI + rv_generative_ai = reactiveValues( + history = NULL + ) + + ## Reactive values for ML/AI module + rv_ml_ai = reactiveValues( + session_id = NULL + , seed_value = NULL + , dataset_id = NULL + , analysis_type = NULL + , task = NULL + , outcome = NULL + , model_formula = NULL + , partition_ratio = NULL + , predictors = NULL + , excluded_predictors = NULL + , ml_ai_setup_result = NULL + , history = NULL + , split = NULL + , train_df = NULL + , test_df = NULL + , preprocessed = NULL + , feature_engineering_preprocessed_log = NULL + , at_least_one_model = FALSE + ) + + ## RV to hold UIs + rv_ui_models = reactiveValues( + model_training_caret_models_ols_check = NULL + , model_training_caret_models_ols_advance_control = NULL + ) + + ## Train control caret + rv_train_control_caret = reactiveValues( + method = "cv" + , number = 5 + , repeats = NA + , search = "grid" + , verboseIter = FALSE + , savePredictions = FALSE + , classProbs = TRUE + ) + + ## Trained models + rv_training_models = reactiveValues( + ols_model = NULL + , ols_param = FALSE + , ols_name = NULL + , ols_trained_model = NULL + , rf_model = NULL + , rf_param = FALSE + , rf_name = NULL + , rf_trained_model = NULL + , all_trained_models = NULL + ) + + rv_training_results = reactiveValues( + models = NULL + , train_metrics_df = NULL + , test_metrics_objs = NULL + , post_model_metrics_objs = NULL + , control_parameters = NULL + , tuned_parameters = NULL + ) + + # Update training results when a new model is trained + automl_controls_server( + id = "automl_controls", + rv_current = rv_current, + rv_ml_ai = rv_ml_ai, + api_base = api_base + ) + + train_model_server( + id = "train_model", + rv_current = rv_current, + rv_ml_ai = rv_ml_ai, + api_base = api_base + ) + + # End update training + # ---- (A) Detect if a complete PyCaret run is available (leaderboard displayed) ---- + .can_show_by_train <- reactive({ + curr_ds <- rv_current$dataset_id %||% rv_ml_ai$dataset_id + isTRUE(rv_ml_ai$status %in% c("Finished","Finished_NoPlots")) && + !is.null(rv_ml_ai$leaderboard) && NROW(rv_ml_ai$leaderboard) > 0 && + isTRUE(nzchar(rv_ml_ai$trained_dataset_id)) && + identical(rv_ml_ai$trained_dataset_id, curr_ds) + }) + + observeEvent(rv_current$dataset_id, { + # If we change the dataset, we clean up the transient state linked to the previous train. + if (!identical(rv_current$dataset_id, rv_ml_ai$trained_dataset_id)) { + rv_ml_ai$leaderboard <- NULL + rv_ml_ai$leaderboard_full <- NULL + rv_ml_ai$test_leaderboard <- NULL + rv_ml_ai$test_leaderboard_full <- NULL + rv_ml_ai$models <- NULL + rv_ml_ai$eval_metrics <- NULL + rv_ml_ai$eval_plots <- NULL + rv_ml_ai$status <- NULL + } + }, ignoreInit = FALSE) + + + + # ---- (B) Datasets with pre-trained models (historical) ---- + .get_models_index_csv <- function() file.path(getwd(), app_username, "logs", "models", "index.csv") + dataset_has_history <- reactive({ + idx <- .get_models_index_csv() + if (!file.exists(idx)) return(FALSE) + df <- tryCatch(read.csv(idx, stringsAsFactors = FALSE), error = function(e) NULL) + if (is.null(df) || !"dataset_id" %in% names(df)) return(FALSE) + ds <- rv_ml_ai$dataset_id %||% rv_current$dataset_id + if (is.null(ds) || !nzchar(ds)) return(FALSE) + any(df$dataset_id == ds & (df$framework %in% c("PyCaret","pycaret","Pycaret"))) + }) + + # Expose known datasets for the Deploy module (used in its selector) + observe({ + idx <- .get_models_index_csv() + if (!file.exists(idx)) return(invisible(NULL)) + df <- tryCatch(read.csv(idx, stringsAsFactors = FALSE), error = function(e) NULL) + if (is.null(df) || !"dataset_id" %in% names(df)) return(invisible(NULL)) + rv_current$known_datasets <- sort(unique(df$dataset_id)) + }) + .can_show_deploy <- reactive({ + isTRUE(.can_show_by_train()) || isTRUE(dataset_has_history()) + }) + # (keep this if you still use it on the JS side) + output$can_show_deploy <- reactive({ .can_show_deploy() }) + outputOptions(output, "can_show_deploy", suspendWhenHidden = FALSE) + + # ---- Deploy tab UI container ---- + output$deploy_container <- renderUI({ + if (!isTRUE(.can_show_deploy())) return(NULL) # => onglet totalement vide + column(width = 12, deployment_ui("deploy")) + }) + + outputOptions(output, "can_show_deploy", suspendWhenHidden = FALSE) + ## Deployed models table + rv_deploy_models = reactiveValues( + trained_models_table = NULL + ) + + ## Deployed models + rv_deployed_models = reactiveValues() + + ## Reactive values to stock AutoML leaderboard + rv_automl <- reactiveValues( + leaderboard = NULL + ) + + #### ---- App title ---------------------------------------------------- + source("server/header_footer_configs.R", local=TRUE) + app_title() + + ###-------App Footer-------------------------- + + footer_language_translation() + ###-------Menu Translate--------- + + menu_translation() + + #### ---- Change language ---------------------------------------------------- + output$change_language = change_language + + source("server/change_language_update.R", local = TRUE) + change_language_update() + + #### ---- Upload data UI -------------------------------------------- + source("ui/upload_data.R", local = TRUE) + output$upload_type = upload_type + + #### ---- Upload dataset/files UI -------------------------------------------- + source("server/input_files.R", local = TRUE) + output$input_files = input_files + + #### ---- Show uploaded datasets UI -------------------------------------------- + output$show_uploaded = show_uploaded + + #### ---- Data upload form ----------------------------------------------- + source("ui/upload_form.R", local = TRUE) + output$study_name = study_name + output$study_country = study_country + output$additional_info = additional_info + output$submit_upload = submit_upload + + #### ---- Databse and API connection warning --------------------- + db_api_con_future + + #### ---- Upload datasets ---------------------------------------- + source("server/upload_data.R", local = TRUE) + upload_data_server() + + #### ---- Database integration ---------------------------------------- + source("server/database_integration.R", local = TRUE) + database_integration_server() + + #### --- Database related form elements ---### + output$db_type = db_type + output$db_host = db_host + output$db_name = db_name + output$db_user = db_user + output$db_pwd = db_pwd + output$db_connect = db_connect + output$db_schema_list = db_schema_list + output$db_table_list = db_table_list + output$db_custom_query = db_custom_query + output$db_run_query = db_run_query + output$db_port = db_port + output$db_disconnect = db_disconnect + output$db_tab_query = db_tab_query + output$existing_connection = existing_connection + + source("server/omop_analysis.R", local = TRUE) + omop_analysis_server() + + stderr_file_path <- file.path(getwd(), app_username, "output", "dq_stderr.txt") + + stderr_content<-create_log_reader(stderr_file_path) + + + #### ---- Collect logs ---------------------------------------- + source("server/collect_logs.R", local = TRUE) + collect_logs_server() + + #### ---- Display uploaded datasets ---------------------------------------- + source("server/display_uploaded_data.R", local = TRUE) + display_uploaded_data_server() + + #### ---- Delete uploaded dadatsets ---------------------------------------- + source("server/delete_uploaded_data.R", local = TRUE) + delete_uploaded_data_server() + + #### ---- Update logfiles based on existing datasets -------------------#### + source("server/update_logs.R", local = TRUE) + update_logs_server() + + #### ---- Manage data ---------------------------------------------- + + ##### ---- Select data --------------------------------------------- + source("server/select_data.R", local = TRUE) + select_data_server() + manage_data_show_server() + + ##### ---- Display meta data for the selected dataset --------------------------------------------- + source("server/display_metadata.R", local = TRUE) + display_selected_metadata_server() + reset_display_selected_metadata_server() + + ##### ---- Currently selected data --------------------------------------------- + source("server/selected_data.R", local = TRUE) + currently_selected_data_server() + + ##### ----Generate summary stats for the row data ------------------- + source("server/manage_data_summary.R", local = TRUE) + generate_data_summary_server() + display_data_summary_server() + + #### ----- Explore data ----------------------------------------------- + source("server/explore_data.R", local = TRUE) + explore_data_server() + explore_data_subactions_server() + + ##----User Defined Visualization section----------------------- + source("ui/user_defined_visualization_header.R", local = TRUE) + output$user_output_type = user_output_type + output$user_tab_options = user_tab_options + output$user_calc_var = user_calc_var + #output$user_strata_var = user_strata_var + output$user_row_var = user_row_var + output$usr_create_cross_tab = usr_create_cross_tab + output$user_download_table = user_download_table + + output$user_table_options = user_table_options + output$user_report_numeric = user_report_numeric + output$user_add_p_value = user_add_p_value + output$user_add_confidence_interval = user_add_confidence_interval + output$user_drop_missing_values = user_drop_missing_values + output$user_table_caption = user_table_caption + + output$user_plot_options = user_plot_options + output$user_select_variable_on_x_axis = user_select_variable_on_x_axis + output$user_select_variable_on_y_axis = user_select_variable_on_y_axis + output$user_plot_title = user_plot_title + output$user_x_axis_label = user_x_axis_label + output$user_y_axis_label = user_y_axis_label + output$user_create = user_create + output$user_download = user_download + + output$user_more_plot_options = user_more_plot_options + output$user_transform_to_doughnut = user_transform_to_doughnut + output$user_select_color_variable = user_select_color_variable + output$user_select_group_variable = user_select_group_variable + output$user_visual_orientation = user_visual_orientation + output$user_bar_width = user_bar_width + output$user_line_size = user_line_size + output$user_select_line_type = user_select_line_type + output$user_add_shapes = user_add_shapes + + output$user_select_shape = user_select_shape + output$user_add_smooth = user_add_smooth + output$user_display_confidence_interval = user_display_confidence_interval + output$user_level_of_confidence_interval = user_level_of_confidence_interval + output$user_select_line_join = user_select_line_join + output$user_add_line_type = user_add_line_type + output$user_add_points = user_add_points + output$user_y_variable_summary_type = user_y_variable_summary_type + output$user_title_position = user_title_position + + output$user_size_of_plot_title = user_size_of_plot_title + output$user_axis_title_size = user_axis_title_size + output$user_facet_title_size = user_facet_title_size + output$user_axis_text_size = user_axis_text_size + output$user_data_label_size = user_data_label_size + output$user_x_axis_text_angle = user_x_axis_text_angle + output$user_legend_title = user_legend_title + output$user_stacked = user_stacked + output$user_add_density = user_add_density + output$user_remove_histogram = user_remove_histogram + output$user_select_color_variable_single = user_select_color_variable_single + output$user_select_color_parlet = user_select_color_parlet + output$user_numeric_summary = user_numeric_summary + output$user_tab_more_out = user_tab_more_out + output$user_graph_more_out = user_tab_more_out + + output$bivariate_header_label = bivariate_header_label + output$corrplot_header_label = corrplot_header_label + + output$user_select_bivariate_single_color = user_select_bivariate_single_color + output$user_select_color_parlet_bivariate = user_select_color_parlet_bivariate + output$user_select_color_parlet_corrplot = user_select_color_parlet_corrplot + output$bivariate_plot_title = bivariate_plot_title + output$corrplot_title = corrplot_title + output$user_download_autoreport = user_download_autoreport + output$user_generatebivriate = user_generatebivriate + + + + ##### ---- Explore data actions ---------------------------------- + explore_data_actions_server() + + ##### ---- Filter data -------------------------------------------- + explore_data_filter_server() + explore_data_apply_filter_server() + explore_data_current_filter_server() + + ##### ---- Show/display ------------------------------------------------------- + explore_show_data_server() + explore_data_reset_current_filter_server() + + ##### ---- Compute proportion of missing data --------------------------- + explore_missing_data_server() + + ##### ---- Select variables --------------------------------------------- + explore_data_select_variables_server() + explore_data_selected_variables_server() + + ##### ---- Update data ----------------------------------------------- + explore_data_update_data_server() + + #### ---- Transform variables -------------------------------------- #### + source("server/transform_data.R", local = TRUE) + + ##### ---- Select variables to transform ------------------------------------### + transform_data_select_variables_server() + + ##### ---- Change type -----------------------------------------------### + transform_data_change_type_server() + + ##### ---- Rename variables -----------------------------------------------### + transform_data_rename_variables_server() + + ##### ---- Recode/change value labels ---------------------------------------### + transform_data_quick_explore_recode_server() + + ##### ---- Handle missing data ---------------------------------------### + transform_data_create_missing_values_server() + + ##### ---- Identify outliers ---------------------------------------### + transform_data_identify_outliers_server() + + ##### ---- Handle missing values ---------------------------------------### + transform_data_handle_missing_values_server() + + ##### ---- Plot transform data ----------------------------------------------### + transform_data_quick_explore_plot_server() + + ##### ---- Plot missing data ----------------------------------------------### + transform_data_plot_missing_data_server() + + #### ---- Combine datasets with the existing one --------------------------------------#### + source("server/combine_data.R", local = TRUE) + + ##### ---- List of internal data ------------------------------------------#### + combine_data_list_datasets() + + ##### ---- Combine data options ------------------------------------------#### + combine_data_type() + + ##### ---- Combine data mtch type ------------------------------------------#### + combine_data_match_type() + + ##### ---- Combine data variables matched --------------------#### + combine_data_variable_matching() + + #### ----- Perform matching ---------------------------------#### + combine_data_perform_variable_match() + + ##### ---- Combine data perform merging --------------------#### + combine_data_perform_merging() + + #### ---- Reset combine data --------------------------------#### + combine_data_reset() + + ##### ---- Control Custom visualizations ------------------ ##### + source("server/user_defined_visualization.R", local = TRUE) + user_defined_server() + + ### ------- OMOP ------------------------------------------ ##### + + #### ----- Cohort Constructor ---------##### + source("server/run_cohort_pipeline.R", local = TRUE) + run_cohort_pipeline() + + #### ----- Feature Extraction ---------##### + source("server/feature_extraction_pipeline.R", local = TRUE) + feature_extraction_pipeline() + + #### ---- Achilles Integration -------------------#### + + source("server/run_achilles.R", local = TRUE) + achilles_integration_server() + + ### ---- OMOP CDM Summaries---------------------------#### + source("server/omop_summaries.R", local = TRUE) + omopVizServer() + + #### ---- Generate Research Questions --------------------------------------#### + source("server/research_questions.R", local = TRUE) + generate_research_questions_choices() + + + ##### ---- API Token ------------------ #### + generate_research_questions_api_token() + generate_research_questions_api_store() + + #### ---- Addional prompts --------------- #### + generate_research_questions_additional() + + #### ---- Generate insights using Gemini --------------- #### + generate_research_questions_gemini() + + #### ---- Machine learning and AI --------------- #### + + ##### ----- Set ML/AI UI ------------------- #### + source("server/setup_models.R", local=TRUE) + setup_models_ui() + + ##### ----- Preprocessing ------------------- #### + source("server/feature_engineering.R", local=TRUE) + + #### Preprocessing ------------------------------------------- #### + feature_engineering_perform_preprocess_server() + + #### ------ Missing value imputation -------------------------- #### + feature_engineering_recipe_server() + feature_engineering_impute_missing_server() + + #### ----- Modelling framework --------------------------------- #### + + source("server/modelling_framework.R", local=TRUE) + modelling_framework_choices() + + #### ----- Model setup ----------------------------------------- #### + source("server/model_training_setup.R", local=TRUE) + model_training_setup_server() + + #### ----- Caret models --------------------------------------- #### + source("server/model_training_caret_models.R", local=TRUE) + + ## LM/GLM + model_training_caret_models_ols_server() + + ## RF + model_training_caret_models_rf_server() + + ## GBM + model_training_caret_models_gbm_server() + + ## xgbTree + model_training_caret_models_xgbTree_server() + + ## xgbLinear + model_training_caret_models_xgbLinear_server() + + ## svmRadial + model_training_caret_models_svmRadial_server() + + ## svmLinear + model_training_caret_models_svmLinear_server() + + ## svmPoly + model_training_caret_models_svmPoly_server() + + ## glmnet + model_training_caret_models_glmnet_server() + + ## LASSO + model_training_caret_models_lasso_server() + + ## Ridge + model_training_caret_models_ridge_server() + + ## KNN + model_training_caret_models_knn_server() + + ## NNET + model_training_caret_models_nnet_server() + + ## TREEBAG + model_training_caret_models_treebag_server() + + ## avNNet + model_training_caret_models_avNNet_server() + + ## PLS + model_training_caret_models_pls_server() + + ## GAM + model_training_caret_models_gam_server() + + #### ----- Train all models ----------------------------------- #### + source("server/train_caret_models.R", local=TRUE) + model_training_caret_train_all_server() + + #### ----- Compare trained models ------------------------------ #### + source("server/compare_trained_caret_models.R", local=TRUE) + model_training_caret_train_metrics_server() + + #### ----- Deploy trained models ------------------------------- #### + source("server/deploy_trained_caret_models.R", local=TRUE) + deploy_trained_caret_models() + + #### ---- Predict using no-code models ------------------------ #### + source("server/predict_trained_caret_models.R", local=TRUE) + predict_trained_caret_models() + + #### ---- PyCaret Integration (API) ---------------------------------------------------- + + # New ADD + rv_ml_ai <- rv_ml_ai %||% reactiveValues(target = NULL, outcome = NULL) + rv_current <- rv_current %||% reactiveValues(target = NULL) + + deployment_server(id="deploy",rv_ml_ai=rv_ml_ai,rv_current = rv_current,api_base=api_base) + predict_pycaret_server("predict_pycaret", api_base , rv_current, rv_ml_ai) + + # END NEW ADD + #### ---- Call current dataset for FastAPI --------------------------------------------------- + source("server/automl_server.R", local=TRUE) + automl_server("automl_module", rv_current, rv_ml_ai) + + observe({ + req(!is.null(rv_ml_ai$modelling_framework)) # Check if value exist + + if (tolower(rv_ml_ai$modelling_framework) == "pycaret") { + output$automl_module_ui <- renderUI({ + automl_ui("automl_module") + }) + } else { + output$automl_module_ui <- renderUI({ + h4("") + }) + } + }) + + observeEvent(input$modelling_framework_choices, { + rv_ml_ai$framework <- tolower(input$modelling_framework_choices %||% "") + }, ignoreInit = FALSE) + + #### ---- Deep Learning Server ----- ### + source("server/deep_learning.R", local=TRUE) + deep_learning() + + #### ---- Reset various components --------------------------------------#### + ## Various components come before this + source("server/resets.R", local = TRUE) + + ##### ---- Reset on delete or language change ------------------- #### + reset_data_server() + + #### ---- Activate required fields --------------------------------------#### + iv$enable() + iv_url$enable() + iv_ml$enable() + + waiter_hide() }, ignoreInit = FALSE) - + waiter_hide() } diff --git a/server/anon/server_module_quant.R b/server/anon/server_module_quant.R new file mode 100644 index 0000000..23d55b9 --- /dev/null +++ b/server/anon/server_module_quant.R @@ -0,0 +1,1687 @@ +# server_module_quant.R + +anon_quant_server_logic <- function(input, output, session, rv_current = NULL) { + + # ====================================================================== + # Quant Anon — Module-safe server with coordinate-safe risk + QGIS export + # ====================================================================== + + options(shiny.maxRequestSize = 1024^3) + + # ---- DEBUG: show full stack traces inside Shiny ---- + options(shiny.fullstacktrace = TRUE) + + if (requireNamespace("rlang", quietly = TRUE)) { + options(error = function() { + message("\n--- ERROR TRACE (rlang::last_trace) ---\n") + try(print(rlang::last_trace()), silent = TRUE) + message("\n--- BASE TRACEBACK() ---\n") + traceback(2) + }) + } else { + options(error = function() { + message("\n--- BASE TRACEBACK() ---\n") + traceback(2) + }) + } + + ns <- session$ns # IMPORTANT: used for dynamic UI ids created in renderUI() + + `%||%` <- function(a, b) if (is.null(a)) b else a + + # CRITICAL FIX: avoid htmlwidgets::validate masking shiny::validate + vld <- shiny::validate + need <- shiny::need + + get_after_col <- function(q, df_after) { + anon_col <- paste0(q, "_anon") + if (anon_col %in% names(df_after)) anon_col else q + } + + # (IDs kept harmlessly for backwards-compat; landing is removed in UI) + landing_dom <- ns("landing") + dashboard_dom <- ns("dashboard") + + shinyjs::inlineCSS(" + .gauge-value { display: none !important; } + #preview-table { padding-right: 0 !important; } + ") + + # ---------- Helpers ----------------------------------------------------- + parse_ranges_text <- function(text) { + entries <- unlist(strsplit(text, ";", fixed = TRUE)) + parsed <- lapply(entries, function(e) { + e <- trimws(e) + if (e == "") return(NULL) + + parts <- strsplit(e, ":", fixed = TRUE)[[1]] + if (length(parts) != 2) stop(sprintf("Invalid entry '%s': must be of form lower-upper:label", e)) + + range_part <- trimws(parts[1]) + label <- trimws(parts[2]) + if (label == "") stop(sprintf("Label missing in entry '%s'", e)) + + bounds <- strsplit(range_part, "-", fixed = TRUE)[[1]] + if (length(bounds) == 1) { + num <- as.numeric(bounds[1]) + if (is.na(num)) stop(sprintf("Non-numeric bound in '%s'", range_part)) + lower <- num + upper <- num + } else if (length(bounds) == 2) { + lower_raw <- trimws(bounds[1]) + upper_raw <- trimws(bounds[2]) + lower <- if (lower_raw == "" || lower_raw == "-Inf") -Inf else as.numeric(lower_raw) + upper <- if (upper_raw == "" || upper_raw == "Inf") Inf else as.numeric(upper_raw) + if (is.na(lower) || is.na(upper)) stop(sprintf("Non-numeric bound in '%s'", range_part)) + } else { + stop(sprintf("Range part '%s' is malformed", range_part)) + } + + if (lower > upper) stop(sprintf("Range '%s' has lower > upper", label)) + list(lower = lower, upper = upper, label = label) + }) + + parsed <- Filter(Negate(is.null), parsed) + if (length(parsed) == 0) stop("No valid ranges found.") + + df <- do.call(rbind, lapply(parsed, function(p) { + data.frame(lower = p$lower, upper = p$upper, label = p$label, stringsAsFactors = FALSE) + })) + + df <- df[order(df$lower, df$upper), ] + if (nrow(df) > 1) { + for (i in seq_len(nrow(df) - 1)) { + if (df$upper[i] >= df$lower[i + 1]) { + stop(sprintf( + "Ranges '%s' and '%s' overlap or touch; make upper of one < lower of next.", + df$label[i], df$label[i + 1] + )) + } + } + } + df + } + + is_finite_bbox <- function(bbox) { + if (is.null(bbox)) return(FALSE) + all(is.finite(unname(as.numeric(bbox)))) + } + + nz_pos <- function(x, default = 100) { + x2 <- suppressWarnings(as.numeric(x)) + if (length(x2) == 0 || is.na(x2) || !is.finite(x2) || x2 <= 0) default else x2 + } + + is_geo_name <- function(nm) { + tolower(nm) %in% c("lat", "latitude", "lon", "long", "longitude", "geom", "geometry", + "wkt", "cell_wkt", "polygon") + } + + risk_qids <- function(qids) { + qids[!sapply(qids, is_geo_name)] + } + + drop_geo_cols <- function(dat) { + drop <- intersect(names(dat), names(dat)[sapply(names(dat), is_geo_name)]) + drop <- setdiff(drop, c("cell_wkt", "wkt", "polygon")) + dat[, setdiff(names(dat), drop), drop = FALSE] + } + + # ----- CRS safety layer ------------------------------------------------- + is_valid_utm_epsg <- function(epsg) { + if (is.na(epsg)) return(FALSE) + epsg %in% c(3857, 4326) || + (epsg >= 32601 && epsg <= 32660) || + (epsg >= 32701 && epsg <= 32760) + } + + guess_utm_epsg <- function(lon, lat) { + lon <- lon[is.finite(lon)] + lat <- lat[is.finite(lat)] + if (!length(lon) || !length(lat)) return(3857) + zone <- floor((mean(lon) + 180) / 6) + 1 + epsg <- if (mean(lat) >= 0) 32600 + zone else 32700 + zone + if (!is_valid_utm_epsg(epsg)) 3857 else epsg + } + + safe_transform <- function(obj, target_epsg) { + if (inherits(obj, "sf") && is.na(sf::st_crs(obj))) { + suppressWarnings(sf::st_crs(obj) <- 4326) + } + if (!is_valid_utm_epsg(target_epsg)) target_epsg <- 3857 + + out <- try(suppressWarnings(sf::st_transform(obj, target_epsg)), silent = TRUE) + if (inherits(out, "try-error")) { + out <- try(suppressWarnings(sf::st_transform(obj, 4326)), silent = TRUE) + if (inherits(out, "try-error")) { + out <- try(suppressWarnings(sf::st_transform(obj, 3857)), silent = TRUE) + if (inherits(out, "try-error")) return(obj) + } + } + out + } + + build_grid_agg <- function(pts_utm, cell_m) { + if (!inherits(pts_utm, "sf")) stop("pts_utm must be sf") + if (!inherits(sf::st_geometry(pts_utm), "sfc_POINT")) stop("pts_utm must be POINT geometries") + if (is.na(sf::st_crs(pts_utm))) sf::st_crs(pts_utm) <- 3857 + + cell_m <- nz_pos(cell_m, default = 100) + + bbox <- suppressWarnings(sf::st_bbox(pts_utm)) + if (!is_finite_bbox(bbox)) { + return(sf::st_sf(geometry = sf::st_sfc(), n = integer(0), crs = sf::st_crs(pts_utm))) + } + + grd <- try(sf::st_make_grid(pts_utm, cellsize = c(cell_m, cell_m), square = TRUE), silent = TRUE) + if (inherits(grd, "try-error") || length(grd) == 0) { + return(sf::st_sf(geometry = sf::st_sfc(), n = integer(0), crs = sf::st_crs(pts_utm))) + } + + grd_sf <- sf::st_sf(geometry = grd) + sf::st_crs(grd_sf) <- sf::st_crs(pts_utm) + + ints <- try(sf::st_intersects(grd_sf, pts_utm), silent = TRUE) + if (inherits(ints, "try-error")) { + return(sf::st_sf(geometry = sf::st_sfc(), n = integer(0), crs = sf::st_crs(pts_utm))) + } + + grd_sf$n <- lengths(ints) + grd_sf <- grd_sf[grd_sf$n > 0, , drop = FALSE] + grd_sf <- sf::st_make_valid(grd_sf) + grd_sf <- sf::st_zm(grd_sf, drop = TRUE, what = "ZM") + if (nrow(grd_sf)) grd_sf <- grd_sf[!sf::st_is_empty(grd_sf), , drop = FALSE] + + if (!nrow(grd_sf)) { + return(sf::st_sf(geometry = sf::st_sfc(), n = integer(0), crs = sf::st_crs(pts_utm))) + } + grd_sf + } + + if (requireNamespace("sf", quietly = TRUE)) { + sf::sf_use_s2(FALSE) + } + + # ---------- Reactives --------------------------------------------------- + raw_data <- reactiveVal() + data <- reactiveVal() + anon_data <- reactiveVal() + anonymized_cols <- reactiveVal(character()) + initial_qids <- reactiveVal(character()) + import_snip <- reactiveVal(character()) + import_stata_snip <- reactiveVal(character()) + import_py_snip <- reactiveVal(character()) + r_steps <- reactiveVal(character()) + stata_steps <- reactiveVal(character()) + python_steps <- reactiveVal(character()) + previous_data_stack <- reactiveVal(list()) + previous_r_stack <- reactiveVal(list()) + previous_stata_stack <- reactiveVal(list()) + previous_py_stack <- reactiveVal(list()) + log_steps <- reactiveVal(character()) + k_bins <- reactiveVal(list()) + gen_assigned <- reactiveVal(list()) + previous_gen_assigned_stack <- reactiveVal(list()) + last_method <- reactiveVal(NULL) + report_temp <- reactiveVal(NULL) + + r_obj_name <- reactiveVal(NULL) + py_obj_name <- reactiveVal(NULL) + + geo_preview_layer <- reactiveVal(NULL) + geo_after_layer <- reactiveVal(NULL) + geo_lat_col <- reactiveVal(NULL) + geo_lon_col <- reactiveVal(NULL) + + # Perf: cache risk metrics so they don't recompute many times + risk_before_metrics <- reactiveVal(NULL) + risk_after_metrics <- reactiveVal(NULL) + + # ====================================================================== + # Landing removed: NO continue/manual handlers here + # (Descriptions tab still works via output$descriptions_panel below) + # ====================================================================== + + # ====================================================================== + # Guard against missing input$method/input$selected_qids + # ====================================================================== + safe_method <- reactive(input$method %||% "Masking") + safe_selected_qids <- reactive(input$selected_qids %||% character()) + + # ====================================================================== + # NEW: Load data from MAIN PLATFORM (rv_current) instead of upload + # UI must provide actionButton(ns("use_platform_data"), ...) + # ====================================================================== + get_platform_df <- function() { + if (is.null(rv_current)) return(NULL) + # Try common locations used in your app + df <- rv_current$working_df %||% rv_current$data %||% rv_current$df %||% NULL + if (is.null(df)) return(NULL) + tryCatch(as.data.frame(df, stringsAsFactors = FALSE), error = function(e) NULL) + } + + init_state_from_df <- function(df, source_label = "platform_dataset") { + # object names for code panes + r_obj_name(make.names(source_label)) + py_obj_name(gsub("[^A-Za-z0-9_]", "_", source_label)) + + raw_data(df) + data(df) + anon_data(NULL) + + anonymized_cols(character()) + initial_qids(character()) + + previous_data_stack(list()) + previous_r_stack(list()) + previous_stata_stack(list()) + previous_py_stack(list()) + + log_steps(character()) + k_bins(list()) + + gen_assigned(list()) + previous_gen_assigned_stack(list()) + + geo_preview_layer(NULL) + geo_after_layer(NULL) + geo_lat_col(NULL) + geo_lon_col(NULL) + + risk_before_metrics(NULL) + risk_after_metrics(NULL) + + # Code panes: platform load note + import_snip(c( + "# Using dataset already loaded in the main platform", + "library(dplyr)", + "# (No file import step needed here)" + )) + r_steps(import_snip()) + + import_stata_snip(c( + "// Using dataset already loaded in the main platform", + "// (No file import step needed here)" + )) + stata_steps(import_stata_snip()) + + import_py_snip(c( + "# Using dataset already loaded in the main platform", + "# (No file import step needed here)" + )) + python_steps(import_py_snip()) + + shinyAce::updateAceEditor(session, "r_code_ace", value = paste(r_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "stata_code_ace", value = paste(stata_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "python_code_ace", value = paste(python_steps(), collapse = "\n\n")) + } + + observeEvent(input$use_platform_data, { + df <- get_platform_df() + if (is.null(df) || !nrow(df)) { + showNotification("No dataset found in the main platform. Upload/select data there first.", type = "error") + return() + } + init_state_from_df(df, source_label = "platform_dataset") + showNotification("Dataset loaded from the main platform.", type = "message") + }, ignoreInit = TRUE) + + # ====================================================================== + # (Optional) Keep your existing upload behavior — only runs if UI has fileInput + # ====================================================================== + observeEvent(input$file, { + req(input$file) + + fname <- input$file$name + ext <- tools::file_ext(fname) + dname_raw <- tools::file_path_sans_ext(fname) + + r_name <- make.names(dname_raw) + py_name <- gsub("[^A-Za-z0-9_]", "_", dname_raw) + r_obj_name(r_name) + py_obj_name(py_name) + + df <- switch( + tolower(ext), + csv = data.table::fread(input$file$datapath, data.table = FALSE, showProgress = FALSE), + xlsx = readxl::read_excel(input$file$datapath), + dta = haven::read_dta(input$file$datapath), + { showNotification("Unsupported file type.", type = "error"); return() } + ) + + raw_data(df) + data(df) + anon_data(NULL) + + anonymized_cols(character()) + initial_qids(character()) + + previous_data_stack(list()) + previous_r_stack(list()) + previous_stata_stack(list()) + previous_py_stack(list()) + + log_steps(character()) + k_bins(list()) + + gen_assigned(list()) + previous_gen_assigned_stack(list()) + + geo_preview_layer(NULL) + geo_after_layer(NULL) + geo_lat_col(NULL) + geo_lon_col(NULL) + + risk_before_metrics(NULL) + risk_after_metrics(NULL) + + r_pkg_base <- c("library(dplyr)", "library(sdcMicro)") + r_pkg_read <- if (tolower(ext) == "xlsx") "library(readxl)" else if (tolower(ext) == "dta") "library(haven)" else NULL + + r_read <- if (tolower(ext) == "csv") { + sprintf("%s <- read.csv(%s, stringsAsFactors = FALSE)", r_name, shQuote(fname)) + } else if (tolower(ext) == "xlsx") { + sprintf("%s <- read_excel(%s)", r_name, shQuote(fname)) + } else { + sprintf("%s <- read_dta(%s)", r_name, shQuote(fname)) + } + + import_snip(c("# Load data", r_pkg_base, r_pkg_read, r_read)) + r_steps(import_snip()) + + stata_snip <- switch( + tolower(ext), + csv = sprintf("import delimited %s, clear", shQuote(fname)), + xlsx = sprintf("import excel %s, clear", shQuote(fname)), + dta = sprintf("use %s, clear", shQuote(fname)) + ) + + import_stata_snip(c("// Load data", stata_snip)) + stata_steps(import_stata_snip()) + + python_snip <- switch( + tolower(ext), + csv = c("# Load data", "import pandas as pd", sprintf("%s = pd.read_csv(%s)", py_name, shQuote(fname))), + xlsx = c("# Load data", "import pandas as pd", sprintf("%s = pd.read_excel(%s)", py_name, shQuote(fname))), + dta = c("# Load data", "import pandas as pd", "import pyreadstat", + sprintf("%s, meta = pyreadstat.read_dta(%s)", py_name, shQuote(fname))) + ) + + import_py_snip(python_snip) + python_steps(import_py_snip()) + + shinyAce::updateAceEditor(session, "r_code_ace", value = paste(r_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "stata_code_ace", value = paste(stata_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "python_code_ace", value = paste(python_steps(), collapse = "\n\n")) + }) + + # ---------- Bin-Size Advisor ------------------------------------------- + observe({ + req(data()) + nums <- names(data())[sapply(data(), is.numeric)] + updateSelectInput( + session, "advisor_var", + choices = nums, + selected = if (length(nums) > 0) nums[1] else NULL + ) + }) + + advisor_x <- reactive({ + req(data(), input$advisor_var) + na.omit(data()[[input$advisor_var]]) + }) + + output$advisor_dist <- renderPlot({ + req(advisor_x()) + x <- advisor_x() + hist( + x, + main = paste("Histogram of", input$advisor_var), + xlab = input$advisor_var, + border = "white" + ) + }) + + output$advisor_summary <- renderPrint({ + req(advisor_x()) + x <- advisor_x() + stats <- c( + Mean = mean(x), + Median = median(x), + IQR = IQR(x), + SD = sd(x), + Min = min(x), + Max = max(x) + ) + print(stats) + }) + + bin_advice <- eventReactive(input$advisor_run, { + req(advisor_x()) + x <- advisor_x() + n <- length(x) + rng <- range(x) + range_x <- diff(rng) + iqr_x <- IQR(x) + sd_x <- sd(x) + + k_sturges <- ceiling(log2(n) + 1) + w_sturges <- range_x / k_sturges + + w_fd <- if (iqr_x > 0) 2 * iqr_x / (n^(1 / 3)) else NA + k_fd <- if (!is.na(w_fd) && w_fd > 0) ceiling(range_x / w_fd) else NA + + w_scott <- if (sd_x > 0) 3.5 * sd_x / (n^(1 / 3)) else NA + k_scott <- if (!is.na(w_scott) && w_scott > 0) ceiling(range_x / w_scott) else NA + + k_sqrt <- ceiling(sqrt(n)) + w_sqrt <- range_x / k_sqrt + + data.frame( + Method = c("Sturges", "Freedman–Diaconis", "Scott", "Square root"), + Bin_Width = c(w_sturges, w_fd, w_scott, w_sqrt), + Num_Bins = c(k_sturges, k_fd, k_scott, k_sqrt), + stringsAsFactors = FALSE + ) + }) + + output$advisor_table <- renderTable({ + df <- bin_advice() + df$Bin_Width <- round(df$Bin_Width, 2) + df + }, striped = TRUE, hover = TRUE, spacing = "l") + + output$advisor_plot <- renderPlot({ + df <- bin_advice() + req(nrow(df) > 0) + x <- advisor_x() + + old_par <- par(no.readonly = TRUE) + on.exit(par(old_par), add = TRUE) + + rows <- ceiling(nrow(df) / 2) + cols <- 2 + par(mfrow = c(rows, cols), mar = c(4, 4, 2, 1)) + + for (i in seq_len(nrow(df))) { + bw <- df$Bin_Width[i] + if (!is.finite(bw) || bw <= 0) next + brks <- seq(min(x, na.rm = TRUE), max(x, na.rm = TRUE) + bw, by = bw) + hist(x, breaks = brks, main = df$Method[i], xlab = input$advisor_var, border = "white") + } + }) + + # ---------- Risk metric calculators (cached) ---------------------------- + calc_risk_metrics <- function(df, cols) { + if (!nrow(df) || !length(cols)) return(NULL) + tbl <- df %>% + dplyr::group_by(dplyr::across(dplyr::all_of(cols))) %>% + dplyr::summarise(n = dplyr::n(), .groups = "drop") %>% + dplyr::mutate(r = 1 / n) + list( + avg = mean(tbl$r), + max = max(tbl$r), + pct_unique = mean(tbl$n == 1) + ) + } + + observeEvent(list(data(), initial_qids()), { + req(data(), initial_qids()) + q <- risk_qids(initial_qids()) + if (!length(q)) { risk_before_metrics(NULL); return() } + risk_before_metrics(calc_risk_metrics(data(), q)) + }, ignoreInit = TRUE) + + observeEvent(list(anon_data(), initial_qids()), { + req(anon_data(), initial_qids()) + q <- risk_qids(initial_qids()) + if (!length(q)) { risk_after_metrics(NULL); return() } + df_a <- anon_data() + after_cols <- sapply(q, get_after_col, df_after = df_a, USE.NAMES = FALSE) + risk_after_metrics(calc_risk_metrics(df_a, after_cols)) + }, ignoreInit = TRUE) + + # ---------- Risk AFTER (coords excluded) -------------------------------- + output$risk_after <- renderUI({ + req(anon_data(), initial_qids()) + q <- risk_qids(initial_qids()) + vld(need(length(q) > 0, "Select non-coordinate QIDs.")) + + m <- risk_after_metrics() + req(m) + + tags$p(sprintf( + "After: Average Risk: %.4f; Maximum Risk: %.4f; Percentage Unique: %.4f%%", + m$avg, m$max, m$pct_unique * 100 + )) + }) + + output$gauge_after <- flexdashboard::renderGauge({ + req(anon_data(), initial_qids()) + q <- risk_qids(initial_qids()) + vld(need(length(q) > 0, "Select non-coordinate QIDs.")) + + m <- risk_after_metrics() + req(m) + + pct <- round(m$avg * 100, 2) + flexdashboard::gauge( + pct, min = 0, max = 100, symbol = "%", + sectors = flexdashboard::gaugeSectors(success = c(0, 20), warning = c(20, 50), danger = c(50, 100)), + label = sprintf("%.2f%%", pct), abbreviate = FALSE + ) + }) + + output$gauge_after_value <- renderText({ + req(anon_data(), initial_qids()) + q <- risk_qids(initial_qids()) + vld(need(length(q) > 0, "Select non-coordinate QIDs.")) + + m <- risk_after_metrics() + req(m) + + sprintf("%.2f%%", round(m$avg * 100, 2)) + }) + + # ---------- Descriptions (TRANSLATABLE) ------------------------------------ + app_dir <- shiny::getShinyOption("appDir") + if (is.null(app_dir) || !nzchar(app_dir)) app_dir <- getwd() + + manual2_rmd <- normalizePath( + file.path(app_dir, "server", "anon", "docs", "descriptions1.Rmd"), + mustWork = FALSE + ) + + manual2_html <- normalizePath( + file.path(app_dir, "server", "anon", "www", "descriptions1.html"), + mustWork = FALSE + ) + + + # Point to the SAME excel file your get_rv_labels() uses + labels_xlsx <- normalizePath( + file.path(app_dir, "labelling_file_with_manual_full.xlsx"), + mustWork = FALSE + ) + + # ---- IMPORTANT: define a *reactive* language getter used by the rest of the app ---- + # Replace the body of this function with your app's real language source. + get_current_language <- reactive({ + # Common patterns (pick the one that matches your app): + # input$change_language + # input$language + # rv_labels$language + # rv_translation$lang + + # BEST fallback (won't break even if input doesn't exist): + lang <- NULL + if (!is.null(input$change_language) && nzchar(input$change_language)) lang <- input$change_language + if (!is.null(input$language) && nzchar(input$language)) lang <- input$language + if (is.null(lang)) lang <- "English" + + lang + }) + + output$descriptions_panel <- renderUI({ + lang <- get_current_language() # <- THIS makes it reactive to language changes + req(file.exists(manual2_rmd)) + req(file.exists(labels_xlsx)) + + out_dir <- tempdir() + + # Create a language-specific output name so it doesn't reuse the old HTML + out_file <- file.path(out_dir, paste0("descriptions1_", lang, ".html")) + + ok <- TRUE + tryCatch({ + rmarkdown::render( + input = manual2_rmd, + output_file = basename(out_file), + output_dir = out_dir, + output_format = "html_document", + params = list( + language = lang, + labels_path = labels_xlsx + ), + envir = new.env(parent = globalenv()), + quiet = TRUE + ) + }, error = function(e) { + ok <<- FALSE + showNotification(paste("Descriptions render error:", e$message), type = "error") + }) + + if (!ok) return(NULL) + + # Resource path must be unique per language (and optionally per render) + res_name_tmp <- paste0("anon_docs_tmp_", gsub("[^A-Za-z0-9]", "_", lang), "_", session$token) + addResourcePath(res_name_tmp, out_dir) + + # Cache-bust so iframe reloads when switching languages + tags$iframe( + src = paste0(res_name_tmp, "/", basename(out_file), "?v=", as.integer(Sys.time())), + style = "width:100%; height:calc(100vh - 150px); border:none;" + ) + }) + + + + output$descriptions_panel <- renderUI({ + res_name_html <- paste0("manuals2_", gsub("[^A-Za-z0-9]", "_", landing_dom)) + res_name_tmp <- paste0("manuals2_tmp_", gsub("[^A-Za-z0-9]", "_", landing_dom)) + + if (file.exists(manual2_html)) { + addResourcePath(res_name_html, normalizePath(file.path("..", "Anon", "www"), mustWork = TRUE)) + tags$iframe( + src = paste0(res_name_html, "/", basename(manual2_html)), + style = "width:100%; height:calc(100vh - 150px); border:none;" + ) + + } else if (file.exists(manual2_rmd)) { + out_dir <- tempdir() + out_file <- file.path(out_dir, "descriptions1.html") + ok <- TRUE + + tryCatch({ + rmarkdown::render( + manual2_rmd, + output_file = basename(out_file), + output_dir = out_dir, + output_format = "html_document", + quiet = TRUE + ) + }, error = function(e) { + ok <<- FALSE + showNotification(paste("Manual render error:", e$message), type = "error") + }) + + if (!ok) return(NULL) + addResourcePath(res_name_tmp, out_dir) + + tags$iframe( + src = paste0(res_name_tmp, "/", basename(out_file)), + style = "width:100%; height:calc(100vh - 150px); border:none;" + ) + + } else { + tags$div(style = "padding:10px;", "Manual not available.") + } + }) + + # ---------- Suppress & Remove Direct Identifiers ------------------------ + output$identifier_selector <- renderUI({ + req(data()) + tagList( + checkboxGroupInput(ns("direct_ids"), "Select Direct Identifiers to Remove:", choices = names(data())), + actionButton(ns("remove_ids"), "Suppress & Remove Identifiers", class = "btn btn-danger btn-block") + ) + }) + + observeEvent(input$remove_ids, { + req(data(), input$direct_ids) + + previous_data_stack(c(previous_data_stack(), list(if (is.null(anon_data())) data() else anon_data()))) + previous_r_stack(c(previous_r_stack(), list(r_steps()))) + previous_stata_stack(c(previous_stata_stack(), list(stata_steps()))) + previous_py_stack(c(previous_py_stack(), list(python_steps()))) + + df2 <- data()[, !names(data()) %in% input$direct_ids, drop = FALSE] + data(df2) + anon_data(NULL) + anonymized_cols(character()) + initial_qids(character()) + + risk_before_metrics(NULL) + risk_after_metrics(NULL) + + cols <- input$direct_ids + r_name <- r_obj_name() %||% "platform_dataset" + py_name <- py_obj_name() %||% "platform_dataset" + + code_r <- paste0( + "# Suppression\nlibrary(dplyr)\n", + r_name, " <- ", r_name, " %>% dplyr::select(-", paste(cols, collapse = ", -"), ")" + ) + code_s <- paste0("// Suppression\n", "drop ", paste(cols, collapse = " ")) + code_py <- paste0( + "# Suppression\nimport pandas as pd\n", + py_name, ".drop(columns=[", paste(shQuote(cols), collapse = ", "), "], inplace=True)" + ) + + r_steps(c(r_steps(), code_r)) + stata_steps(c(stata_steps(), code_s)) + python_steps(c(python_steps(), code_py)) + log_steps(c(log_steps(), paste(Sys.time(), "- Suppressed IDs"))) + + shinyAce::updateAceEditor(session, "r_code_ace", value = paste(r_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "stata_code_ace", value = paste(stata_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "python_code_ace", value = paste(python_steps(), collapse = "\n\n")) + + showNotification("Identifiers suppressed & removed.", type = "message") + }) + + # ---------- QID picker & sync ------------------------------------------- + output$bucket_ui <- renderUI({ + req(data()) + avail <- setdiff(names(data()), safe_selected_qids()) + + sortable::bucket_list( + header = "Drag variables into QID bucket", + group_name = ns("qid_group"), + orientation = "horizontal", + sortable::add_rank_list("Available Variables", ns("available_vars"), labels = avail), + sortable::add_rank_list("Selected QIDs", ns("selected_qids"), labels = initial_qids()) + ) + }) + + observeEvent(input$selected_qids, { + initial_qids(input$selected_qids %||% character()) + }, ignoreNULL = FALSE) + + observe({ + req(initial_qids()) + if (!isTRUE(safe_method() == "Generalization")) return() + + choices <- initial_qids() + if (length(choices) == 0) return() + + current <- isolate(input$gen_var) + if (is.null(current) || !(current %in% choices)) { + updateSelectInput(session, "gen_var", choices = choices, selected = choices[1]) + } else { + updateSelectInput(session, "gen_var", choices = choices, selected = current) + } + }) + + # ---------- Technique parameters UI (server side) ----------------------- + output$k_num_picker <- renderUI({ + req(data(), initial_qids()) + nq <- initial_qids()[sapply(data()[, initial_qids(), drop = FALSE], is.numeric)] + if (length(nq) == 0) return(helpText("No numeric QIDs to bucket.")) + selectInput(ns("k_bucket_var"), "Numeric QID to bucket:", choices = nq, selected = nq[1]) + }) + + output$extra_input <- renderUI({ + req(data()) + cols <- names(data()) + + switch( + safe_method(), + + "Masking" = checkboxGroupInput(ns("mask_cols"), "Columns to mask:", choices = cols), + "Suppression" = checkboxGroupInput(ns("supp_cols"), "Columns to suppress:", choices = cols), + "Pseudonymization" = checkboxGroupInput(ns("ps_cols"), "Columns to pseudonymize:", choices = cols), + "Tokenization" = checkboxGroupInput(ns("tok_cols"), "Columns to tokenize:", choices = cols), + + "Bucketing" = tagList( + selectInput(ns("bucket_col"), "Column to bucket:", choices = cols), + numericInput(ns("bin_interval"), "Bin size:", value = 4, min = 1) + ), + + "K-Anonymity" = tagList( + uiOutput(ns("k_num_picker")), + numericInput(ns("k_bin_size"), "Bin size:", value = 5, min = 1), + numericInput(ns("k_value"), "k threshold:", value = 2, min = 2) + ), + + "L-Diversity" = tagList( + selectInput(ns("sensitive_attr"), "Sensitive attribute:", choices = cols), + numericInput(ns("l_value"), "l threshold:", value = 2, min = 2) + ), + + "T-Closeness" = tagList( + selectInput(ns("sensitive_attr_tc"), "Sensitive attribute:", choices = cols), + numericInput(ns("t_threshold"), "t threshold:", value = 0.1, min = 0, step = 0.01) + ), + + "Generalization" = tagList( + selectInput(ns("gen_var"), "Variable to generalize:", choices = initial_qids()), + uiOutput(ns("gen_groups_ui")) + ), + + "Anonymize Coordinates" = tagList( + selectInput(ns("geo_lat_col"), "Latitude column:", choices = cols), + selectInput(ns("geo_lon_col"), "Longitude column:", choices = cols), + radioButtons( + ns("geo_mode"), "Mode:", + choices = c("Truncate decimals" = "truncate", "Aggregate to polygons" = "aggregate"), + selected = "aggregate", inline = TRUE + ), + conditionalPanel( + condition = sprintf("input['%s'] == 'truncate'", ns("geo_mode")), + numericInput(ns("geo_decimals"), "Keep this many decimals:", value = 3, min = 0, step = 1), + helpText("Truncation (not rounding): reduces precision to the specified number of decimals.") + ), + conditionalPanel( + condition = sprintf("input['%s'] == 'aggregate'", ns("geo_mode")), + numericInput(ns("geo_grid_m"), "Grid cell size (meters):", value = 500, min = 10, step = 10), + helpText("Points are snapped to the grid cell centroid; polygons are drawn on the map.") + ), + helpText("Preview: original points + faint preview (for truncate). Apply: dataset updated; polygons drawn.") + ), + + NULL + ) + }) + + # ---------- Apply anonymization (incl. GEO) -------------------------------- + observeEvent(input$apply, { + req(data(), input$method) + if (input$method != "Anonymize Coordinates") req(initial_qids()) + + last_method(input$method) + + previous_data_stack(c(previous_data_stack(), list(if (is.null(anon_data())) data() else anon_data()))) + previous_r_stack(c(previous_r_stack(), list(r_steps()))) + previous_stata_stack(c(previous_stata_stack(), list(stata_steps()))) + previous_py_stack(c(previous_py_stack(), list(python_steps()))) + + df <- if (is.null(anon_data())) data() else anon_data() + code_r <- code_s <- code_py <- NULL + step_cols <- NULL + r_name <- r_obj_name() %||% "platform_dataset" + py_name <- py_obj_name() %||% "platform_dataset" + + if (input$method == "Masking") { + step_cols <- input$mask_cols + if (length(step_cols) == 0) { showNotification("Select columns to mask.", type="error"); return() } + + df[step_cols] <- lapply(df[step_cols], function(x) + ifelse(is.na(x), NA_character_, strrep("*", 10)) + ) + + code_r <- paste0( + "# Masking (strings & numerics)\nlibrary(dplyr)\n", + r_name, " <- ", r_name, " %>% dplyr::mutate(across(all_of(c(", + paste(shQuote(step_cols), collapse = ", "), + ")), ~ ifelse(is.na(.), NA_character_, strrep(\"*\", 10))))" + ) + + code_s <- paste0( + "// Masking (strings & numerics)\n", + "foreach v of varlist ", paste(step_cols, collapse = " "), " {\n", + " capture confirm numeric variable `v'\n", + " if !_rc { tostring `v', replace force }\n", + " replace `v' = \"**********\" if !missing(`v')\n", + "}" + ) + + code_py <- paste0( + "# Masking (strings & numerics)\n", + "import pandas as pd\n", + "for col in [", paste(shQuote(step_cols), collapse = ", "), "]:\n", + " ", py_name, "[col] = ", py_name, "[col].apply(lambda x: None if pd.isna(x) else '*'*10)" + ) + + } else if (input$method == "Suppression") { + step_cols <- input$supp_cols + if (length(step_cols) == 0) { showNotification("Select columns to suppress.", type="error"); return() } + + df <- df[, !names(df) %in% step_cols, drop = FALSE] + + code_r <- paste0( + "# Suppression\nlibrary(dplyr)\n", + r_name, " <- ", r_name, " %>% dplyr::select(-", paste(step_cols, collapse = ", -"), ")" + ) + code_s <- paste0("// Suppression\n", "drop ", paste(step_cols, collapse = " ")) + code_py <- paste0( + "# Suppression\nimport pandas as pd\n", + py_name, ".drop(columns=[", paste(shQuote(step_cols), collapse = ", "), "], inplace=True)" + ) + + } else if (input$method == "Bucketing") { + step_cols <- input$bucket_col; b <- input$bin_interval + if (is.null(step_cols) || is.null(b)) { showNotification("Choose a column and bin size.", type="error"); return() } + + vals <- df[[step_cols]] + if (!is.numeric(vals)) { showNotification("Bucketing requires numeric column.", type = "error"); return() } + + minv <- suppressWarnings(min(vals, na.rm = TRUE)); maxv <- suppressWarnings(max(vals, na.rm = TRUE)) + if (!is.finite(minv) || !is.finite(maxv)) { showNotification("No finite values to bucket.", type="error"); return() } + + start <- floor(minv / b) * b; end <- ceiling((maxv + 1) / b) * b + brks <- seq(start, end, by = b) + lbls <- paste0(head(brks, -1), "-", brks[-1] - 1) + + df[[step_cols]] <- cut(vals, breaks = brks, labels = lbls, include.lowest = TRUE, right = FALSE) + + code_r <- paste0( + "# Bucketing\nlibrary(dplyr)\n", + r_name, " <- ", r_name, " %>% dplyr::mutate(", step_cols, " = cut(", step_cols, ",\n", + " breaks = seq(", start, ", ", end, ", by=", b, "),\n", + " labels = c(", paste(shQuote(lbls), collapse = ", "), "), right=FALSE, include_lowest=TRUE))" + ) + + code_s <- paste0( + "// Bucketing\n", + "gen long __b = floor(", step_cols, "/", b, ")*", b, "\n", + "tostring __b, gen(__bstr)\n", + "gen long __e = __b + ", b, " - 1\n", + "tostring __e, gen(__estr)\n", + "replace ", step_cols, " = __bstr + \"-\" + __estr if !missing(", step_cols, ")\n", + "drop __b __e __bstr __estr" + ) + + code_py <- paste0( + "# Bucketing\nimport pandas as pd\nimport numpy as np\n", + "b = ", b, "\n", + "minv = int(np.floor(", py_name, "['", step_cols, "'].min()/b)*b)\n", + "maxv = int(np.ceil((", py_name, "['", step_cols, "'].max()+1)/b)*b)\n", + "bins = list(range(minv, maxv+1, b))\n", + "labels = [f\"{bins[i]}-{bins[i+1]-1}\" for i in range(len(bins)-1)]\n", + py_name, "['", step_cols, "'] = pd.cut(", py_name, "['", step_cols, "'], bins=bins, labels=labels, right=False, include_lowest=True)" + ) + + } else if (input$method == "Pseudonymization") { + step_cols <- input$ps_cols + if (length(step_cols) == 0) { showNotification("Select columns to pseudonymize.", type="error"); return() } + + salt_vec <- uuid::UUIDgenerate(n = nrow(df)) + hash_vec <- function(values, salts) { + mapply(function(v, s) digest::digest(paste0(as.character(v), s), algo = "sha256"), + values, salts, USE.NAMES = FALSE) + } + + for (col in step_cols) { + x <- df[[col]] + df[[col]] <- ifelse(is.na(x), NA_character_, hash_vec(x, salt_vec)) + } + + code_r <- "# Pseudonymization applied in-app" + code_s <- "// Pseudonymization\n// no direct Stata analogue" + code_py <- "# Pseudonymization applied in-app" + + } else if (input$method == "Tokenization") { + step_cols <- input$tok_cols + if (length(step_cols) == 0) { showNotification("Select columns to tokenize.", type="error"); return() } + + df <- dplyr::mutate( + df, + dplyr::across( + dplyr::all_of(step_cols), + ~ ifelse(is.na(.x), NA_character_, stringi::stri_rand_strings(length(.x), 10, pattern = "[A-Za-z0-9]")) + ) + ) + + code_r <- "# Tokenization applied in-app" + code_s <- "// Tokenization\n// no direct Stata analogue" + code_py <- "# Tokenization applied in-app" + + } else if (input$method == "K-Anonymity") { + qids_all <- initial_qids() + k_val <- as.integer(input$k_value) + var_now <- input$k_bucket_var + bin_size <- as.integer(input$k_bin_size) + + vld( + need(length(qids_all) > 0, "Select QIDs in step 2 first."), + need(!is.na(k_val) && k_val >= 2, "k must be ≥ 2") + ) + + bins <- k_bins() + if (!is.null(var_now) && !is.na(bin_size)) { bins[[var_now]] <- bin_size; k_bins(bins) } + + bucket_one <- function(x, b) { + if (!is.numeric(x)) return(x) + rng <- range(x, na.rm = TRUE) + if (!all(is.finite(rng))) return(x) + start <- floor(rng[1]/b)*b + end <- ceiling((rng[2]+1)/b)*b + cut(x, breaks = seq(start, end, by = b), right = FALSE, include.lowest = TRUE, + labels = sprintf("%d-%d", head(seq(start, end, by=b), -1), seq(start, end, by=b)[-1]-1)) + } + + if (length(bins)) for (nm in names(bins)) if (nm %in% names(df)) df[[nm]] <- bucket_one(df[[nm]], bins[[nm]]) + k_qids_use <- intersect(names(bins), qids_all) + vld(need(length(k_qids_use) > 0, "Bucket at least one numeric QID before applying k-anonymity.")) + + grouped_sizes <- df %>% + dplyr::group_by(dplyr::across(dplyr::all_of(k_qids_use))) %>% + dplyr::tally(name=".__size__") + + df_tagged <- df %>% + dplyr::left_join(grouped_sizes, by = k_qids_use) %>% + dplyr::mutate(.__ok__ = .__size__ >= k_val) + + df_ok <- df_tagged %>% dplyr::filter(.__ok__) %>% dplyr::select(-.__ok__, -.__size__) + df_bad <- df_tagged %>% dplyr::filter(!.__ok__) %>% dplyr::select(-.__ok__, -.__size__) + df <- dplyr::bind_rows(df_ok, df_bad) + + anon_data(df) + anonymized_cols(union(anonymized_cols(), k_qids_use)) + + code_r <- "# K-Anonymity applied in-app" + code_s <- "* no Stata analogue" + code_py <- "# no Python analogue" + + } else if (input$method == "T-Closeness") { + step_cols <- risk_qids(initial_qids()) + vld(need(length(step_cols) > 0, "Select non-coordinate QIDs.")) + + df <- apply_t_closeness(df, qids = step_cols, sensitive = input$sensitive_attr_tc, t = input$t_threshold) + + code_r <- "# T-Closeness applied in-app" + code_s <- "// T-Closeness\n// no direct Stata analogue" + code_py <- "# T-Closeness applied in-app" + + } else if (input$method == "Anonymize Coordinates") { + + latc <- input$geo_lat_col; lonc <- input$geo_lon_col + + vld( + need(!is.null(latc) && !is.null(lonc), "Pick latitude & longitude columns first."), + need(latc %in% names(df) && lonc %in% names(df), "Invalid coordinate columns."), + need(is.numeric(df[[latc]]), "Latitude must be numeric."), + need(is.numeric(df[[lonc]]), "Longitude must be numeric.") + ) + + pts_df <- df[, c(lonc, latc), drop = FALSE] + names(pts_df) <- c("lon","lat") + comp_mask_full <- stats::complete.cases(pts_df) + pts_df <- pts_df[comp_mask_full, , drop = FALSE] + + if (!nrow(pts_df)) { + showNotification("No valid coordinate rows to anonymize.", type="error"); return() + } + + pts_wgs <- sf::st_as_sf(pts_df, coords = c("lon","lat"), crs = 4326) + xy <- sf::st_coordinates(pts_wgs) + epsg <- guess_utm_epsg(xy[,1], xy[,2]) + pts_utm <- safe_transform(pts_wgs, epsg) + + mode <- input$geo_mode %||% "aggregate" + cell_wkt_full <- rep(NA_character_, nrow(df)) + + if (mode == "truncate") { + d <- max(0, suppressWarnings(as.integer(input$geo_decimals))); if (is.na(d)) d <- 3 + trunc_dec <- function(x, d) { f <- 10^d; sign(x) * floor(abs(x) * f) / f } + + xy_wgs <- sf::st_coordinates(safe_transform(pts_utm, 4326)) + lon_a <- trunc_dec(xy_wgs[,1], d) + lat_a <- trunc_dec(xy_wgs[,2], d) + + lat_mean <- mean(lat_a, na.rm = TRUE) + m_per_deg_lat <- 111320 + m_per_deg_lon <- 111320 * cos(lat_mean * pi/180) + cell_m <- nz_pos(min(m_per_deg_lat, m_per_deg_lon) / (10^d), 100) + + agg <- build_grid_agg(pts_utm, cell_m) + agg_wgs <- safe_transform(agg, 4326) + geo_after_layer(agg_wgs) + + if (nrow(agg)) { + join_ix <- sf::st_intersects(pts_utm, agg) + agg_wkt <- sf::st_as_text(sf::st_geometry(agg_wgs)) + + cell_wkt_new <- rep(NA_character_, nrow(pts_utm)) + for (i in seq_len(nrow(pts_utm))) { + cell_idx <- if (length(join_ix[[i]]) >= 1) join_ix[[i]][1] else NA_integer_ + if (is.finite(cell_idx)) cell_wkt_new[i] <- agg_wkt[cell_idx] + } + + df_rows_idx <- which(comp_mask_full) + df[[lonc]][df_rows_idx] <- lon_a + df[[latc]][df_rows_idx] <- lat_a + cell_wkt_full[df_rows_idx] <- cell_wkt_new + } else { + showNotification("No grid cells created (empty). Check decimals or data extent.", type="warning") + } + + anonymized_cols(union(anonymized_cols(), c(latc, lonc, "cell_wkt"))) + showNotification("Coordinate anonymization (truncate) applied.", type = "message") + + } else if (mode == "aggregate") { + gsize <- nz_pos(input$geo_grid_m, 500) + + agg <- build_grid_agg(pts_utm, gsize) + agg_wgs <- safe_transform(agg, 4326) + geo_after_layer(agg_wgs) + + if (nrow(agg)) { + join_ix <- sf::st_intersects(pts_utm, agg) + + cents <- sf::st_centroid(agg) + cents_wgs <- safe_transform(cents, 4326) + cxy <- sf::st_coordinates(cents_wgs) + + agg_wkt <- sf::st_as_text(sf::st_geometry(agg_wgs)) + + lon_new <- rep(NA_real_, nrow(pts_utm)) + lat_new <- rep(NA_real_, nrow(pts_utm)) + cell_wkt_new <- rep(NA_character_, nrow(pts_utm)) + + for (i in seq_len(nrow(pts_utm))) { + cell_idx <- if (length(join_ix[[i]]) >= 1) join_ix[[i]][1] else NA_integer_ + if (is.finite(cell_idx)) { + lon_new[i] <- cxy[cell_idx, 1] + lat_new[i] <- cxy[cell_idx, 2] + cell_wkt_new[i] <- agg_wkt[cell_idx] + } + } + + df_rows_idx <- which(comp_mask_full) + df[[lonc]][df_rows_idx] <- lon_new + df[[latc]][df_rows_idx] <- lat_new + cell_wkt_full[df_rows_idx] <- cell_wkt_new + + } else { + showNotification("No grid cells created (empty). Check grid size or data extent.", type="warning") + } + + anonymized_cols(union(anonymized_cols(), c(latc, lonc, "cell_wkt"))) + showNotification("Coordinate anonymization (aggregate to polygons) applied.", type = "message") + + } else { + showNotification("Unsupported mode selected.", type = "error"); return() + } + + df$cell_wkt <- cell_wkt_full + df <- df[, setdiff(names(df), c(lonc, latc)), drop = FALSE] + + anon_data(df) + log_steps(c(log_steps(), paste(Sys.time(), "- Applied Anonymize Coordinates (mode:", mode, ")"))) + geo_preview_layer(NULL) + + code_r <- "# Anonymize Coordinates applied in-app (cell_wkt added; lat/lon dropped)" + code_s <- "* no direct Stata analogue" + code_py <- "# Anonymize Coordinates applied (cell_wkt added; lat/lon dropped)" + } + + if (!is.null(step_cols) && input$method %in% c( + "Masking","Suppression","Bucketing","Pseudonymization","Tokenization","T-Closeness" + )) { + anon_data(df) + anonymized_cols(union(anonymized_cols(), step_cols)) + } + + if (!is.null(code_r)) r_steps( c(r_steps(), code_r)) + if (!is.null(code_s)) stata_steps(c(stata_steps(), code_s)) + if (!is.null(code_py)) python_steps(c(python_steps(), code_py)) + + if (input$method != "Anonymize Coordinates") { + log_steps(c(log_steps(), paste(Sys.time(), "- Applied", input$method))) + } + + shinyAce::updateAceEditor(session, "r_code_ace", value = paste(r_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "stata_code_ace", value = paste(stata_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "python_code_ace", value = paste(python_steps(), collapse = "\n\n")) + }) + + # ---------- K-Report -------------------------------------------------------- + output$k_report <- renderUI({ + req(last_method()) + if (last_method() == "K-Anonymity") { + bins <- k_bins(); k_val <- input$k_value + tags$div( + tags$h4("K-Anonymity Report"), + tags$p(paste0("Threshold k = ", k_val)), + if (length(bins) > 0) + tags$p(paste0("Bucket sizes: ", + paste(paste0(names(bins)," = ",bins), collapse=", "))) + ) + } + }) + + # ---------- Generalization UI & Logic -------------------------------------- + output$gen_groups_ui <- renderUI({ + req(input$gen_var) + working <- if (!is.null(anon_data()) && input$gen_var %in% names(anon_data())) anon_data() else data() + is_num <- is.numeric(working[[input$gen_var]]) + default_mode <- if (is_num) "numeric" else "categorical" + + tagList( + radioButtons( + ns("gen_mode"), "Generalization mode:", + choices = c("Categorical (drag & drop)" = "categorical", + "Custom numeric ranges" = if (is_num) "numeric" else NULL), + selected = default_mode, inline = TRUE + ), + + conditionalPanel( + condition = sprintf("input['%s'] == 'categorical'", ns("gen_mode")), + { + cats <- unique(as.character(working[[input$gen_var]])) + tagList( + sortable::bucket_list( + header = "Drag values to collapse", + group_name = ns("gen_group"), + orientation= "horizontal", + sortable::add_rank_list("Available categories", ns("gen_available"), labels = cats), + sortable::add_rank_list("Selected categories", ns("gen_selected"), labels = NULL) + ), + textInput(ns("gen_new_label"), "New label for selected categories:"), + actionButton(ns("apply_generalization"), "Apply Generalization", class = "btn btn-primary btn-block") + ) + } + ), + + conditionalPanel( + condition = sprintf("input['%s'] == 'numeric'", ns("gen_mode")), + tagList( + helpText("Define numeric buckets: e.g., '0-10:Group 1;11-40:Group 2;41-100:Group 3'"), + textInput(ns("gen_ranges_text"), "Ranges (lower-upper:label; semicolon separated):", + value = "0-10:Group 1;11-40:Group 2;41-100:Group 3"), + helpText("Use '-Inf' or 'Inf' for open bounds. Ranges must not overlap or touch."), + actionButton(ns("apply_generalization"), "Apply Generalization", class = "btn btn-primary btn-block") + ) + ) + ) + }) + + observeEvent(input$apply_generalization, { + req(data(), input$gen_var, input$gen_mode) + last_method("Generalization") + + previous_data_stack(c(previous_data_stack(), list(if (is.null(anon_data())) data() else anon_data()))) + previous_r_stack(c(previous_r_stack(), list(r_steps()))) + previous_stata_stack(c(previous_stata_stack(), list(stata_steps()))) + previous_py_stack(c(previous_py_stack(), list(python_steps()))) + previous_gen_assigned_stack(c(previous_gen_assigned_stack(), list(gen_assigned()))) + + df <- if (is.null(anon_data())) data() else anon_data() + var <- input$gen_var + code_r <- code_s <- code_py <- NULL + + if (input$gen_mode == "categorical") { + sel <- input$gen_selected; lab <- input$gen_new_label + if (is.null(sel) || length(sel) == 0) { showNotification("No categories selected to generalize.", type = "error"); return() } + if (is.null(lab) || trimws(lab) == "") { showNotification("Provide a new label.", type = "error"); return() } + + ga <- gen_assigned(); ga[[var]] <- unique(c(ga[[var]] %||% character(), sel)); gen_assigned(ga) + df[[var]] <- as.character(df[[var]]); df[[var]][ df[[var]] %in% sel ] <- lab + + anon_data(df) + anonymized_cols(union(anonymized_cols(), var)) + + code_r <- "# Generalization (categorical) applied in-app" + code_s <- "// Generalization\n// no direct Stata analogue" + code_py <- "# Generalization applied in-app" + + } else if (input$gen_mode == "numeric") { + req(input$gen_ranges_text); range_txt <- input$gen_ranges_text + ranges_df <- tryCatch({ parse_ranges_text(range_txt) }, error = function(e) { + showNotification(paste("Range parse error:", e$message), type = "error"); NULL + }) + if (is.null(ranges_df)) return() + if (!is.numeric(df[[var]])) { showNotification(sprintf("Variable '%s' must be numeric.", var), type = "error"); return() } + + x <- df[[var]] + generalized <- rep(NA_character_, length(x)) + + for (i in seq_len(nrow(ranges_df))) { + lower <- ranges_df$lower[i]; upper <- ranges_df$upper[i]; label <- as.character(ranges_df$label[i]) + in_range <- (x >= lower) & (x <= upper) + if (is.infinite(lower) && lower < 0) in_range <- x <= upper + if (is.infinite(upper) && upper > 0) in_range <- x >= lower + generalized[in_range] <- label + } + + df[[var]] <- generalized + anon_data(df) + anonymized_cols(union(anonymized_cols(), var)) + + code_r <- "# Generalization (numeric ranges) applied in-app" + code_s <- "// Generalization\n// no direct Stata analogue" + code_py <- "# Generalization applied in-app" + } + + if (!is.null(code_r)) r_steps(c(r_steps(), code_r)) + if (!is.null(code_s)) stata_steps(c(stata_steps(), code_s)) + if (!is.null(code_py)) python_steps(c(python_steps(), code_py)) + log_steps(c(log_steps(), paste(Sys.time(), "- Applied generalization (mode:", input$gen_mode, ") to", var))) + + shinyAce::updateAceEditor(session, "r_code_ace", value = paste(r_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "stata_code_ace", value = paste(stata_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session, "python_code_ace", value = paste(python_steps(), collapse = "\n\n")) + + showNotification("Generalization applied.", type = "message") + }) + + # ---------- Copy buttons ---------------------------------------------------- + observeEvent(input$copy_r, { + shinyjs::runjs(sprintf("copyAce('%s','%s')", ns("r_code_ace"), ns("copy_r"))) + }) + observeEvent(input$copy_stata, { + shinyjs::runjs(sprintf("copyAce('%s','%s')", ns("stata_code_ace"), ns("copy_stata"))) + }) + observeEvent(input$copy_py, { + shinyjs::runjs(sprintf("copyAce('%s','%s')", ns("python_code_ace"), ns("copy_py"))) + }) + + # ---------- Undo & Reset ---------------------------------------------------- + observeEvent(input$undo, { + prev <- previous_data_stack(); pr <- previous_r_stack() + ps <- previous_stata_stack(); pp <- previous_py_stack() + if (length(prev) > 0) { + idx <- length(prev) + anon_data(prev[[idx]]) + r_steps(pr[[idx]]); stata_steps(ps[[idx]]); python_steps(pp[[idx]]) + previous_data_stack(prev[-idx]); previous_r_stack(pr[-idx]) + previous_stata_stack(ps[-idx]); previous_py_stack(pp[-idx]) + log_steps(c(log_steps(), paste(Sys.time(), "- Undid last step"))) + + pgs <- previous_gen_assigned_stack() + if (length(pgs) > 0) { + gen_assigned(pgs[[length(pgs)]]) + previous_gen_assigned_stack(pgs[-length(pgs)]) + } + + geo_preview_layer(NULL); geo_after_layer(NULL) + + showNotification("Undo successful.", type = "message") + shinyAce::updateAceEditor(session,"r_code_ace", value = paste(r_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session,"stata_code_ace", value = paste(stata_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session,"python_code_ace", value = paste(python_steps(), collapse = "\n\n")) + } + }) + + observeEvent(input$reset, { + req(raw_data()) + data(raw_data()); anon_data(NULL) + anonymized_cols(character()); initial_qids(character()) + r_steps(import_snip()); stata_steps(import_stata_snip()); python_steps(import_py_snip()) + previous_data_stack(list()); previous_r_stack(list()) + previous_stata_stack(list()); previous_py_stack(list()) + log_steps(c(log_steps(), paste(Sys.time(),"- Reset complete"))) + k_bins(list()); gen_assigned(list()); previous_gen_assigned_stack(list()) + + geo_preview_layer(NULL); geo_after_layer(NULL) + geo_lat_col(NULL); geo_lon_col(NULL) + + risk_before_metrics(NULL) + risk_after_metrics(NULL) + + showNotification("Reset complete.", type = "warning") + shinyAce::updateAceEditor(session,"r_code_ace", value = paste(r_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session,"stata_code_ace", value = paste(stata_steps(), collapse = "\n\n")) + shinyAce::updateAceEditor(session,"python_code_ace", value = paste(python_steps(), collapse = "\n\n")) + }) + + # ---------- Preview merged table ------------------------------------------- + output$preview_merged <- renderTable({ + req(data()) + orig <- data() + cur <- if (is.null(anon_data())) orig else anon_data() + + pr <- list() + for (col in anonymized_cols()) { + if (col %in% names(orig) && col %in% names(cur)) { + pr[[col]] <- orig[[col]] + pr[[paste0(col, "_anon")]] <- cur[[col]] + } + } + for (col in setdiff(names(cur), anonymized_cols())) pr[[col]] <- cur[[col]] + + head(as.data.frame(pr, stringsAsFactors = FALSE), 10) + }, rownames = FALSE) + + # ---------- Map (safe basemap + module-safe leafletProxy) ------------------- + output$geo_map <- leaflet::renderLeaflet({ + req(input$method == "Anonymize Coordinates", data()) + + m <- leaflet::leaflet(options = leaflet::leafletOptions(minZoom = 1)) |> + leaflet::addTiles() |> + leaflet::addScaleBar(position = "bottomleft") + + latc <- input$geo_lat_col + lonc <- input$geo_lon_col + + if (!is.null(latc) && !is.null(lonc) && + latc %in% names(data()) && lonc %in% names(data()) && + is.numeric(data()[[latc]]) && is.numeric(data()[[lonc]])) { + + df0 <- data()[, c(lonc, latc), drop = FALSE] + names(df0) <- c("lon","lat") + df0 <- df0[stats::complete.cases(df0), , drop = FALSE] + + if (nrow(df0)) { + m <- m |> + leaflet::addCircleMarkers( + lng = df0$lon, lat = df0$lat, + radius = 3, stroke = FALSE, fillOpacity = 0.6, + clusterOptions = leaflet::markerClusterOptions(), + group = "Before (points)" + ) + + if (all(is.finite(range(df0$lon))) && all(is.finite(range(df0$lat)))) { + m <- m |> + leaflet::fitBounds( + lng1 = min(df0$lon), lat1 = min(df0$lat), + lng2 = max(df0$lon), lat2 = max(df0$lat) + ) + } + } + } + + m |> + leaflet::addLayersControl( + overlayGroups = c("Before (points)", "After (areas)"), + options = leaflet::layersControlOptions(collapsed = FALSE) + ) + }) + + observe({ + req(input$method == "Anonymize Coordinates") + pol <- geo_after_layer() + + prx <- leaflet::leafletProxy(session$ns("geo_map"), session = session) + + if (is.null(pol) || !inherits(pol, "sf") || nrow(pol) == 0) { + prx |> leaflet::clearGroup("After (areas)") + return() + } + + pol <- sf::st_make_valid(pol) + pol <- sf::st_zm(pol, drop = TRUE, what = "ZM") + pol <- pol[!sf::st_is_empty(pol), , drop = FALSE] + if (!nrow(pol)) { prx |> leaflet::clearGroup("After (areas)"); return() } + + prx |> + leaflet::clearGroup("After (areas)") |> + leaflet::addPolygons( + data = pol, + weight = 1, color = "#555555", fillOpacity = 0.5, fillColor = "#2A9D8F", + group = "After (areas)", + popup = ~paste0("n = ", n) + ) + }) + + # ---------- Risk BEFORE (coords excluded) ---------------------------------- + output$risk_before <- renderUI({ + req(data(), initial_qids()) + q <- risk_qids(initial_qids()) + vld(need(length(q) > 0, "Select non-coordinate QIDs.")) + + m <- risk_before_metrics() + req(m) + + tags$p(sprintf( + "Before: Average Risk: %.4f; Maximum Risk: %.4f; Percentage Unique: %.4f%%", + m$avg, m$max, m$pct_unique * 100 + )) + }) + + output$gauge_before <- flexdashboard::renderGauge({ + req(data(), initial_qids()) + q <- risk_qids(initial_qids()) + vld(need(length(q) > 0, "Select non-coordinate QIDs.")) + + m <- risk_before_metrics() + req(m) + + pct <- round(m$avg * 100, 2) + flexdashboard::gauge( + pct, min=0, max=100, symbol="%", + sectors = flexdashboard::gaugeSectors(success=c(0,20),warning=c(20,50),danger=c(50,100)), + label=sprintf("%.2f%%", pct), abbreviate=FALSE + ) + }) + + # ---------- Row counts / log ----------------------------------------------- + output$n_obs_text <- renderText({ + if (is.null(data())) return("") + after_txt <- if (!is.null(anon_data())) paste0(" | After: ", nrow(anon_data())) else "" + paste0("Rows: ", nrow(data()), after_txt) + }) + + output$step_log <- renderText({ paste(log_steps(), collapse = "\n") }) + + # ---------- Downloads ------------------------------------------------------- + output$download <- downloadHandler( + filename = function() paste0("anonymized_", Sys.Date(), ".csv"), + content = function(file) { + dat <- anon_data() + if (is.null(dat)) stop("No anonymized data available to download.") + utils::write.csv(drop_geo_cols(dat), file, row.names = FALSE) + } + ) + + output$download_excel <- downloadHandler( + filename = function() paste0("anonymized_", Sys.Date(), ".xlsx"), + content = function(file) { + dat <- anon_data() + if (is.null(dat)) stop("No anonymized data available to download.") + openxlsx::write.xlsx(drop_geo_cols(dat), file) + } + ) + + output$download_dta <- downloadHandler( + filename = function() paste0("anonymized_", Sys.Date(), ".dta"), + content = function(file) { + dat <- anon_data() + if (is.null(dat)) stop("No anonymized data available to download.") + haven::write_dta(drop_geo_cols(dat), file) + } + ) + + # ---------- Report preview/download ---------------------------------------- + render_html_report <- function() { + req(data(), anon_data(), initial_qids()) + + tmpl <- normalizePath( + file.path(shiny::getShinyOption("appDir") %||% getwd(), "server", "anon", "docs", "report_template.Rmd"), + mustWork = FALSE + ) + + if (!file.exists(tmpl)) { + showNotification(paste0("Missing report template: ", tmpl), type = "error") + return(NULL) + } + + + q_main <- risk_qids(initial_qids()) + vld(need(length(q_main) > 0, "Select non-coordinate QIDs.")) + + before_tbl <- data() %>% + dplyr::group_by(dplyr::across(dplyr::all_of(q_main))) %>% + dplyr::summarise(n = dplyr::n(), .groups = "drop") %>% + dplyr::mutate(r = round(1 / n, 4)) + + bm <- list( + avg = round(mean(before_tbl$r), 4), + max = round(max(before_tbl$r), 4), + pct_unique = paste0(round(mean(before_tbl$n == 1)*100,4), "%") + ) + + df_after <- anon_data() + after_cols_main <- sapply(q_main, get_after_col, df_after = df_after, USE.NAMES = FALSE) + + after_tbl <- df_after %>% + dplyr::group_by(dplyr::across(dplyr::all_of(after_cols_main))) %>% + dplyr::summarise(n = dplyr::n(), .groups = "drop") %>% + dplyr::mutate(r = round(1 / n, 4)) + + am <- list( + avg = round(mean(after_tbl$r), 4), + max = round(max(after_tbl$r), 4), + pct_unique = paste0(round(mean(after_tbl$n == 1)*100,4), "%") + ) + + all_subsets2 <- lapply(seq_along(q_main), function(k) combn(q_main, k, simplify = FALSE)) + subsets <- unlist(all_subsets2, recursive = FALSE) + + perm_tbl_before <- do.call(rbind, lapply(subsets, function(sub) { + df_sub <- data() %>% + dplyr::group_by(dplyr::across(dplyr::all_of(sub))) %>% + dplyr::summarise(n = dplyr::n(), .groups = "drop") %>% + dplyr::mutate(r = round(1 / n, 4)) + data.frame( + QIDs = paste(sub, collapse = ", "), + Average_Risk = round(mean(df_sub$r), 4), + Maximum_Risk = round(max(df_sub$r), 4), + Percent_Unique = paste0(round(mean(df_sub$n == 1)*100,4), "%"), + stringsAsFactors = FALSE + ) + })) + + perm_tbl_after <- do.call(rbind, lapply(subsets, function(sub) { + after_sub <- sapply(sub, get_after_col, df_after = df_after, USE.NAMES = FALSE) + df_sub <- df_after %>% + dplyr::group_by(dplyr::across(dplyr::all_of(after_sub))) %>% + dplyr::summarise(n = dplyr::n(), .groups = "drop") %>% + dplyr::mutate(r = round(1 / n, 4)) + data.frame( + QIDs = paste(sub, collapse = ", "), + Average_Risk = round(mean(df_sub$r), 4), + Maximum_Risk = round(max(df_sub$r), 4), + Percent_Unique = paste0(round(mean(df_sub$n == 1)*100,4), "%"), + stringsAsFactors = FALSE + ) + })) + + tmp_html <- tempfile(fileext = ".html") + rmarkdown::render( + input = tmpl, + output_format = "html_document", + output_file = basename(tmp_html), + output_dir = dirname(tmp_html), + params = list( + before_metrics = bm, + after_metrics = am, + perm_table_before = perm_tbl_before, + perm_table_after = perm_tbl_after + ), + envir = new.env(parent = globalenv()), + quiet = TRUE + ) + + tmp_html + } + + observeEvent(input$view_report, { + req(data(), anon_data(), initial_qids()) + + withProgress(message = "Building report...", value = 0.1, { + path <- render_html_report() + if (is.null(path)) return(NULL) + res_name <- paste0("reports_tmp_", gsub("[^A-Za-z0-9]", "_", landing_dom)) + addResourcePath(res_name, dirname(path)) + report_temp(path) + }) + + if (is.null(report_temp())) return(NULL) + + res_name <- paste0("reports_tmp_", gsub("[^A-Za-z0-9]", "_", landing_dom)) + showModal(modalDialog( + title = "Risk Report Preview", + size = "l", easyClose = TRUE, + tags$iframe( + src = paste0(res_name, "/", basename(report_temp())), + style = "width:100%; height:600px; border:none;" + ), + footer = modalButton("Close") + )) + }) + + output$download_report <- downloadHandler( + filename = function() paste0("risk_report_", Sys.Date(), ".pdf"), + content = function(file) { + req(report_temp()) + if (requireNamespace("pagedown", quietly = TRUE)) { + pagedown::chrome_print(input = report_temp(), output = file) + } else { + file.copy(report_temp(), file, overwrite = TRUE) + } + } + ) +} diff --git a/server/deep_learning.R b/server/deep_learning.R index ddb7824..e288e7f 100644 --- a/server/deep_learning.R +++ b/server/deep_learning.R @@ -4,1078 +4,1078 @@ options(shiny.maxRequestSize = 2000*1024^2) deep_learning = function() { + + api_url <- "http://23.135.236.5:3186" + + # ============================================================================== + # == 1. CORE REACTIVE VALUES + # ============================================================================== + + # --- For Live Job Polling --- + polled_data <- reactiveVal(list( + status = "Idle", task = "N/A", log = "", progress = list(percentage = 0, text = "Idle") + )) + polled_metrics <- reactiveVal(NULL) + active_job_id <- reactiveVal(NULL) + + # --- For Data Management --- + data_upload_status <- reactiveVal("") + processing_dataset_id <- reactiveVal(NULL) + refresh_data_trigger <- reactiveVal(0) # Triggers reload of dataset lists + + # --- For Model Registry --- + model_registry <- reactiveVal(NULL) + + # --- For History Tab --- + history_metrics <- reactiveVal(NULL) + history_jobs_df <- reactiveVal(NULL) + history_poller_active <- reactiveVal(FALSE) + + # --- For Inference Tab --- + obj_inference_result <- reactiveVal(list(status = "Ready", image_url = NULL, error = NULL)) + asr_inference_result <- reactiveVal(list(status = "Ready", transcription = NULL, error = NULL)) + img_class_inference_result <- reactiveVal(list(status = "Ready", prediction = NULL, error = NULL)) + seg_inference_result <- reactiveVal(list(status = "Ready", image_url = NULL, error = NULL)) + + # --- Table Proxies --- + proxy_eval_table <- dataTableProxy("eval_table") + proxy_dataset_table <- dataTableProxy("dataset_table") + proxy_history_eval_table <- dataTableProxy("history_eval_table") + + + # ============================================================================== + # == 2. INITIALIZATION & SIDEBAR LOGIC + # ============================================================================== + + # --- Fetch Model Registry on Startup --- + ## FIXME: This should only happen if deeplearning module is activated + observe({ + tryCatch({ + req <- request(paste0(api_url, "/models/list")) + resp <- req_perform(req) + model_registry(resp_body_json(resp)) + }, error = function(e) { + # print(paste("Failed to fetch model registry:", e$message)) + # TODO: Show a fatal error modal to the user + }) + }) + + # --- Task Panel Switching --- + # Show/hide the correct training UI based on the main task selector + observe({ + task <- input$task_selector + if (task == "object_detection") { + shinyjs::show("obj_panel"); shinyjs::hide("asr_panel"); shinyjs::hide("img_class_panel"); shinyjs::hide("seg_panel") + } else if (task == "asr") { + shinyjs::hide("obj_panel"); shinyjs::show("asr_panel"); shinyjs::hide("img_class_panel"); shinyjs::hide("seg_panel") + } else if (task == "image_classification") { + shinyjs::hide("obj_panel"); shinyjs::hide("asr_panel"); shinyjs::show("img_class_panel"); shinyjs::hide("seg_panel") + } else if (task == "image_segmentation") { + shinyjs::hide("obj_panel"); shinyjs::hide("asr_panel"); shinyjs::hide("img_class_panel"); shinyjs::show("seg_panel") + } + }) + + # --- Chained Dropdown Logic (Populate Architectures) --- + observeEvent(c(model_registry(), input$task_selector), { + req(model_registry()) - api_url <- "http://23.135.236.5:3186" - - # ============================================================================== - # == 1. CORE REACTIVE VALUES - # ============================================================================== - - # --- For Live Job Polling --- - polled_data <- reactiveVal(list( - status = "Idle", task = "N/A", log = "", progress = list(percentage = 0, text = "Idle") - )) - polled_metrics <- reactiveVal(NULL) - active_job_id <- reactiveVal(NULL) - - # --- For Data Management --- - data_upload_status <- reactiveVal("") - processing_dataset_id <- reactiveVal(NULL) - refresh_data_trigger <- reactiveVal(0) # Triggers reload of dataset lists - - # --- For Model Registry --- - model_registry <- reactiveVal(NULL) - - # --- For History Tab --- - history_metrics <- reactiveVal(NULL) - history_jobs_df <- reactiveVal(NULL) - history_poller_active <- reactiveVal(FALSE) - - # --- For Inference Tab --- - obj_inference_result <- reactiveVal(list(status = "Ready", image_url = NULL, error = NULL)) - asr_inference_result <- reactiveVal(list(status = "Ready", transcription = NULL, error = NULL)) - img_class_inference_result <- reactiveVal(list(status = "Ready", prediction = NULL, error = NULL)) - seg_inference_result <- reactiveVal(list(status = "Ready", image_url = NULL, error = NULL)) - - # --- Table Proxies --- - proxy_eval_table <- dataTableProxy("eval_table") - proxy_dataset_table <- dataTableProxy("dataset_table") - proxy_history_eval_table <- dataTableProxy("history_eval_table") - - - # ============================================================================== - # == 2. INITIALIZATION & SIDEBAR LOGIC - # ============================================================================== + task_slug <- input$task_selector + arch_choices <- c("Loading..." = "") - # --- Fetch Model Registry on Startup --- - ## FIXME: This should only happen if deeplearning module is activated - observe({ - tryCatch({ - req <- request(paste0(api_url, "/models/list")) - resp <- req_perform(req) - model_registry(resp_body_json(resp)) - }, error = function(e) { - # print(paste("Failed to fetch model registry:", e$message)) - # TODO: Show a fatal error modal to the user - }) + if (task_slug == "object_detection") { + arch_choices <- names(model_registry()$object_detection) + updateSelectInput(session, "obj_model_arch", choices = arch_choices) + } else if (task_slug == "asr") { + arch_choices <- names(model_registry()$asr) + updateSelectInput(session, "asr_model_arch", choices = arch_choices) + } else if (task_slug == "image_classification") { + arch_choices <- names(model_registry()$image_classification) + updateSelectInput(session, "img_class_model_arch", choices = arch_choices) + } else if (task_slug == "image_segmentation") { + arch_choices <- names(model_registry()$image_segmentation) + updateSelectInput(session, "seg_model_arch", choices = arch_choices) + } + }) + + # --- Chained Dropdown Logic (Populate Checkpoints) --- + observeEvent(input$obj_model_arch, { + req(model_registry(), input$obj_model_arch, input$obj_model_arch != "Loading...") + checkpoints <- model_registry()$object_detection[[input$obj_model_arch]] + updateSelectInput(session, "obj_model_checkpoint", choices = checkpoints) + }) + observeEvent(input$asr_model_arch, { + req(model_registry(), input$asr_model_arch, input$asr_model_arch != "Loading...") + checkpoints <- model_registry()$asr[[input$asr_model_arch]] + updateSelectInput(session, "asr_model_checkpoint", choices = checkpoints) + }) + observeEvent(input$img_class_model_arch, { + req(model_registry(), input$img_class_model_arch, input$img_class_model_arch != "Loading...") + checkpoints <- model_registry()$image_classification[[input$img_class_model_arch]] + updateSelectInput(session, "img_class_model_checkpoint", choices = checkpoints) + }) + observeEvent(input$seg_model_arch, { + req(model_registry(), input$seg_model_arch, input$seg_model_arch != "Loading...") + checkpoints <- model_registry()$image_segmentation[[input$seg_model_arch]] + updateSelectInput(session, "seg_model_checkpoint", choices = checkpoints) + }) + + + # ============================================================================== + # == 3. "DATA MANAGEMENT" TAB LOGIC + # ============================================================================== + + # --- Helper: Load Datasets for a specific task --- + load_datasets_for_task <- function(task_slug) { + tryCatch({ + req <- request(paste0(api_url, "/data/list/", task_slug)) + resp_data <- resp_body_json(req_perform(req), simplifyVector = TRUE) + if (length(resp_data) > 0 && nrow(resp_data) > 0) { + setNames(resp_data$id, resp_data$name) + } else { + c("No datasets found" = "") + } + }, error = function(e) { + c("Error loading datasets" = "") }) - - # --- Task Panel Switching --- - # Show/hide the correct training UI based on the main task selector - observe({ - task <- input$task_selector - if (task == "object_detection") { - shinyjs::show("obj_panel"); shinyjs::hide("asr_panel"); shinyjs::hide("img_class_panel"); shinyjs::hide("seg_panel") - } else if (task == "asr") { - shinyjs::hide("obj_panel"); shinyjs::show("asr_panel"); shinyjs::hide("img_class_panel"); shinyjs::hide("seg_panel") - } else if (task == "image_classification") { - shinyjs::hide("obj_panel"); shinyjs::hide("asr_panel"); shinyjs::show("img_class_panel"); shinyjs::hide("seg_panel") - } else if (task == "image_segmentation") { - shinyjs::hide("obj_panel"); shinyjs::hide("asr_panel"); shinyjs::hide("img_class_panel"); shinyjs::show("seg_panel") - } + } + + # --- Auto-refresh Dataset Dropdowns --- + # Triggered by: 1. Task selector change, 2. Data refresh trigger + observeEvent(c(input$task_selector, refresh_data_trigger()), { + task_slug <- input$task_selector + if (task_slug == "object_detection") { + updateSelectInput(session, "obj_dataset_id", choices = load_datasets_for_task("object_detection")) + } else if (task_slug == "asr") { + updateSelectInput(session, "asr_dataset_id", choices = load_datasets_for_task("asr")) + } else if (task_slug == "image_classification") { + updateSelectInput(session, "img_class_dataset_id", choices = load_datasets_for_task("image_classification")) + } else if (task_slug == "image_segmentation") { + updateSelectInput(session, "seg_dataset_id", choices = load_datasets_for_task("image_segmentation")) + } + }, ignoreNULL = TRUE, ignoreInit = TRUE) + + # Manually trigger first data load on startup (after registry is loaded) + observeEvent(model_registry(), { + req(model_registry()) + refresh_data_trigger(refresh_data_trigger() + 1) + }, once = TRUE) + + + # --- Handle Dataset Upload Button --- + observeEvent(input$start_data_upload, { + req(input$new_data_zip, input$new_data_name, input$new_data_task_type) + data_upload_status("Uploading...") + tryCatch({ + req <- request(paste0(api_url, "/data/upload/", input$new_data_task_type)) %>% + req_body_multipart( + data_name = input$new_data_name, + data_zip = curl::form_file(input$new_data_zip$datapath, type = "application/zip") + ) + resp <- req_perform(req) + resp_data <- resp_body_json(resp) + # Start the poller + processing_dataset_id(resp_data$dataset_id) + data_upload_status(paste("Success! Dataset", input$new_data_name, "is processing...")) + + }, error = function(e) { + error_message <- as.character(e$message) + if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } + data_upload_status(paste("Error:", error_message)) }) + }) + + # --- Poller for Data Processing Status --- + observe({ + ds_id <- processing_dataset_id() + req(ds_id) # Only run if we are processing a dataset - # --- Chained Dropdown Logic (Populate Architectures) --- - observeEvent(c(model_registry(), input$task_selector), { - req(model_registry()) + invalidateLater(2000, session) # Poll every 2 seconds + + tryCatch({ + req_status <- request(paste0(api_url, "/data/status/", ds_id)) + resp <- req_perform(req_status) + status_data <- resp_body_json(resp) + + if (status_data$status == "ready" || status_data$status == "failed") { + processing_dataset_id(NULL) # Stop polling - task_slug <- input$task_selector - arch_choices <- c("Loading..." = "") + # --- AUTO-REFRESH --- + refresh_data_trigger(refresh_data_trigger() + 1) - if (task_slug == "object_detection") { - arch_choices <- names(model_registry()$object_detection) - updateSelectInput(session, "obj_model_arch", choices = arch_choices) - } else if (task_slug == "asr") { - arch_choices <- names(model_registry()$asr) - updateSelectInput(session, "asr_model_arch", choices = arch_choices) - } else if (task_slug == "image_classification") { - arch_choices <- names(model_registry()$image_classification) - updateSelectInput(session, "img_class_model_arch", choices = arch_choices) - } else if (task_slug == "image_segmentation") { - arch_choices <- names(model_registry()$image_segmentation) - updateSelectInput(session, "seg_model_arch", choices = arch_choices) + if(status_data$status == "ready") { + data_upload_status(paste("Dataset processing complete!")) + } else { + data_upload_status(paste("Dataset processing failed:", status_data$error)) } + + } else { + data_upload_status(paste("Processing dataset...", status_data$status)) + } + }, error = function(e) { + data_upload_status("Error polling data status.") + processing_dataset_id(NULL) # Stop polling on error }) + }) + + # --- Data Management UI Outputs --- + output$data_upload_status <- renderText({ data_upload_status() }) + + output$dataset_table <- renderDT({ + refresh_data_trigger() # React to the trigger - # --- Chained Dropdown Logic (Populate Checkpoints) --- - observeEvent(input$obj_model_arch, { - req(model_registry(), input$obj_model_arch, input$obj_model_arch != "Loading...") - checkpoints <- model_registry()$object_detection[[input$obj_model_arch]] - updateSelectInput(session, "obj_model_checkpoint", choices = checkpoints) - }) - observeEvent(input$asr_model_arch, { - req(model_registry(), input$asr_model_arch, input$asr_model_arch != "Loading...") - checkpoints <- model_registry()$asr[[input$asr_model_arch]] - updateSelectInput(session, "asr_model_checkpoint", choices = checkpoints) - }) - observeEvent(input$img_class_model_arch, { - req(model_registry(), input$img_class_model_arch, input$img_class_model_arch != "Loading...") - checkpoints <- model_registry()$image_classification[[input$img_class_model_arch]] - updateSelectInput(session, "img_class_model_checkpoint", choices = checkpoints) + tryCatch({ + tasks <- c("object_detection", "asr", "image_classification", "image_segmentation") + all_datasets <- lapply(tasks, function(task) { + req <- request(paste0(api_url, "/data/list/", task)) + resp_data <- resp_body_json(req_perform(req), simplifyVector = TRUE) + if (length(resp_data) > 0 && nrow(resp_data) > 0) { + resp_data$task_type <- task + return(resp_data) + } + return(NULL) + }) + bind_rows(all_datasets) + }, error = function(e) { + data.frame(name = "Error loading dataset list.", task_type = e$message) }) - observeEvent(input$seg_model_arch, { - req(model_registry(), input$seg_model_arch, input$seg_model_arch != "Loading...") - checkpoints <- model_registry()$image_segmentation[[input$seg_model_arch]] - updateSelectInput(session, "seg_model_checkpoint", choices = checkpoints) + }) + + + # ============================================================================== + # == 4. TRAINING JOB SUBMISSION (One per task) + # ============================================================================== + + # --- Helper: Resets UI before starting a job --- + reset_live_training_ui <- function(task_name) { + replaceData(proxy_eval_table, NULL, resetPaging = TRUE, clearSelection = TRUE) + active_job_id(NULL) + polled_metrics(NULL) + polled_data(list(status = "Submitting...", task = task_name, log = "Submitting job...")) + updateTabsetPanel(session, "main_tabs", selected = "Live Training") + } + + # --- 4.1: Object Detection Job --- + observeEvent(input$start_obj_job, { + req(input$obj_dataset_id, input$obj_model_checkpoint) + reset_live_training_ui("Object Detection") + + tryCatch({ + req <- request(paste0(api_url, "/train/object-detection")) %>% + req_body_multipart( + # Common Params + dataset_id = as.character(input$obj_dataset_id), + model_checkpoint = as.character(input$obj_model_checkpoint), + run_name = as.character(input$obj_run_name), + version = as.character(input$obj_version), + epochs = as.character(input$obj_epochs), + train_batch_size = as.character(input$obj_train_batch_size), + eval_batch_size = as.character(input$obj_eval_batch_size), + seed = as.character(input$obj_seed), + num_proc = as.character(input$obj_num_proc), + early_stopping_patience = as.character(input$obj_early_stopping_patience), + push_to_hub = as.character(input$obj_push_to_hub), + hub_user_id = as.character(input$obj_hub_user_id), + log_to_wandb = as.character(input$obj_log_to_wandb), + wandb_project = as.character(input$obj_wandb_project), + wandb_entity = as.character(input$obj_wandb_entity), + max_image_size = as.character(input$obj_max_image_size), + + # HF-Specific Params + learning_rate = as.character(input$obj_learning_rate), + weight_decay = as.character(input$obj_weight_decay), + gradient_accumulation_steps = as.character(input$obj_gradient_accumulation_steps), + gradient_checkpointing = as.character(input$obj_gradient_checkpointing), + max_grad_norm = as.character(input$obj_max_grad_norm), + fp16 = as.character(input$obj_fp16), + force_preprocess = as.character(input$obj_force_preprocess), + early_stopping_threshold = as.character(input$obj_early_stopping_threshold), + + # YOLO-Specific Params + warmup_epochs = as.character(input$obj_yolo_warmup_epochs), + lr0 = as.character(input$obj_yolo_lr0), + momentum = as.character(input$obj_yolo_momentum), + optimizer = as.character(input$obj_yolo_optimizer), + weight_decay_yolo = as.character(input$obj_yolo_weight_decay) + ) + + resp <- req_perform(req) + resp_data <- resp_body_json(resp) + active_job_id(resp_data$job_id) + polled_data(list(status = "Queued", task = "Object Detection", log = "Job is queued.")) + + }, error = function(e) { + error_message <- as.character(e$message) + if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } + polled_data(list(status = "Error", task = "Object Detection", log = error_message)) }) - + }) + + # --- 4.2: ASR Job --- + observeEvent(input$start_asr_job, { + req(input$asr_dataset_id, input$asr_model_checkpoint) + reset_live_training_ui("ASR") - # ============================================================================== - # == 3. "DATA MANAGEMENT" TAB LOGIC - # ============================================================================== - - # --- Helper: Load Datasets for a specific task --- - load_datasets_for_task <- function(task_slug) { - tryCatch({ - req <- request(paste0(api_url, "/data/list/", task_slug)) - resp_data <- resp_body_json(req_perform(req), simplifyVector = TRUE) - if (length(resp_data) > 0 && nrow(resp_data) > 0) { - setNames(resp_data$id, resp_data$name) - } else { - c("No datasets found" = "") - } - }, error = function(e) { - c("Error loading datasets" = "") - }) + outlier_val <- input$outlier_std_devs + if (is.null(outlier_val) || is.na(outlier_val) || !is.numeric(outlier_val) || !input$asr_apply_outlier_filtering) { + outlier_val <- 2.0 } - # --- Auto-refresh Dataset Dropdowns --- - # Triggered by: 1. Task selector change, 2. Data refresh trigger - observeEvent(c(input$task_selector, refresh_data_trigger()), { - task_slug <- input$task_selector - if (task_slug == "object_detection") { - updateSelectInput(session, "obj_dataset_id", choices = load_datasets_for_task("object_detection")) - } else if (task_slug == "asr") { - updateSelectInput(session, "asr_dataset_id", choices = load_datasets_for_task("asr")) - } else if (task_slug == "image_classification") { - updateSelectInput(session, "img_class_dataset_id", choices = load_datasets_for_task("image_classification")) - } else if (task_slug == "image_segmentation") { - updateSelectInput(session, "seg_dataset_id", choices = load_datasets_for_task("image_segmentation")) - } - }, ignoreNULL = TRUE, ignoreInit = TRUE) - - # Manually trigger first data load on startup (after registry is loaded) - observeEvent(model_registry(), { - req(model_registry()) - refresh_data_trigger(refresh_data_trigger() + 1) - }, once = TRUE) - + max_hours <- if (is.na(input$asr_max_train_hours) || is.null(input$asr_max_train_hours)) NULL else as.character(input$asr_max_train_hours) - # --- Handle Dataset Upload Button --- - observeEvent(input$start_data_upload, { - req(input$new_data_zip, input$new_data_name, input$new_data_task_type) - data_upload_status("Uploading...") - tryCatch({ - req <- request(paste0(api_url, "/data/upload/", input$new_data_task_type)) %>% - req_body_multipart( - data_name = input$new_data_name, - data_zip = curl::form_file(input$new_data_zip$datapath, type = "application/zip") - ) - resp <- req_perform(req) - resp_data <- resp_body_json(resp) - # Start the poller - processing_dataset_id(resp_data$dataset_id) - data_upload_status(paste("Success! Dataset", input$new_data_name, "is processing...")) - - }, error = function(e) { - error_message <- as.character(e$message) - if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } - data_upload_status(paste("Error:", error_message)) - }) + tryCatch({ + req_list <- list( + dataset_id = as.character(input$asr_dataset_id), + model_checkpoint = as.character(input$asr_model_checkpoint), + run_name = as.character(input$asr_run_name), + version = as.character(input$asr_version), + language = as.character(input$asr_language), + language_code = as.character(input$asr_language_code), + speaker_id_column = as.character(input$asr_speaker_id_column), + text_column = as.character(input$asr_text_column), + target_sampling_rate = as.character(input$asr_target_sampling_rate), + min_duration_s = as.character(input$asr_min_duration_s), + max_duration_s = as.character(input$asr_max_duration_s), + min_transcript_len = as.character(input$asr_min_transcript_len), + max_transcript_len = as.character(input$asr_max_transcript_len), + apply_outlier_filtering = as.character(input$asr_apply_outlier_filtering), + outlier_std_devs = as.character(outlier_val), + is_presplit = as.character(input$asr_is_presplit), + speaker_disjointness = as.character(input$asr_speaker_disjointness), + train_ratio = as.character(input$asr_train_ratio), + dev_ratio = as.character(input$asr_dev_ratio), + test_ratio = as.character(input$asr_test_ratio), + epochs = as.character(input$asr_epochs), + learning_rate = as.character(input$asr_learning_rate), + lr_scheduler_type = as.character(input$asr_lr_scheduler_type), + warmup_ratio = as.character(input$asr_warmup_ratio), + train_batch_size = as.character(input$asr_train_batch_size), + eval_batch_size = as.character(input$asr_eval_batch_size), + gradient_accumulation_steps = as.character(input$asr_gradient_accumulation_steps), + gradient_checkpointing = as.character(input$asr_gradient_checkpointing), + optimizer = as.character(input$asr_optimizer), + early_stopping_patience = as.character(input$asr_early_stopping_patience), + early_stopping_threshold = as.character(input$asr_early_stopping_threshold), + push_to_hub = as.character(input$asr_push_to_hub), + hub_user_id = as.character(input$asr_hub_user_id), + hub_private_repo = as.character(input$asr_hub_private_repo), + log_to_wandb = as.character(input$asr_log_to_wandb), + wandb_project = as.character(input$asr_wandb_project), + wandb_entity = as.character(input$asr_wandb_entity), + seed = as.character(input$asr_seed), + num_proc = as.character(input$asr_num_proc), + max_train_hours = max_hours + ) + + req_list <- req_list[!sapply(req_list, is.null)] + + req <- request(paste0(api_url, "/train/asr")) %>% + req_body_multipart(!!!req_list) + + resp <- req_perform(req) + resp_data <- resp_body_json(resp) + active_job_id(resp_data$job_id) + polled_data(list(status = "Queued", task = "ASR", log = "Job is queued.")) + + }, error = function(e) { + error_message <- as.character(e$message) + if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } + polled_data(list(status = "Error", task = "ASR", log = error_message)) }) + }) + + # --- 4.3: Image Classification Job --- + observeEvent(input$start_img_class_job, { + req(input$img_class_dataset_id, input$img_class_model_checkpoint) + reset_live_training_ui("Image Classification") - # --- Poller for Data Processing Status --- - observe({ - ds_id <- processing_dataset_id() - req(ds_id) # Only run if we are processing a dataset - - invalidateLater(2000, session) # Poll every 2 seconds - - tryCatch({ - req_status <- request(paste0(api_url, "/data/status/", ds_id)) - resp <- req_perform(req_status) - status_data <- resp_body_json(resp) - - if (status_data$status == "ready" || status_data$status == "failed") { - processing_dataset_id(NULL) # Stop polling - - # --- AUTO-REFRESH --- - refresh_data_trigger(refresh_data_trigger() + 1) - - if(status_data$status == "ready") { - data_upload_status(paste("Dataset processing complete!")) - } else { - data_upload_status(paste("Dataset processing failed:", status_data$error)) - } - - } else { - data_upload_status(paste("Processing dataset...", status_data$status)) - } - }, error = function(e) { - data_upload_status("Error polling data status.") - processing_dataset_id(NULL) # Stop polling on error - }) + tryCatch({ + req <- request(paste0(api_url, "/train/image-classification")) %>% + req_body_multipart( + dataset_id = as.character(input$img_class_dataset_id), + model_checkpoint = as.character(input$img_class_model_checkpoint), + run_name = as.character(input$img_class_run_name), + version = as.character(input$img_class_version), + epochs = as.character(input$img_class_epochs), + learning_rate = as.character(input$img_class_learning_rate), + weight_decay = as.character(input$img_class_weight_decay), + train_batch_size = as.character(input$img_class_train_batch_size), + eval_batch_size = as.character(input$img_class_eval_batch_size), + max_image_size = as.character(input$img_class_max_image_size), + gradient_accumulation_steps = as.character(input$img_class_grad_accum), + gradient_checkpointing = as.character(input$img_class_grad_check), + fp16 = as.character(input$img_class_fp16), + seed = as.character(input$img_class_seed), + early_stopping_patience = as.character(input$img_class_early_stop), + push_to_hub = as.character(input$img_class_push_to_hub), + hub_user_id = as.character(input$img_class_hub_user_id), + log_to_wandb = as.character(input$img_class_log_to_wandb), + wandb_project = as.character(input$img_class_wandb_project), + wandb_entity = as.character(input$img_class_wandb_entity), + num_proc = as.character(input$img_class_num_proc), + is_presplit = as.character(input$img_class_is_presplit), + train_ratio = as.character(input$img_class_train_ratio), + dev_ratio = as.character(input$img_class_dev_ratio) + ) + + resp <- req_perform(req) + active_job_id(resp_body_json(resp)$job_id) + }, error = function(e) { + polled_data(list(status = "Error", task = "Image Classification", log = as.character(e))) }) + }) + + # --- 4.4: Image Segmentation Job --- + observeEvent(input$start_seg_job, { + req(input$seg_dataset_id, input$seg_model_checkpoint) + reset_live_training_ui("Image Segmentation") - # --- Data Management UI Outputs --- - output$data_upload_status <- renderText({ data_upload_status() }) - - output$dataset_table <- renderDT({ - refresh_data_trigger() # React to the trigger - - tryCatch({ - tasks <- c("object_detection", "asr", "image_classification", "image_segmentation") - all_datasets <- lapply(tasks, function(task) { - req <- request(paste0(api_url, "/data/list/", task)) - resp_data <- resp_body_json(req_perform(req), simplifyVector = TRUE) - if (length(resp_data) > 0 && nrow(resp_data) > 0) { - resp_data$task_type <- task - return(resp_data) - } - return(NULL) - }) - bind_rows(all_datasets) - }, error = function(e) { - data.frame(name = "Error loading dataset list.", task_type = e$message) - }) + tryCatch({ + req <- request(paste0(api_url, "/train/image-segmentation")) %>% + req_body_multipart( + dataset_id = as.character(input$seg_dataset_id), + model_checkpoint = as.character(input$seg_model_checkpoint), + run_name = as.character(input$seg_run_name), + version = as.character(input$seg_version), + epochs = as.character(input$seg_epochs), + learning_rate = as.character(input$seg_learning_rate), + weight_decay = as.character(input$seg_weight_decay), + train_batch_size = as.character(input$seg_train_batch_size), + eval_batch_size = as.character(input$seg_eval_batch_size), + max_image_size = as.character(input$seg_max_image_size), + gradient_accumulation_steps = as.character(input$seg_grad_accum), + gradient_checkpointing = as.character(input$seg_grad_check), + fp16 = as.character(input$seg_fp16), + seed = as.character(input$seg_seed), + early_stopping_patience = as.character(input$seg_early_stop), + push_to_hub = as.character(input$seg_push_to_hub), + hub_user_id = as.character(input$seg_hub_user_id), + log_to_wandb = as.character(input$seg_log_to_wandb), + wandb_project = as.character(input$seg_wandb_project), + wandb_entity = as.character(input$seg_wandb_entity), + num_proc = as.character(input$seg_num_proc), + is_presplit = as.character(input$seg_is_presplit), + train_ratio = as.character(input$seg_train_ratio), + dev_ratio = as.character(input$seg_dev_ratio) + ) + + resp <- req_perform(req) + active_job_id(resp_body_json(resp)$job_id) + }, error = function(e) { + error_message <- as.character(e$message) + if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } + polled_data(list(status = "Error", task = "Image Segmentation", log = error_message)) }) - + }) + + + # ============================================================================== + # == 5. "LIVE TRAINING" TAB LOGIC + # ============================================================================== + + # --- 5.1: Job Polling & Status Display --- + observe({ + job_id <- active_job_id() + current_status <- polled_data()$status - # ============================================================================== - # == 4. TRAINING JOB SUBMISSION (One per task) - # ============================================================================== + # Only poll if we have an active job that isn't finished + if (!is.null(job_id) && !(current_status %in% c("completed", "failed", "Error", "Polling Error"))) { + invalidateLater(2000, session) + + # Poll for Status & Log + tryCatch({ + req_status <- request(paste0(api_url, "/status/", job_id)) + resp_status <- req_perform(req_status) + if (resp_status(resp_status) == 200) { + polled_data(resp_body_json(resp_status)) + } + }, error = function(e) { + current_data <- polled_data() + current_data$status <- "Polling Error" + polled_data(current_data) + }) + + # Poll for Metrics + tryCatch({ + req_metrics <- request(paste0(api_url, "/metrics/", job_id)) + resp_metrics <- req_perform(req_metrics) + if (resp_status(resp_metrics) == 200) { + polled_metrics(resp_body_json(resp_metrics)) + } + }, error = function(e) { + polled_metrics(NULL) + }) + } + }) + + # --- 5.2: Job Status Panel Outputs --- + output$job_task_display <- renderText({ polled_data()$task }) + output$job_id_display <- renderText({ ifelse(is.null(active_job_id()), "None", active_job_id()) }) + output$job_status_display <- renderText({ polled_data()$status }) + + # --- 5.3: Metrics Table Panel Output --- + output$eval_table <- renderDT({ + metrics_list <- polled_metrics() + req(metrics_list, length(metrics_list) > 0) + + metrics_df <- bind_rows(metrics_list) - # --- Helper: Resets UI before starting a job --- - reset_live_training_ui <- function(task_name) { - replaceData(proxy_eval_table, NULL, resetPaging = TRUE, clearSelection = TRUE) - active_job_id(NULL) - polled_metrics(NULL) - polled_data(list(status = "Submitting...", task = task_name, log = "Submitting job...")) - updateTabsetPanel(session, "main_tabs", selected = "Live Training") + if (nrow(metrics_df) > 0) { + display_df <- metrics_df %>% + pivot_longer( + cols = starts_with("eval_") | starts_with("test_"), + names_to = "metric_name", + values_to = "value", + values_drop_na = TRUE + ) %>% + separate(metric_name, into = c("step", "metric"), sep = "_", extra = "merge") %>% + pivot_wider( + names_from = metric, + values_from = value, + values_fn = first + ) %>% + select(any_of(c("step", "epoch", "loss", "map", "wer", "cer", "mean_iou")), everything()) + + datatable( + display_df, + options = list( + pageLength = 5, + scrollX = TRUE, + searching = FALSE, + autoWidth = TRUE, + class = 'cell-border stripe' + ), + rownames = FALSE + ) + } else { + return(NULL) } - - # --- 4.1: Object Detection Job --- - observeEvent(input$start_obj_job, { - req(input$obj_dataset_id, input$obj_model_checkpoint) - reset_live_training_ui("Object Detection") - - tryCatch({ - req <- request(paste0(api_url, "/train/object-detection")) %>% - req_body_multipart( - # Common Params - dataset_id = as.character(input$obj_dataset_id), - model_checkpoint = as.character(input$obj_model_checkpoint), - run_name = as.character(input$obj_run_name), - version = as.character(input$obj_version), - epochs = as.character(input$obj_epochs), - train_batch_size = as.character(input$obj_train_batch_size), - eval_batch_size = as.character(input$obj_eval_batch_size), - seed = as.character(input$obj_seed), - num_proc = as.character(input$obj_num_proc), - early_stopping_patience = as.character(input$obj_early_stopping_patience), - push_to_hub = as.character(input$obj_push_to_hub), - hub_user_id = as.character(input$obj_hub_user_id), - log_to_wandb = as.character(input$obj_log_to_wandb), - wandb_project = as.character(input$obj_wandb_project), - wandb_entity = as.character(input$obj_wandb_entity), - max_image_size = as.character(input$obj_max_image_size), - - # HF-Specific Params - learning_rate = as.character(input$obj_learning_rate), - weight_decay = as.character(input$obj_weight_decay), - gradient_accumulation_steps = as.character(input$obj_gradient_accumulation_steps), - gradient_checkpointing = as.character(input$obj_gradient_checkpointing), - max_grad_norm = as.character(input$obj_max_grad_norm), - fp16 = as.character(input$obj_fp16), - force_preprocess = as.character(input$obj_force_preprocess), - early_stopping_threshold = as.character(input$obj_early_stopping_threshold), - - # YOLO-Specific Params - warmup_epochs = as.character(input$obj_yolo_warmup_epochs), - lr0 = as.character(input$obj_yolo_lr0), - momentum = as.character(input$obj_yolo_momentum), - optimizer = as.character(input$obj_yolo_optimizer), - weight_decay_yolo = as.character(input$obj_yolo_weight_decay) - ) - - resp <- req_perform(req) - resp_data <- resp_body_json(resp) - active_job_id(resp_data$job_id) - polled_data(list(status = "Queued", task = "Object Detection", log = "Job is queued.")) - - }, error = function(e) { - error_message <- as.character(e$message) - if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } - polled_data(list(status = "Error", task = "Object Detection", log = error_message)) - }) - }) + }) + + # --- 5.4: Full Log Panel Output --- + output$log_output <- renderText({ + log_text <- polled_data()$log + if (is.null(log_text) || nchar(log_text) == 0) { + return("No log output...") + } + return(log_text) + }) + + # --- 5.5: Plotting Logic for "Live Training" Tab --- + metrics_for_plotting <- reactive({ + metrics_list <- polled_metrics() + req(metrics_list, length(metrics_list) > 0) - # --- 4.2: ASR Job --- - observeEvent(input$start_asr_job, { - req(input$asr_dataset_id, input$asr_model_checkpoint) - reset_live_training_ui("ASR") - - outlier_val <- input$outlier_std_devs - if (is.null(outlier_val) || is.na(outlier_val) || !is.numeric(outlier_val) || !input$asr_apply_outlier_filtering) { - outlier_val <- 2.0 - } - - max_hours <- if (is.na(input$asr_max_train_hours) || is.null(input$asr_max_train_hours)) NULL else as.character(input$asr_max_train_hours) - - tryCatch({ - req_list <- list( - dataset_id = as.character(input$asr_dataset_id), - model_checkpoint = as.character(input$asr_model_checkpoint), - run_name = as.character(input$asr_run_name), - version = as.character(input$asr_version), - language = as.character(input$asr_language), - language_code = as.character(input$asr_language_code), - speaker_id_column = as.character(input$asr_speaker_id_column), - text_column = as.character(input$asr_text_column), - target_sampling_rate = as.character(input$asr_target_sampling_rate), - min_duration_s = as.character(input$asr_min_duration_s), - max_duration_s = as.character(input$asr_max_duration_s), - min_transcript_len = as.character(input$asr_min_transcript_len), - max_transcript_len = as.character(input$asr_max_transcript_len), - apply_outlier_filtering = as.character(input$asr_apply_outlier_filtering), - outlier_std_devs = as.character(outlier_val), - is_presplit = as.character(input$asr_is_presplit), - speaker_disjointness = as.character(input$asr_speaker_disjointness), - train_ratio = as.character(input$asr_train_ratio), - dev_ratio = as.character(input$asr_dev_ratio), - test_ratio = as.character(input$asr_test_ratio), - epochs = as.character(input$asr_epochs), - learning_rate = as.character(input$asr_learning_rate), - lr_scheduler_type = as.character(input$asr_lr_scheduler_type), - warmup_ratio = as.character(input$asr_warmup_ratio), - train_batch_size = as.character(input$asr_train_batch_size), - eval_batch_size = as.character(input$asr_eval_batch_size), - gradient_accumulation_steps = as.character(input$asr_gradient_accumulation_steps), - gradient_checkpointing = as.character(input$asr_gradient_checkpointing), - optimizer = as.character(input$asr_optimizer), - early_stopping_patience = as.character(input$asr_early_stopping_patience), - early_stopping_threshold = as.character(input$asr_early_stopping_threshold), - push_to_hub = as.character(input$asr_push_to_hub), - hub_user_id = as.character(input$asr_hub_user_id), - hub_private_repo = as.character(input$asr_hub_private_repo), - log_to_wandb = as.character(input$asr_log_to_wandb), - wandb_project = as.character(input$asr_wandb_project), - wandb_entity = as.character(input$asr_wandb_entity), - seed = as.character(input$asr_seed), - num_proc = as.character(input$asr_num_proc), - max_train_hours = max_hours - ) - - req_list <- req_list[!sapply(req_list, is.null)] - - req <- request(paste0(api_url, "/train/asr")) %>% - req_body_multipart(!!!req_list) - - resp <- req_perform(req) - resp_data <- resp_body_json(resp) - active_job_id(resp_data$job_id) - polled_data(list(status = "Queued", task = "ASR", log = "Job is queued.")) - - }, error = function(e) { - error_message <- as.character(e$message) - if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } - polled_data(list(status = "Error", task = "ASR", log = error_message)) - }) - }) - - # --- 4.3: Image Classification Job --- - observeEvent(input$start_img_class_job, { - req(input$img_class_dataset_id, input$img_class_model_checkpoint) - reset_live_training_ui("Image Classification") - - tryCatch({ - req <- request(paste0(api_url, "/train/image-classification")) %>% - req_body_multipart( - dataset_id = as.character(input$img_class_dataset_id), - model_checkpoint = as.character(input$img_class_model_checkpoint), - run_name = as.character(input$img_class_run_name), - version = as.character(input$img_class_version), - epochs = as.character(input$img_class_epochs), - learning_rate = as.character(input$img_class_learning_rate), - weight_decay = as.character(input$img_class_weight_decay), - train_batch_size = as.character(input$img_class_train_batch_size), - eval_batch_size = as.character(input$img_class_eval_batch_size), - max_image_size = as.character(input$img_class_max_image_size), - gradient_accumulation_steps = as.character(input$img_class_grad_accum), - gradient_checkpointing = as.character(input$img_class_grad_check), - fp16 = as.character(input$img_class_fp16), - seed = as.character(input$img_class_seed), - early_stopping_patience = as.character(input$img_class_early_stop), - push_to_hub = as.character(input$img_class_push_to_hub), - hub_user_id = as.character(input$img_class_hub_user_id), - log_to_wandb = as.character(input$img_class_log_to_wandb), - wandb_project = as.character(input$img_class_wandb_project), - wandb_entity = as.character(input$img_class_wandb_entity), - num_proc = as.character(input$img_class_num_proc), - is_presplit = as.character(input$img_class_is_presplit), - train_ratio = as.character(input$img_class_train_ratio), - dev_ratio = as.character(input$img_class_dev_ratio) - ) - - resp <- req_perform(req) - active_job_id(resp_body_json(resp)$job_id) - }, error = function(e) { - polled_data(list(status = "Error", task = "Image Classification", log = as.character(e))) - }) - }) + bind_rows(metrics_list) %>% + filter(!is.na(epoch)) %>% + filter(if_any(everything(), ~ !is.na(.))) %>% + select(starts_with("eval_"), epoch) %>% + arrange(epoch) %>% + distinct(epoch, .keep_all = TRUE) + }) + + output$metric_selector_ui <- renderUI({ + df <- tryCatch(metrics_for_plotting(), error = function(e) NULL) - # --- 4.4: Image Segmentation Job --- - observeEvent(input$start_seg_job, { - req(input$seg_dataset_id, input$seg_model_checkpoint) - reset_live_training_ui("Image Segmentation") - - tryCatch({ - req <- request(paste0(api_url, "/train/image-segmentation")) %>% - req_body_multipart( - dataset_id = as.character(input$seg_dataset_id), - model_checkpoint = as.character(input$seg_model_checkpoint), - run_name = as.character(input$seg_run_name), - version = as.character(input$seg_version), - epochs = as.character(input$seg_epochs), - learning_rate = as.character(input$seg_learning_rate), - weight_decay = as.character(input$seg_weight_decay), - train_batch_size = as.character(input$seg_train_batch_size), - eval_batch_size = as.character(input$seg_eval_batch_size), - max_image_size = as.character(input$seg_max_image_size), - gradient_accumulation_steps = as.character(input$seg_grad_accum), - gradient_checkpointing = as.character(input$seg_grad_check), - fp16 = as.character(input$seg_fp16), - seed = as.character(input$seg_seed), - early_stopping_patience = as.character(input$seg_early_stop), - push_to_hub = as.character(input$seg_push_to_hub), - hub_user_id = as.character(input$seg_hub_user_id), - log_to_wandb = as.character(input$seg_log_to_wandb), - wandb_project = as.character(input$seg_wandb_project), - wandb_entity = as.character(input$seg_wandb_entity), - num_proc = as.character(input$seg_num_proc), - is_presplit = as.character(input$seg_is_presplit), - train_ratio = as.character(input$seg_train_ratio), - dev_ratio = as.character(input$seg_dev_ratio) - ) - - resp <- req_perform(req) - active_job_id(resp_body_json(resp)$job_id) - }, error = function(e) { - error_message <- as.character(e$message) - if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } - polled_data(list(status = "Error", task = "Image Segmentation", log = error_message)) - }) - }) - - - # ============================================================================== - # == 5. "LIVE TRAINING" TAB LOGIC - # ============================================================================== - - # --- 5.1: Job Polling & Status Display --- - observe({ - job_id <- active_job_id() - current_status <- polled_data()$status - - # Only poll if we have an active job that isn't finished - if (!is.null(job_id) && !(current_status %in% c("completed", "failed", "Error", "Polling Error"))) { - invalidateLater(2000, session) - - # Poll for Status & Log - tryCatch({ - req_status <- request(paste0(api_url, "/status/", job_id)) - resp_status <- req_perform(req_status) - if (resp_status(resp_status) == 200) { - polled_data(resp_body_json(resp_status)) - } - }, error = function(e) { - current_data <- polled_data() - current_data$status <- "Polling Error" - polled_data(current_data) - }) - - # Poll for Metrics - tryCatch({ - req_metrics <- request(paste0(api_url, "/metrics/", job_id)) - resp_metrics <- req_perform(req_metrics) - if (resp_status(resp_metrics) == 200) { - polled_metrics(resp_body_json(resp_metrics)) - } - }, error = function(e) { - polled_metrics(NULL) - }) - } - }) + if (is.null(df) || nrow(df) == 0) { + return(p("Waiting for first evaluation epoch to complete...")) + } - # --- 5.2: Job Status Panel Outputs --- - output$job_task_display <- renderText({ polled_data()$task }) - output$job_id_display <- renderText({ ifelse(is.null(active_job_id()), "None", active_job_id()) }) - output$job_status_display <- renderText({ polled_data()$status }) + metric_names <- names(df)[sapply(df, is.numeric) & !names(df) %in% c("epoch", "step", "runtime", "samples_per_second", "steps_per_second")] - # --- 5.3: Metrics Table Panel Output --- - output$eval_table <- renderDT({ - metrics_list <- polled_metrics() - req(metrics_list, length(metrics_list) > 0) - - metrics_df <- bind_rows(metrics_list) - - if (nrow(metrics_df) > 0) { - display_df <- metrics_df %>% - pivot_longer( - cols = starts_with("eval_") | starts_with("test_"), - names_to = "metric_name", - values_to = "value", - values_drop_na = TRUE - ) %>% - separate(metric_name, into = c("step", "metric"), sep = "_", extra = "merge") %>% - pivot_wider( - names_from = metric, - values_from = value, - values_fn = first - ) %>% - select(any_of(c("step", "epoch", "loss", "map", "wer", "cer", "mean_iou")), everything()) - - datatable( - display_df, - options = list( - pageLength = 5, - scrollX = TRUE, - searching = FALSE, - autoWidth = TRUE, - class = 'cell-border stripe' - ), - rownames = FALSE - ) - } else { - return(NULL) - } - }) - - # --- 5.4: Full Log Panel Output --- - output$log_output <- renderText({ - log_text <- polled_data()$log - if (is.null(log_text) || nchar(log_text) == 0) { - return("No log output...") - } - return(log_text) - }) - - # --- 5.5: Plotting Logic for "Live Training" Tab --- - metrics_for_plotting <- reactive({ - metrics_list <- polled_metrics() - req(metrics_list, length(metrics_list) > 0) - - bind_rows(metrics_list) %>% - filter(!is.na(epoch)) %>% - filter(if_any(everything(), ~ !is.na(.))) %>% - select(starts_with("eval_"), epoch) %>% - arrange(epoch) %>% - distinct(epoch, .keep_all = TRUE) - }) + default_metric <- "eval_loss" + if (!"eval_loss" %in% metric_names && length(metric_names) > 0) { + default_metric <- metric_names[1] + } - output$metric_selector_ui <- renderUI({ - df <- tryCatch(metrics_for_plotting(), error = function(e) NULL) - - if (is.null(df) || nrow(df) == 0) { - return(p("Waiting for first evaluation epoch to complete...")) - } - - metric_names <- names(df)[sapply(df, is.numeric) & !names(df) %in% c("epoch", "step", "runtime", "samples_per_second", "steps_per_second")] - - default_metric <- "eval_loss" - if (!"eval_loss" %in% metric_names && length(metric_names) > 0) { - default_metric <- metric_names[1] - } - - selected_val <- input$selected_metric - if (is.null(selected_val) || !selected_val %in% metric_names) { - selected_val <- default_metric - } - - selectInput("selected_metric", "Select Metric to Plot:", - choices = metric_names, - selected = selected_val) - }) + selected_val <- input$selected_metric + if (is.null(selected_val) || !selected_val %in% metric_names) { + selected_val <- default_metric + } - output$dynamic_metric_plot <- renderDygraph({ - df <- tryCatch(metrics_for_plotting(), error = function(e) NULL) - - if (is.null(df) || nrow(df) == 0) { - return(dygraph(data.frame(x=c(0), y=c(0)), main = "Waiting for Epoch 1") %>% + selectInput("selected_metric", "Select Metric to Plot:", + choices = metric_names, + selected = selected_val) + }) + + output$dynamic_metric_plot <- renderDygraph({ + df <- tryCatch(metrics_for_plotting(), error = function(e) NULL) + + if (is.null(df) || nrow(df) == 0) { + return(dygraph(data.frame(x=c(0), y=c(0)), main = "Waiting for Epoch 1") %>% dyOptions(drawGrid = FALSE, drawAxes = FALSE, drawYAxis = FALSE, drawXAxis = FALSE) %>% dyAxis("x", label = "Epoch")) - } - - req(input$selected_metric) - req(input$selected_metric %in% names(df)) - - metric_to_plot <- input$selected_metric - - if (!"epoch" %in% names(df) || !metric_to_plot %in% names(df)) { - return(dygraph(data.frame(x=c(0), y=c(0)), main = "Metric data not yet available") %>% + } + + req(input$selected_metric) + req(input$selected_metric %in% names(df)) + + metric_to_plot <- input$selected_metric + + if (!"epoch" %in% names(df) || !metric_to_plot %in% names(df)) { + return(dygraph(data.frame(x=c(0), y=c(0)), main = "Metric data not yet available") %>% dyOptions(drawGrid = FALSE, drawAxes = FALSE, drawYAxis = FALSE, drawXAxis = FALSE)) - } - - plot_data <- df[, c("epoch", metric_to_plot)] - - dygraph(plot_data, main = paste(metric_to_plot, "vs. Epoch")) %>% - dySeries(metric_to_plot, label = metric_to_plot) %>% - dyAxis("x", label = "Epoch", valueRange = c(0, max(df$epoch, na.rm = TRUE) + 1)) %>% - dyRangeSelector() %>% - dyOptions(stackedGraph = FALSE, - fillGraph = FALSE, - stepPlot = FALSE, - drawPoints = TRUE, - pointSize = 4) %>% - dyLegend(show = "always", width = 200) - }) + } + plot_data <- df[, c("epoch", metric_to_plot)] - # ============================================================================== - # == 6. "TRAINING HISTORY" TAB LOGIC - # ============================================================================== - - # --- 6.1: Populate the Job Selector Dropdown (with Filters) --- - observe({ - # React to tab switching, job completion, and filter changes - input$main_tabs - polled_data() - input$history_task_filter - input$history_status_filter - - tryCatch({ - - query_params <- list() - if (input$history_task_filter != "all") { - query_params$task_type <- input$history_task_filter - } - if (input$history_status_filter != "all") { - query_params$status <- input$history_status_filter - } - - req <- request(paste0(api_url, "/jobs/list")) - if (length(query_params) > 0) { - req <- req_url_query(req, !!!query_params) - } - - resp <- req_perform(req) - jobs_list_raw <- resp_body_json(resp, simplifyVector = FALSE) - - if (length(jobs_list_raw) > 0) { - - jobs_df <- bind_rows(lapply(jobs_list_raw, function(job) { - data.frame( - id = job$id, - task_type = job$task_type, - status = job$status, - run_name = ifelse(is.null(job$details$run_name), "N/A", job$details$run_name) - ) - })) - - history_jobs_df(jobs_df) - - job_names <- paste0( - jobs_df$run_name, - " (", jobs_df$task_type, " | ID: ", substr(jobs_df$id, 1, 8), ") - ", - jobs_df$status - ) - job_choices <- setNames(jobs_df$id, job_names) - - updateSelectInput(session, "history_job_selector", choices = job_choices) - - } else { - updateSelectInput(session, "history_job_selector", choices = c("No jobs found" = "")) - history_jobs_df(NULL) - } - }, error = function(e) { - updateSelectInput(session, "history_job_selector", choices = c("Error loading jobs" = "")) - history_jobs_df(NULL) - }) - }) - - # --- 6.2: Fetch Metrics when user selects a historical job --- - observeEvent(input$history_job_selector, { - job_id <- input$history_job_selector - - history_poller_active(FALSE) # Deactivate poller by default - - if (!is.null(job_id) && nchar(job_id) > 0) { - tryCatch({ - req <- request(paste0(api_url, "/metrics/", job_id)) - resp <- req_perform(req) - history_metrics(resp_body_json(resp)) - }, error = function(e) { - history_metrics(NULL) - }) - - # --- Poller Activation Logic --- - req(history_jobs_df()) - job_info <- history_jobs_df() %>% filter(id == job_id) - if (nrow(job_info) > 0 && job_info$status == "running") { - print(paste("Activating poller for running job:", job_id)) - history_poller_active(TRUE) # Activate poller - } - # --- End Poller Logic --- - - } else { - # If job_id is "" or NULL (e.g., "No jobs found"), clear the metrics. - history_metrics(NULL) - } - }) - - # --- 6.3: Reactive for Historical Plot Data --- - history_metrics_for_plotting <- reactive({ - metrics_list <- history_metrics() - req(metrics_list, length(metrics_list) > 0) - - bind_rows(metrics_list) %>% - filter(!is.na(epoch)) %>% # <--- THIS IS THE FIX - filter(if_any(everything(), ~ !is.na(.))) %>% - select(starts_with("eval_"), epoch) %>% - arrange(epoch) %>% - distinct(epoch, .keep_all = TRUE) - }) - - # --- 6.4: Render Historical Metrics Table --- - output$history_eval_table <- renderDT({ - metrics_list <- history_metrics() - req(metrics_list, length(metrics_list) > 0) - - metrics_df <- bind_rows(metrics_list) - - if (nrow(metrics_df) > 0) { - display_df <- metrics_df %>% - pivot_longer( - cols = starts_with("eval_") | starts_with("test_"), - names_to = "metric_name", - values_to = "value", - values_drop_na = TRUE - ) %>% - separate(metric_name, into = c("step", "metric"), sep = "_", extra = "merge") %>% - pivot_wider( - names_from = metric, - values_from = value, - values_fn = first - ) %>% - select(any_of(c("step", "epoch", "loss", "map", "wer", "cer", "mean_iou")), everything()) - - datatable( - display_df, - options = list(pageLength = 5, scrollX = TRUE, searching = FALSE, autoWidth = TRUE), - rownames = FALSE - ) - } else { - return(NULL) - } - }) - - # --- 6.5: Render Historical Plot UI (Dropdown) --- - output$history_metric_selector_ui <- renderUI({ - df <- tryCatch(history_metrics_for_plotting(), error = function(e) NULL) - - if (is.null(df) || nrow(df) == 0) { - return(p("No evaluation metrics found for this job.")) - } - - metric_names <- names(df)[sapply(df, is.numeric) & !names(df) %in% c("epoch", "step", "runtime", "samples_per_second", "steps_per_second")] - - default_metric <- "eval_loss" - if (!"eval_loss" %in% metric_names && length(metric_names) > 0) { - default_metric <- metric_names[1] - } - - selected_val <- input$history_selected_metric - if (is.null(selected_val) || !selected_val %in% metric_names) { - selected_val <- default_metric - } - - selectInput("history_selected_metric", "Select Metric to Plot:", - choices = metric_names, - selected = selected_val) - }) - - # --- 6.6: Render Historical Plot --- - output$history_metric_plot <- renderDygraph({ - df <- tryCatch(history_metrics_for_plotting(), error = function(e) NULL) - - if (is.null(df) || nrow(df) == 0) { - return(dygraph(data.frame(x=c(0), y=c(0)), main = "No Metric Data") %>% - dyOptions(drawGrid = FALSE, drawAxes = FALSE, drawYAxis = FALSE, drawXAxis = FALSE) %>% - dyAxis("x", label = "Epoch")) - } - - req(input$history_selected_metric) - req(input$history_selected_metric %in% names(df)) + dygraph(plot_data, main = paste(metric_to_plot, "vs. Epoch")) %>% + dySeries(metric_to_plot, label = metric_to_plot) %>% + dyAxis("x", label = "Epoch", valueRange = c(0, max(df$epoch, na.rm = TRUE) + 1)) %>% + dyRangeSelector() %>% + dyOptions(stackedGraph = FALSE, + fillGraph = FALSE, + stepPlot = FALSE, + drawPoints = TRUE, + pointSize = 4) %>% + dyLegend(show = "always", width = 200) + }) + + + # ============================================================================== + # == 6. "TRAINING HISTORY" TAB LOGIC + # ============================================================================== + + # --- 6.1: Populate the Job Selector Dropdown (with Filters) --- + observe({ + # React to tab switching, job completion, and filter changes + input$main_tabs + polled_data() + input$history_task_filter + input$history_status_filter + + tryCatch({ + + query_params <- list() + if (input$history_task_filter != "all") { + query_params$task_type <- input$history_task_filter + } + if (input$history_status_filter != "all") { + query_params$status <- input$history_status_filter + } + + req <- request(paste0(api_url, "/jobs/list")) + if (length(query_params) > 0) { + req <- req_url_query(req, !!!query_params) + } + + resp <- req_perform(req) + jobs_list_raw <- resp_body_json(resp, simplifyVector = FALSE) + + if (length(jobs_list_raw) > 0) { - metric_to_plot <- input$history_selected_metric + jobs_df <- bind_rows(lapply(jobs_list_raw, function(job) { + data.frame( + id = job$id, + task_type = job$task_type, + status = job$status, + run_name = ifelse(is.null(job$details$run_name), "N/A", job$details$run_name) + ) + })) - if (!"epoch" %in% names(df) || !metric_to_plot %in% names(df)) { - return(dygraph(data.frame(x=c(0), y=c(0)), main = "Metric data not yet available") %>% - dyOptions(drawGrid = FALSE, drawAxes = FALSE, drawYAxis = FALSE, drawXAxis = FALSE)) - } - - plot_data <- df[, c("epoch", metric_to_plot)] + history_jobs_df(jobs_df) - dygraph(plot_data, main = paste(metric_to_plot, "vs. Epoch")) %>% - dySeries(metric_to_plot, label = metric_to_plot) %>% - dyAxis("x", label = "Epoch", valueRange = c(0, max(df$epoch, na.rm = TRUE) + 1)) %>% - dyRangeSelector() %>% - dyOptions(stackedGraph = FALSE, - fillGraph = FALSE, - stepPlot = FALSE, - drawPoints = TRUE, - pointSize = 4) %>% - dyLegend(show = "always", width = 200) - }) - - # --- 6.7: Poller for selected running job in History tab --- - observe({ - # Only run if: - req( - history_poller_active() == TRUE, - input$main_tabs == "Training History", - !is.null(input$history_job_selector), - nchar(input$history_job_selector) > 0 + job_names <- paste0( + jobs_df$run_name, + " (", jobs_df$task_type, " | ID: ", substr(jobs_df$id, 1, 8), ") - ", + jobs_df$status ) + job_choices <- setNames(jobs_df$id, job_names) - # Poll every 3 seconds - invalidateLater(3000, session) - - job_id <- input$history_job_selector - print(paste("History Poller: Fetching metrics for", job_id)) + updateSelectInput(session, "history_job_selector", choices = job_choices) - tryCatch({ - req <- request(paste0(api_url, "/metrics/", job_id)) - resp <- req_perform(req) - if (resp_status(resp) == 200) { - history_metrics(resp_body_json(resp)) - } - - # Check if job is still running - req_status <- request(paste0(api_url, "/status/", job_id)) - resp_status <- req_perform(req_status) - if (resp_status(resp_status) == 200) { - status_data <- resp_body_json(resp_status) - if (status_data$status != "running") { - print(paste("History Poller: Job", job_id, "is no longer running. Deactivating poller.")) - history_poller_active(FALSE) - # Refresh the job list dropdown to show "completed" - observeEvent(model_registry(), { - req(model_registry()) - refresh_data_trigger(refresh_data_trigger() + 1) - }, once = TRUE) - } - } - - }, error = function(e) { - print(paste("History Poller Error:", e$message)) - history_poller_active(FALSE) # Stop polling on error - }) + } else { + updateSelectInput(session, "history_job_selector", choices = c("No jobs found" = "")) + history_jobs_df(NULL) + } + }, error = function(e) { + updateSelectInput(session, "history_job_selector", choices = c("Error loading jobs" = "")) + history_jobs_df(NULL) }) + }) + + # --- 6.2: Fetch Metrics when user selects a historical job --- + observeEvent(input$history_job_selector, { + job_id <- input$history_job_selector + history_poller_active(FALSE) # Deactivate poller by default - # ============================================================================== - # == 7. "INFERENCE" TAB LOGIC - # ============================================================================== + if (!is.null(job_id) && nchar(job_id) > 0) { + tryCatch({ + req <- request(paste0(api_url, "/metrics/", job_id)) + resp <- req_perform(req) + history_metrics(resp_body_json(resp)) + }, error = function(e) { + history_metrics(NULL) + }) + + # --- Poller Activation Logic --- + req(history_jobs_df()) + job_info <- history_jobs_df() %>% filter(id == job_id) + if (nrow(job_info) > 0 && job_info$status == "running") { + print(paste("Activating poller for running job:", job_id)) + history_poller_active(TRUE) # Activate poller + } + # --- End Poller Logic --- + + } else { + # If job_id is "" or NULL (e.g., "No jobs found"), clear the metrics. + history_metrics(NULL) + } + }) + + # --- 6.3: Reactive for Historical Plot Data --- + history_metrics_for_plotting <- reactive({ + metrics_list <- history_metrics() + req(metrics_list, length(metrics_list) > 0) - # --- 7.1: Inference Checkpoint Finders --- - observeEvent(input$infer_run_name, { - run_name <- input$infer_run_name - if (nchar(run_name) > 2) { - tryCatch({ - req <- request(paste0(api_url, "/checkpoints")) %>% - req_url_query(run_name = run_name, task_type = "object_detection") - resp <- req_perform(req) - if (resp_status(resp) == 200) { - checkpoints <- resp_body_json(resp, simplifyVector = TRUE) - updateSelectInput(session, "infer_checkpoint_dropdown", choices = checkpoints) - } - }, error = function(e) { - updateSelectInput(session, "infer_checkpoint_dropdown", choices = c("Error finding checkpoints")) - }) - } - }) + bind_rows(metrics_list) %>% + filter(!is.na(epoch)) %>% # <--- THIS IS THE FIX + filter(if_any(everything(), ~ !is.na(.))) %>% + select(starts_with("eval_"), epoch) %>% + arrange(epoch) %>% + distinct(epoch, .keep_all = TRUE) + }) + + # --- 6.4: Render Historical Metrics Table --- + output$history_eval_table <- renderDT({ + metrics_list <- history_metrics() + req(metrics_list, length(metrics_list) > 0) - observeEvent(input$infer_asr_run_name, { - run_name <- input$infer_asr_run_name - if (nchar(run_name) > 2) { - tryCatch({ - req <- request(paste0(api_url, "/checkpoints")) %>% - req_url_query(run_name = run_name, task_type = "asr") - resp <- req_perform(req) - if (resp_status(resp) == 200) { - checkpoints <- resp_body_json(resp, simplifyVector = TRUE) - updateSelectInput(session, "infer_asr_checkpoint_dropdown", choices = checkpoints) - } - }, error = function(e) { - updateSelectInput(session, "infer_asr_checkpoint_dropdown", choices = c("Error finding checkpoints")) - }) - } - }) - - observeEvent(input$infer_img_class_run_name, { - run_name <- input$infer_img_class_run_name - if (nchar(run_name) > 2) { - tryCatch({ - req <- request(paste0(api_url, "/checkpoints")) %>% - req_url_query(run_name = run_name, task_type = "image_classification") - checkpoints <- resp_body_json(req_perform(req), simplifyVector = TRUE) - updateSelectInput(session, "infer_img_class_checkpoint_dropdown", choices = checkpoints) - }, error = function(e) { }) - } - }) + metrics_df <- bind_rows(metrics_list) - observeEvent(input$infer_seg_run_name, { - run_name <- input$infer_seg_run_name - if (nchar(run_name) > 2) { - tryCatch({ - req <- request(paste0(api_url, "/checkpoints")) %>% - req_url_query(run_name = run_name, task_type = "image_segmentation") - checkpoints <- resp_body_json(req_perform(req), simplifyVector = TRUE) - updateSelectInput(session, "infer_seg_checkpoint_dropdown", choices = checkpoints) - }, error = function(e) { }) - } - }) - - # --- 7.2: Inference Job Submission (One per task) --- + if (nrow(metrics_df) > 0) { + display_df <- metrics_df %>% + pivot_longer( + cols = starts_with("eval_") | starts_with("test_"), + names_to = "metric_name", + values_to = "value", + values_drop_na = TRUE + ) %>% + separate(metric_name, into = c("step", "metric"), sep = "_", extra = "merge") %>% + pivot_wider( + names_from = metric, + values_from = value, + values_fn = first + ) %>% + select(any_of(c("step", "epoch", "loss", "map", "wer", "cer", "mean_iou")), everything()) + + datatable( + display_df, + options = list(pageLength = 5, scrollX = TRUE, searching = FALSE, autoWidth = TRUE), + rownames = FALSE + ) + } else { + return(NULL) + } + }) + + # --- 6.5: Render Historical Plot UI (Dropdown) --- + output$history_metric_selector_ui <- renderUI({ + df <- tryCatch(history_metrics_for_plotting(), error = function(e) NULL) - observeEvent(input$start_obj_inference, { - req(input$infer_obj_image_upload); req(input$infer_checkpoint_dropdown) - obj_inference_result(list(status = "Running...", image_url = NULL, error = NULL)) - tryCatch({ - req <- request(paste0(api_url, "/inference/object-detection")) %>% - req_body_multipart( - image = curl::form_file(input$infer_obj_image_upload$datapath), - model_checkpoint = input$infer_checkpoint_dropdown, - threshold = as.character(input$infer_obj_threshold), - iou = as.character(input$infer_obj_iou), - max_det = as.character(input$infer_obj_max_det) - ) - resp <- req_perform(req) - resp_data <- resp_body_json(resp) - obj_inference_result(list(status = "Success", image_url = resp_data$output_url, error = NULL)) - }, error = function(e) { - error_message <- as.character(e$message) - if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } - obj_inference_result(list(status = "Error", image_url = NULL, error = error_message)) - }) - }) - - observeEvent(input$start_asr_inference, { - req(input$infer_asr_audio_upload) - req(input$infer_asr_checkpoint_dropdown) - asr_inference_result(list(status = "Running...", transcription = "Processing...", error = NULL)) - tryCatch({ - req <- request(paste0(api_url, "/inference/asr")) %>% - req_body_multipart( - audio = curl::form_file(input$infer_asr_audio_upload$datapath), - model_checkpoint = input$infer_asr_checkpoint_dropdown - ) - resp <- req_perform(req) - resp_data <- resp_body_json(resp) - asr_inference_result(list(status = "Success", transcription = resp_data$transcription, error = NULL)) - }, error = function(e) { - error_message <- as.character(e$message) - if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } - asr_inference_result(list(status = "Error", transcription = NULL, error = error_message)) - }) - }) + if (is.null(df) || nrow(df) == 0) { + return(p("No evaluation metrics found for this job.")) + } - observeEvent(input$start_img_class_inference, { - req(input$infer_img_class_upload, input$infer_img_class_checkpoint_dropdown) - img_class_inference_result(list(status = "Running...", prediction = "Processing...", error = NULL)) - tryCatch({ - req <- request(paste0(api_url, "/inference/image-classification")) %>% - req_body_multipart( - image = curl::form_file(input$infer_img_class_upload$datapath), - model_checkpoint = input$infer_img_class_checkpoint_dropdown - ) - resp_data <- resp_body_json(req_perform(req)) - img_class_inference_result(list(status = "Success", prediction = resp_data$prediction, error = NULL)) - }, error = function(e) { - img_class_inference_result(list(status = "Error", prediction = NULL, error = as.character(e))) - }) - }) + metric_names <- names(df)[sapply(df, is.numeric) & !names(df) %in% c("epoch", "step", "runtime", "samples_per_second", "steps_per_second")] - observeEvent(input$start_seg_inference, { - req(input$infer_seg_image_upload); req(input$infer_seg_checkpoint_dropdown) - seg_inference_result(list(status = "Running...", image_url = NULL, error = NULL)) - tryCatch({ - req <- request(paste0(api_url, "/inference/image-segmentation")) %>% - req_body_multipart( - image = curl::form_file(input$infer_seg_image_upload$datapath), - model_checkpoint = input$infer_seg_checkpoint_dropdown - ) - resp <- req_perform(req) - resp_data <- resp_body_json(resp) - seg_inference_result(list(status = "Success", image_url = resp_data$output_url, error = NULL)) - }, error = function(e) { - error_message <- as.character(e$message) - if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } - seg_inference_result(list(status = "Error", image_url = NULL, error = error_message)) - }) - }) + default_metric <- "eval_loss" + if (!"eval_loss" %in% metric_names && length(metric_names) > 0) { + default_metric <- metric_names[1] + } + + selected_val <- input$history_selected_metric + if (is.null(selected_val) || !selected_val %in% metric_names) { + selected_val <- default_metric + } + + selectInput("history_selected_metric", "Select Metric to Plot:", + choices = metric_names, + selected = selected_val) + }) + + # --- 6.6: Render Historical Plot --- + output$history_metric_plot <- renderDygraph({ + df <- tryCatch(history_metrics_for_plotting(), error = function(e) NULL) + + if (is.null(df) || nrow(df) == 0) { + return(dygraph(data.frame(x=c(0), y=c(0)), main = "No Metric Data") %>% + dyOptions(drawGrid = FALSE, drawAxes = FALSE, drawYAxis = FALSE, drawXAxis = FALSE) %>% + dyAxis("x", label = "Epoch")) + } - # --- 7.3: Inference UI Outputs --- + req(input$history_selected_metric) + req(input$history_selected_metric %in% names(df)) - output$inference_status_ui <- renderUI({ - res <- obj_inference_result() - if (res$status == "Running...") { - tags$div(class = "alert alert-info", "Running inference...") - } else if (res$status == "Error") { - tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) + metric_to_plot <- input$history_selected_metric + + if (!"epoch" %in% names(df) || !metric_to_plot %in% names(df)) { + return(dygraph(data.frame(x=c(0), y=c(0)), main = "Metric data not yet available") %>% + dyOptions(drawGrid = FALSE, drawAxes = FALSE, drawYAxis = FALSE, drawXAxis = FALSE)) + } + + plot_data <- df[, c("epoch", metric_to_plot)] + + dygraph(plot_data, main = paste(metric_to_plot, "vs. Epoch")) %>% + dySeries(metric_to_plot, label = metric_to_plot) %>% + dyAxis("x", label = "Epoch", valueRange = c(0, max(df$epoch, na.rm = TRUE) + 1)) %>% + dyRangeSelector() %>% + dyOptions(stackedGraph = FALSE, + fillGraph = FALSE, + stepPlot = FALSE, + drawPoints = TRUE, + pointSize = 4) %>% + dyLegend(show = "always", width = 200) + }) + + # --- 6.7: Poller for selected running job in History tab --- + observe({ + # Only run if: + req( + history_poller_active() == TRUE, + input$main_tabs == "Training History", + !is.null(input$history_job_selector), + nchar(input$history_job_selector) > 0 + ) + + # Poll every 3 seconds + invalidateLater(3000, session) + + job_id <- input$history_job_selector + print(paste("History Poller: Fetching metrics for", job_id)) + + tryCatch({ + req <- request(paste0(api_url, "/metrics/", job_id)) + resp <- req_perform(req) + if (resp_status(resp) == 200) { + history_metrics(resp_body_json(resp)) + } + + # Check if job is still running + req_status <- request(paste0(api_url, "/status/", job_id)) + resp_status <- req_perform(req_status) + if (resp_status(resp_status) == 200) { + status_data <- resp_body_json(resp_status) + if (status_data$status != "running") { + print(paste("History Poller: Job", job_id, "is no longer running. Deactivating poller.")) + history_poller_active(FALSE) + # Refresh the job list dropdown to show "completed" + observeEvent(model_registry(), { + req(model_registry()) + refresh_data_trigger(refresh_data_trigger() + 1) + }, once = TRUE) } + } + + }, error = function(e) { + print(paste("History Poller Error:", e$message)) + history_poller_active(FALSE) # Stop polling on error }) - output$inference_image_output <- renderImage({ - res <- obj_inference_result() - req(res$status == "Success", res$image_url) - image_url <- paste0(api_url, res$image_url) - temp_file <- tempfile(fileext = ".jpg") - download.file(image_url, temp_file, mode = "wb") - list(src = temp_file, contentType = 'image/jpeg', alt = "Inference Result") - }, deleteFile = TRUE) - - output$asr_inference_status_ui <- renderUI({ - res <- asr_inference_result() - if (res$status == "Running...") { - tags$div(class = "alert alert-info", "Running inference...") - } else if (res$status == "Error") { - tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) + }) + + + # ============================================================================== + # == 7. "INFERENCE" TAB LOGIC + # ============================================================================== + + # --- 7.1: Inference Checkpoint Finders --- + observeEvent(input$infer_run_name, { + run_name <- input$infer_run_name + if (nchar(run_name) > 2) { + tryCatch({ + req <- request(paste0(api_url, "/checkpoints")) %>% + req_url_query(run_name = run_name, task_type = "object_detection") + resp <- req_perform(req) + if (resp_status(resp) == 200) { + checkpoints <- resp_body_json(resp, simplifyVector = TRUE) + updateSelectInput(session, "infer_checkpoint_dropdown", choices = checkpoints) } - }) - output$asr_transcription_output <- renderText({ - res <- asr_inference_result() - if (is.null(res$transcription)) { - "Upload an audio file and click 'Run Inference' to see the transcription here." - } else { - res$transcription + }, error = function(e) { + updateSelectInput(session, "infer_checkpoint_dropdown", choices = c("Error finding checkpoints")) + }) + } + }) + + observeEvent(input$infer_asr_run_name, { + run_name <- input$infer_asr_run_name + if (nchar(run_name) > 2) { + tryCatch({ + req <- request(paste0(api_url, "/checkpoints")) %>% + req_url_query(run_name = run_name, task_type = "asr") + resp <- req_perform(req) + if (resp_status(resp) == 200) { + checkpoints <- resp_body_json(resp, simplifyVector = TRUE) + updateSelectInput(session, "infer_asr_checkpoint_dropdown", choices = checkpoints) } + }, error = function(e) { + updateSelectInput(session, "infer_asr_checkpoint_dropdown", choices = c("Error finding checkpoints")) + }) + } + }) + + observeEvent(input$infer_img_class_run_name, { + run_name <- input$infer_img_class_run_name + if (nchar(run_name) > 2) { + tryCatch({ + req <- request(paste0(api_url, "/checkpoints")) %>% + req_url_query(run_name = run_name, task_type = "image_classification") + checkpoints <- resp_body_json(req_perform(req), simplifyVector = TRUE) + updateSelectInput(session, "infer_img_class_checkpoint_dropdown", choices = checkpoints) + }, error = function(e) { }) + } + }) + + observeEvent(input$infer_seg_run_name, { + run_name <- input$infer_seg_run_name + if (nchar(run_name) > 2) { + tryCatch({ + req <- request(paste0(api_url, "/checkpoints")) %>% + req_url_query(run_name = run_name, task_type = "image_segmentation") + checkpoints <- resp_body_json(req_perform(req), simplifyVector = TRUE) + updateSelectInput(session, "infer_seg_checkpoint_dropdown", choices = checkpoints) + }, error = function(e) { }) + } + }) + + # --- 7.2: Inference Job Submission (One per task) --- + + observeEvent(input$start_obj_inference, { + req(input$infer_obj_image_upload); req(input$infer_checkpoint_dropdown) + obj_inference_result(list(status = "Running...", image_url = NULL, error = NULL)) + tryCatch({ + req <- request(paste0(api_url, "/inference/object-detection")) %>% + req_body_multipart( + image = curl::form_file(input$infer_obj_image_upload$datapath), + model_checkpoint = input$infer_checkpoint_dropdown, + threshold = as.character(input$infer_obj_threshold), + iou = as.character(input$infer_obj_iou), + max_det = as.character(input$infer_obj_max_det) + ) + resp <- req_perform(req) + resp_data <- resp_body_json(resp) + obj_inference_result(list(status = "Success", image_url = resp_data$output_url, error = NULL)) + }, error = function(e) { + error_message <- as.character(e$message) + if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } + obj_inference_result(list(status = "Error", image_url = NULL, error = error_message)) }) - - output$img_class_inference_status_ui <- renderUI({ - res <- img_class_inference_result() - if (res$status == "Running...") tags$div(class = "alert alert-info", "Running inference...") - else if (res$status == "Error") tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) + }) + + observeEvent(input$start_asr_inference, { + req(input$infer_asr_audio_upload) + req(input$infer_asr_checkpoint_dropdown) + asr_inference_result(list(status = "Running...", transcription = "Processing...", error = NULL)) + tryCatch({ + req <- request(paste0(api_url, "/inference/asr")) %>% + req_body_multipart( + audio = curl::form_file(input$infer_asr_audio_upload$datapath), + model_checkpoint = input$infer_asr_checkpoint_dropdown + ) + resp <- req_perform(req) + resp_data <- resp_body_json(resp) + asr_inference_result(list(status = "Success", transcription = resp_data$transcription, error = NULL)) + }, error = function(e) { + error_message <- as.character(e$message) + if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } + asr_inference_result(list(status = "Error", transcription = NULL, error = error_message)) }) - output$img_class_prediction_output <- renderText({ - img_class_inference_result()$prediction + }) + + observeEvent(input$start_img_class_inference, { + req(input$infer_img_class_upload, input$infer_img_class_checkpoint_dropdown) + img_class_inference_result(list(status = "Running...", prediction = "Processing...", error = NULL)) + tryCatch({ + req <- request(paste0(api_url, "/inference/image-classification")) %>% + req_body_multipart( + image = curl::form_file(input$infer_img_class_upload$datapath), + model_checkpoint = input$infer_img_class_checkpoint_dropdown + ) + resp_data <- resp_body_json(req_perform(req)) + img_class_inference_result(list(status = "Success", prediction = resp_data$prediction, error = NULL)) + }, error = function(e) { + img_class_inference_result(list(status = "Error", prediction = NULL, error = as.character(e))) }) - - output$seg_inference_status_ui <- renderUI({ - res <- seg_inference_result() - if (res$status == "Running...") { - tags$div(class = "alert alert-info", "Running inference...") - } else if (res$status == "Error") { - tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) - } + }) + + observeEvent(input$start_seg_inference, { + req(input$infer_seg_image_upload); req(input$infer_seg_checkpoint_dropdown) + seg_inference_result(list(status = "Running...", image_url = NULL, error = NULL)) + tryCatch({ + req <- request(paste0(api_url, "/inference/image-segmentation")) %>% + req_body_multipart( + image = curl::form_file(input$infer_seg_image_upload$datapath), + model_checkpoint = input$infer_seg_checkpoint_dropdown + ) + resp <- req_perform(req) + resp_data <- resp_body_json(resp) + seg_inference_result(list(status = "Success", image_url = resp_data$output_url, error = NULL)) + }, error = function(e) { + error_message <- as.character(e$message) + if(!is.null(e$body)) { error_message <- paste("API Error:", e$body) } + seg_inference_result(list(status = "Error", image_url = NULL, error = error_message)) }) - output$seg_inference_image_output <- renderImage({ - res <- seg_inference_result() - req(res$status == "Success", res$image_url) - image_url <- paste0(api_url, res$image_url) - temp_file <- tempfile(fileext = ".jpg") - download.file(image_url, temp_file, mode = "wb") - list(src = temp_file, contentType = 'image/jpeg', alt = "Inference Result") - }, deleteFile = TRUE) - + }) + + # --- 7.3: Inference UI Outputs --- + + output$inference_status_ui <- renderUI({ + res <- obj_inference_result() + if (res$status == "Running...") { + tags$div(class = "alert alert-info", "Running inference...") + } else if (res$status == "Error") { + tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) + } + }) + output$inference_image_output <- renderImage({ + res <- obj_inference_result() + req(res$status == "Success", res$image_url) + image_url <- paste0(api_url, res$image_url) + temp_file <- tempfile(fileext = ".jpg") + download.file(image_url, temp_file, mode = "wb") + list(src = temp_file, contentType = 'image/jpeg', alt = "Inference Result") + }, deleteFile = TRUE) + + output$asr_inference_status_ui <- renderUI({ + res <- asr_inference_result() + if (res$status == "Running...") { + tags$div(class = "alert alert-info", "Running inference...") + } else if (res$status == "Error") { + tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) + } + }) + output$asr_transcription_output <- renderText({ + res <- asr_inference_result() + if (is.null(res$transcription)) { + "Upload an audio file and click 'Run Inference' to see the transcription here." + } else { + res$transcription + } + }) + + output$img_class_inference_status_ui <- renderUI({ + res <- img_class_inference_result() + if (res$status == "Running...") tags$div(class = "alert alert-info", "Running inference...") + else if (res$status == "Error") tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) + }) + output$img_class_prediction_output <- renderText({ + img_class_inference_result()$prediction + }) + + output$seg_inference_status_ui <- renderUI({ + res <- seg_inference_result() + if (res$status == "Running...") { + tags$div(class = "alert alert-info", "Running inference...") + } else if (res$status == "Error") { + tags$div(class = "alert alert-danger", HTML(paste("Error:", res$error))) + } + }) + output$seg_inference_image_output <- renderImage({ + res <- seg_inference_result() + req(res$status == "Success", res$image_url) + image_url <- paste0(api_url, res$image_url) + temp_file <- tempfile(fileext = ".jpg") + download.file(image_url, temp_file, mode = "wb") + list(src = temp_file, contentType = 'image/jpeg', alt = "Inference Result") + }, deleteFile = TRUE) + } diff --git a/server/header_footer_configs.R b/server/header_footer_configs.R index 9bc42a7..73b1ef9 100644 --- a/server/header_footer_configs.R +++ b/server/header_footer_configs.R @@ -1,25 +1,24 @@ app_title = function() { - output$app_title = renderUI({ - h3(get_rv_labels("app_title"), style = "text-align: center;") - }) + output$app_title = renderUI({ + h3(get_rv_labels("app_title"), style = "text-align: center;") + }) } #Footer Language convertion footer_language_translation = function() { output$app_footer_title = renderUI({ - # h4(get_rv_labels("footer_org_name")) - h4(get_rv_labels("app_version")) + h4(get_rv_labels("footer_org_name")) }) - + output$app_footer_contact = renderUI({ h4(HTML(paste0('',get_rv_labels("footer_contact"), ': example@aphrc.org'))) }) - + output$app_footer_all_rights = renderUI({ h4(get_rv_labels("footer_org_name")) }) - + output$app_footer_all_rights = renderUI({ h4(paste0(get_rv_labels("footer_copyright"), " © ", format(Sys.Date(), "%Y"), ", ", get_rv_labels("footer_all_rights")), style = "text-align: right;") }) @@ -31,85 +30,100 @@ footer_language_translation = function() { menu_translation = function(){ output$dynamic_meinu_aphrc <- renderMenu({ sidebarMenu(id = "tabs", - menuItem(text = HTML(paste0("", get_rv_labels("menu_home"), "")), tabName = "homePage", icon = icon("house"), selected = TRUE), - menuItem(text = HTML(paste0("", get_rv_labels("menu_source_data"), "")), tabName = "sourcedata", icon = icon("file-import", lib = "font-awesome")), - menuItem( - text = HTML(paste0("", get_rv_labels("menu_manage_data"), "")), tabName = "manageData", icon = icon("glyphicon glyphicon-tasks", lib = "glyphicon"), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_overview"), "")), tabName = "Overview", icon = icon("table-columns", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_explore"), "")), tabName = "Explore", icon = icon("object-ungroup", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_transform"), "")), tabName = "Transform", icon = icon("table-columns", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_combine_data"), "")), tabName = "combineData", icon = icon("table-columns", lib = "font-awesome")) - ), - menuItem(text = HTML(paste0("", get_rv_labels("menu_visualize_data"), "")), tabName = "visualizeData", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon"), - menuItem(text = HTML(paste0("", get_rv_labels("menu_summarizeAutomatic"), "")), tabName = "summarizeAutomatic", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon") - - ), - menuItem(text = HTML(paste0("", get_rv_labels("menu_summarizeCustom"), "")), tabName = "summarizeCustom", icon = icon("chart-line"))), - - - menuItem(text = HTML(paste0("", get_rv_labels("menu_research_question"), "")), tabName = "researchQuestions", icon = icon("file-import", lib = "font-awesome"), selected = FALSE), - - - menuItem( - text = HTML(paste0("", get_rv_labels("menu_machine_learning"), "")), tabName = "machineLearning", icon = icon("code-merge", lib = "font-awesome"), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_setup_models"), "")), tabName = "setupModels", icon = icon("arrows-split-up-and-left", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_feature_engineering"), "")), tabName = "featureEngineering", icon = icon("sitemap", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_train_model"), "")), tabName = "trainModel", icon = icon("gear", lib = "font-awesome")), - menuSubItem(text =HTML(paste0("", get_rv_labels("menu_validate_model"), "")), tabName = "validateDeployModel", icon = icon("server", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_predict"), "")), tabName = "predictClassify", icon = icon("layer-group", lib = "font-awesome")) - ), - menuItem(text = HTML(paste0("", get_rv_labels("menu_omop_data"), "")), tabName = "omopAnalysis", icon = icon("magnifying-glass-chart", lib = "font-awesome"), - menuSubItem(text =HTML(paste0("", get_rv_labels("evidenceQuality"), "")), tabName = "evidenceQuality", icon = icon("server", lib = "font-awesome")), - #menuSubItem(text = HTML(paste0("", get_rv_labels("cohortConstruction"), "")), tabName = "cohortConstruction", icon = icon("layer-group", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_achilles"), "")), tabName = "achilles", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_omop"), "")), tabName = "omop_visualizations", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_Cohort_Constructor"), "")), tabName = "CohortConstructor", icon = icon("arrows-split-up-and-left", lib = "font-awesome")), - menuSubItem(text = HTML(paste0("", get_rv_labels("menu_Feature_Extraction"), "")), tabName = "FeatureExtraction", icon = icon("arrows-split-up-and-left", lib = "font-awesome")) - - - ), - menuItem( - HTML(paste0("", get_rv_labels("deeplearning"), "")), - tabName = "deeplearning", - icon = icon("gear"), - - # # --- CNN Deep section with its own submenus --- - # menuItem( - # HTML(paste0("", get_rv_labels("cnn_deep"), "")), - # tabName = "cnntransformers", - # icon = icon("gear", lib = "font-awesome"), - # - # menuSubItem(get_rv_labels("dashboard"), tabName = "dashboard", icon = icon("dashboard")), - # menuSubItem(get_rv_labels("c_pipeline"), tabName = "create", icon = icon("plus-circle")), - # menuSubItem(get_rv_labels("t_model"), tabName = "train", icon = icon("cog")), - # menuSubItem(get_rv_labels("m_predictions"), tabName = "predict", icon = icon("eye")), - # menuSubItem(get_rv_labels("v_jobs"), tabName = "jobs", icon = icon("list")), - # menuSubItem(get_rv_labels("v_datasets"), tabName = "datasets", icon = icon("database")), - # menuSubItem(get_rv_labels("d_jobs"), tabName = "delete", icon = icon("trash")) - #), - - # --- Transformers Deep --- - menuItem( - HTML(paste0("", get_rv_labels("transformers_deep"), "")), - tabName = "cnndeep", - icon = icon("server", lib = "font-awesome") - ) - ) - , - - - menuItem(HTML(paste0("", get_rv_labels("menu_additional_resources"), "")), tabName = "addResources", icon = icon("book")), - br(), - div( - style="display: flex; justify-content: flex-start; gap: 10px; margin-top: 5px;", - actionBttn("logoutID", label = get_rv_labels("logoutID"), class = "btn") - #is_logged_in( - # id = app_login_config$APP_ID,login::logout_button(id = "logout", label = "Sign out")) - ) - - ) + menuItem(text = HTML(paste0("", get_rv_labels("menu_home"), "")), tabName = "homePage", icon = icon("house"), selected = TRUE), + menuItem(text = HTML(paste0("", get_rv_labels("menu_source_data"), "")), tabName = "sourcedata", icon = icon("file-import", lib = "font-awesome")), + menuItem( + text = HTML(paste0("", get_rv_labels("menu_manage_data"), "")), tabName = "manageData", icon = icon("glyphicon glyphicon-tasks", lib = "glyphicon"), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_overview"), "")), tabName = "Overview", icon = icon("table-columns", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_explore"), "")), tabName = "Explore", icon = icon("object-ungroup", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_transform"), "")), tabName = "Transform", icon = icon("table-columns", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_combine_data"), "")), tabName = "combineData", icon = icon("table-columns", lib = "font-awesome")) + ), + menuItem(text = HTML(paste0("", get_rv_labels("menu_visualize_data"), "")), tabName = "visualizeData", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon"), + menuItem(text = HTML(paste0("", get_rv_labels("menu_summarizeAutomatic"), "")), tabName = "summarizeAutomatic", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon") + + ), + menuItem(text = HTML(paste0("", get_rv_labels("menu_summarizeCustom"), "")), tabName = "summarizeCustom", icon = icon("chart-line"))), + + + menuItem(text = HTML(paste0("", get_rv_labels("menu_research_question"), "")), tabName = "researchQuestions", icon = icon("file-import", lib = "font-awesome"), selected = FALSE), + + + menuItem( + text = HTML(paste0("", get_rv_labels("menu_machine_learning"), "")), tabName = "machineLearning", icon = icon("code-merge", lib = "font-awesome"), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_setup_models"), "")), tabName = "setupModels", icon = icon("arrows-split-up-and-left", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_feature_engineering"), "")), tabName = "featureEngineering", icon = icon("sitemap", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_train_model"), "")), tabName = "trainModel", icon = icon("gear", lib = "font-awesome")), + menuSubItem(text =HTML(paste0("", get_rv_labels("menu_validate_model"), "")), tabName = "validateDeployModel", icon = icon("server", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_predict"), "")), tabName = "predictClassify", icon = icon("layer-group", lib = "font-awesome")) + ), + menuItem(text = HTML(paste0("", get_rv_labels("menu_omop_data"), "")), tabName = "omopAnalysis", icon = icon("magnifying-glass-chart", lib = "font-awesome"), + menuSubItem(text =HTML(paste0("", get_rv_labels("evidenceQuality"), "")), tabName = "evidenceQuality", icon = icon("server", lib = "font-awesome")), + #menuSubItem(text = HTML(paste0("", get_rv_labels("cohortConstruction"), "")), tabName = "cohortConstruction", icon = icon("layer-group", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_achilles"), "")), tabName = "achilles", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_omop"), "")), tabName = "omop_visualizations", icon = icon("glyphicon glyphicon-stats", lib = "glyphicon")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_Cohort_Constructor"), "")), tabName = "CohortConstructor", icon = icon("arrows-split-up-and-left", lib = "font-awesome")), + menuSubItem(text = HTML(paste0("", get_rv_labels("menu_Feature_Extraction"), "")), tabName = "FeatureExtraction", icon = icon("arrows-split-up-and-left", lib = "font-awesome")) + + + ), + menuItem( + HTML(paste0("", get_rv_labels("deeplearning"), "")), + tabName = "deeplearning", + icon = icon("gear"), + + # # --- CNN Deep section with its own submenus --- + # menuItem( + # HTML(paste0("", get_rv_labels("cnn_deep"), "")), + # tabName = "cnntransformers", + # icon = icon("gear", lib = "font-awesome"), + # + # menuSubItem(get_rv_labels("dashboard"), tabName = "dashboard", icon = icon("dashboard")), + # menuSubItem(get_rv_labels("c_pipeline"), tabName = "create", icon = icon("plus-circle")), + # menuSubItem(get_rv_labels("t_model"), tabName = "train", icon = icon("cog")), + # menuSubItem(get_rv_labels("m_predictions"), tabName = "predict", icon = icon("eye")), + # menuSubItem(get_rv_labels("v_jobs"), tabName = "jobs", icon = icon("list")), + # menuSubItem(get_rv_labels("v_datasets"), tabName = "datasets", icon = icon("database")), + # menuSubItem(get_rv_labels("d_jobs"), tabName = "delete", icon = icon("trash")) + #), + + + # --- Transformers Deep --- + menuItem( + HTML(paste0("", get_rv_labels("transformers_deep"), "")), + tabName = "cnndeep", + icon = icon("server", lib = "font-awesome") + ) + ) + , + menuItem( + text = HTML(paste0("", get_rv_labels("menu_data_anonymization"), "")), + icon = icon("user-shield", lib = "font-awesome"), + menuSubItem( + text = HTML(paste0("", get_rv_labels("menu_quant_anonymization"), "")), + tabName = "anonymization_quant", + icon = icon("calculator") + ), + menuSubItem( + text = HTML(paste0("", get_rv_labels("menu_qual_anonymization"), "")), + tabName = "anonymization_qual", + icon = icon("align-left") + ) + ), + + + + menuItem(HTML(paste0("", get_rv_labels("menu_additional_resources"), "")), tabName = "addResources", icon = icon("book")), + br(), + div( + style="display: flex; justify-content: flex-start; gap: 10px; margin-top: 5px;", + actionBttn("logoutID", label = get_rv_labels("logoutID"), class = "btn") + #is_logged_in( + # id = app_login_config$APP_ID,login::logout_button(id = "logout", label = "Sign out")) + ) + + ) }) -} - +} \ No newline at end of file diff --git a/server/load_libraries.R b/server/load_libraries.R new file mode 100644 index 0000000..5517f39 --- /dev/null +++ b/server/load_libraries.R @@ -0,0 +1,19 @@ +library(shiny) +library(shinyjs) +library(sortable) # drag-and-drop QID picker +library(shinyWidgets) # gauges & widgets +library(flexdashboard) # gaugeOutput() +library(shinyAce) # Ace editors +library(leaflet) # map preview for coordinates +library(dplyr) +library(readr) +library(readxl) +library(openxlsx) +library(haven) +library(shinyjs) +library(shiny) +library(digest) +library(sdcMicro) +library(rmarkdown) +library(pagedown) +library(data.table) diff --git a/static_files/labelling_file.xlsx b/static_files/labelling_file.xlsx index cf4ef8ddbbb002a89132602bd112cbc615c9c7f1..4d2eabc915d1734d91ea3426c6f4c3cc68a5c490 100644 GIT binary patch literal 1347905 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

n044{~Z5i zsqav-IctRo# zgHkF2X0D;2F*A@#0*D5*XKsRK=$j#J-;QIgm;Y&4CM!*0jTkYDC9iXdZf3q>Xuw=g~a9TBAylwC6{G85UZ&$?7HsW03ColU?@B) z9$}Tkj>xj*#mZ>RSV({-L*s%ExDfkM$YF?; z(HI$=L>w{_Yv>1j>oy^qo|t81a>YDA(5lGy0FTZ*Jc4bQ>aMbSNM-qS zqYn-R%iFm^J6iZ?7zJ!BzR6>I%l8T3_<)}zj1pR7p$845NSP_nK<9gfoyj)@-tnQ$ zppPKXyXPAL$zJ;`VRE>$5qcM~*FzT=b|dxyyp9&JwiAXdSYbCTjsWa{*kmRy&3#;) z+g-HXz-PxHW2y56A__iWY3?&2t(kmC5M(#-slpx(oz&0!LO)>XzXTbj*kxqxOOoD5 zxPsUR@ER5Q9^eVX?i~(c*bswVG9G6D@>gPKPuGna<24hCpkZM@3m*-ONe1u%v2*Zdia37#8ArxT8}6V#T2j%tYD(gWTVB+2A>4OfH40E`imWQ@_FhHeWw2Jki!rmhcHOR z66LluddBbK9RYcdZ$Bs`R1c7Uc?ac1J>()`5MSWWc}Gwz-!Zc_zqLO~@h48p;!>OQ zbmBgU+5W!MG6qggCGLYD#rr7|SRfKIc6L10h3NbOcum7zER-$78rktGyx55s&ofFj zoU&S`@a0zp^D>TK3MwL8d@z6@S@M%00}c2?W^9A91xSwe=Ur+;NFx$Q*d`z6453PS zQPDGj1~o&05sb>==2{*B4t!LcaZ@alGBfiq6^wO4&^pJnbj)0OMvyg*BM4$hv5??% zR-n1TGs>aDLb5_Eg9kHD4MTv1D6ks%!rB8?-zP9JKNrSA^{~f6^74FvW30Fbn5MvA zjtDFyTj0`@eHs$44F&#iN(5NAA912kRV`?w<;EZ1^Zk(23yA+23i~1>mG#R+Y5t13<+py`FK{z3H7zl{1raP-`=)MiyBFgksY^73k^3BF{QXuDV4$Zc;<`ajF z8Fy;!uQ@c)a8hN=xJ_$+o+5cA23x6Qtpyj|xqo2;l@#oq5`$f&vex6pb9nI#Uc3rN zcrA|o8WavWUOo`!c-$m`(CN38MS}-3wRA{Im=v3Y{5QE^$_YVvI;k?OusF_v1<{|{ zt0DKU6fYzX@*c#(ZjAEFChFjAN9QZ~R#!Ckzpp!!rVu zNYf+dWD#mi&l}htC>Q$)H4yy_9L5*dV=5u0!rfmB^_YctE+OMAgNpDgs>#gmLe$ciKL0}Wr#4jB7)z!Gp58VpboVd9?X zb1n-rM20zYOI2LfUQyzhPq?SkufHLZsiz$TUrjtV4KP|RUtJ$&`RR?V5tWUHNWY+y zDe31hgka3p-F8>)KAdbH$%7iLq@mUX*mPk<~J%@?uA>>h<>!zz8G#DG`hz*Eh%ZS zP%}_}oxK5&cGG4xF%Uk82EwywAgmx4iGeU4FJ6L+kNlVH=@0WB2jwGo&U9Q}K0BeG z38!BX=7mB|5DNzizcvKmZ&vbQD6#yr^#Vq{6SIlvw0nXlbaTkLggzu=_z*7?3O|4= zHIZd<6n+3R0%kX|7lVHnidl?r94G9&MV>_(OZfEt@TP#njUx1bj$573A3(R%+aI8K zt$77Vgt1!tn-0wbZ~_uxjMn~Zho(5)ta??^@|Z)T1}wZ$Yd4hGYAcNHDNf7LG_wk@ za2DJGEWBQ8UjVnPM)z3f_X^C<*F2Pzm4@QqVHE!sq4-xsWI`QYY{rXKO* zVnS|O-GU!rft9zzO-BeTp0Jaz1a_djDKvkq?GpHhjPsEWNhCYr+Q5Q`g2-XusH7`~ z4`BQ>ua+R@0UXTPf1q@$NXJNqP#R<7f4`g}|`4B z1{iK?abK}AeHt>^e}*}GMBTIo=9`4Tpm?4lhXY(cZiQFc1K}W9&>V(XLN)-^_RX8W z^|nWC-+p!fgt)kh-@dwWa=FXswB45&nMpu+J}JQ0yA|vnfzpvPiSp=p z0Cbd^11Hcp0D7oEcfH-|=G!Wb856bkMun7jM3WfhNx{g zIcUs?(%Nr!Y?`S){%KgsGp>73muB89_7GtWB%!riWHU=o+KR6+c0WD}GZ2=+J0$AB@>|`sPU!u2R-A2Z7bqZz8IkML{lg+1eLK6F}H(6Hx>>` zv~Ola zosO3j%WAPjO6O;X+nkoAr8YUhAoNy#)M<%^6M#YJGd~}^#U-}a8xr?{DR8>e0s%GS z-~>#8;748qcj^=Ofhlkj)U|;-aAHujc-+V-f0z|N594J{gOJ|v4hGTGkjNS(UTnvU zr^rQ&thojSi_vJyxgK#28Y}aLgZXbUL5lWML3p)YM(FETD@bBr4))ZP$d5u1^$Ln~ zb2zv%2usHeVuAhwD8nhY=}D1WadjIA<^(>NPL-wOA%v!f(-QEj>;2o0E#>%aVr~}0 z_lJyl#GXSJ>8gW101yMAFG^3%N=QKN+gY>B^yeyVVUDX^ug-O~zhh2V-?bGoOH8I( zWzXj}$Ta!Pb`sM~9#FTMdh45uOudcGCr!PlAT6cuf@P*UrcImt%w`$nmz2MzCRrx! zm}RmTvrJ-0mPtEinN(qxNqiqtfEpnSZM*| zlpPdL5>$Gh7n836a$o^C2dgold%*vna}c63Oy**;3^_=-CXt(lxnUEShoT5gTskhM zmq$RCodGmO3F_byq8SNyVh7U%WT^5yg5TS}!wK9K-Jm9D21qxXh)n}XhXsw2+JObaLIGY6i?4@`lB5 zNErT0I52t~mQ&zw1m}3`Z-$ew2rF}Gq1N>!Qke_-%I5?49X7hBLpq5=BZHGFh@#fo zp{@KP$hrgYgG7^s4owuC0Qim5+V68{s?y9S0Q?}&B>>f zwtDas@G%F3tgx0w5PHO_U?O6rd!~`{yL|D~fqE~aK9G&XHp_+(IvIPe;L3$ztd~@< z&}3vt0cF4(7(BtO1m6-a?Sody+&LyJLZ!lx5NuowLD69d-~0Q@l5qHg#4r&*a}{gT zu;dIn5*AbhYUG#lm&|?ti5a7R^V6sPdBwDzj*7zne(#Qdzwu~o#}8wTvDNxZZ$c3D z;kJwqmVVwWUv1WJH98;7_#hfiR+;trM(6yD4~`yde*GEqzD-8w^o$QSA8Q^5CwWHa zl#CD7z@4Yf`!*PzlQKS740qtfV04bn02Mid(sfK#f1Xfxsz~9)u#{(ekOy4w^mpRh zJ*>41q?KB#w6o&SJ3Ex&pa3LXuEOQwOq}%5Gjy*oYmq=VxWRpeS{^e<8Q&cAEI|9Q zEwr^+S^}CFEU|l7U?cERQI6{OGg~i035MNwRUdC&3E1~Lqw}$h4`M%WUJ2N@#pqOJ zd~oJi^U7zpA~1y_kasB(k-4zHsMoNq$L=pEV%nZ-S)=pE3UYrua6vd7?1C2 z(L5EEyy0xr_+M%szk2$*+s-^~Y+Amfb?m)gZg}R3Q(q~5_}XFlQ%k#Fzx3n1b9$3+ z`1g@raS46ri+aC`%I&S()_S1t^KCJg8WVcYo$PDdJSU+yuQj*52QF17pGoLFoqAw< zUuRVxob|P*R^@gb&Fw8ZS3M`UcTvuZohOrf8mc>zb2@WvMzdZmGs#t|%=PXU+h1&Z z(f#7N_J-!qY}?IRb&P43=>=1~s^=5iZdK1mwp3Nmr?ysAkJUEK)IGj6`<1AKLz`n7 z4$ICp<>}fNlyyxr^^9-Lc_lC5P<2d0v+SHZPj_iSS?@Gc-}u(tQCE(8`on3H=DmD% z-j=%YlczjlSfEQ=ni3;-Y>3j%$d&N*Ld`3FXJLG;a@E}=pHg9XR+lzb_Ikbbz22(durA%JoVPKG{kwpR zOLS?YWr_9HyOr}cM44T6ljJ)N8p6EzX}xv6a$a848CTsD`Hl+1I$hd0S(q0~UXI%4 zs+%BRe$cR3mv+5ucD?mZWw;mbR6>)bl?M&*q@b@~$|iB&;JA8&Y-I&>OM;rGP!>Pv z>)(4<-OYJ}{qx#`hGJLUETwLYjOXi@`8QRB`prQ@hYQ*xLwrkZ1^?Imz5hEu)Nk%k zc8-$8A2j5Ma>nvr- zhA5b%$#Ta*LzoxiD-1QRy1B~Ev9h4A=hw(`<}IuRgzZ~adop_oh`K*1C^ldGw!Scb zkNM(V`a(5)+^#Q_!G~O5So5Cw;w}2ZcaGT{hfGb=-EqSiuaUE$?MH-l1 zgvw(Zt^h0ZBUeHpvT10Z{^x(qOkGEvrEr`|TYjEOQY2dcb}B}Hgr?n|$J{|Rhs7d| zB?5{T-5lOeuk2IJVQmwQo=OaYbaO~Yz(m}qn?ouB_UJoQa~MGo=(Zc)Z0zZI0OEmu zwK`K@xEla(hQ2TrKBnsn=fKBQePJuW-xRn9p!cfk$YWU^-eyE*^Boz>k%$=Sw6 z%?EvnHiLN)X~S}x%BVD|Rw(!D)?a9EYCd7hGw(ESH>=g%Uy)aB<%N=@7{ zlYDKj`nmm;1~sI>n6e<}<=hurp(jg95wsIgLSgNuhUQqv|Hy|4wyf7xM~)t|O{p|B-Q|vp zea~D9dh)|(HBOKV$LR~#z%39NC%fa!@0v?NPo4(1ey(13ogO^n_k(9#j!m7F^HExS z5essY9tEUR3+ZH9h0W_E(t24vXbaDO+ppJ zR!|WY5=TeClD3Ymj``-$aa8`lGh6qiVo`}t+T3x;tJUY9aL1ior9S^CoWaM#aQ3YF z{CqfjR=sYLzHs|7+YT@p-tLZz0w~N=9hrYtvkRbbtiCV_Zh^^gf;%n`pwOT?a`Rbq zkMDTteI4mfKnhEc#`b%$kVGCLpBj-*j(W0^>E@g^Dry|s3wzhU%|G_#oX%~|pjNs) zBw1^y%#Fl7PdA5j048ax!&+PAX9C2{0%57U>Blcf1IhY#_mq|Q{CQ@6^515rs?R^= zj*9^xe9RqJ1PHhg&fr4@X8?rvx#JcA?rl;XdGxGiHdqbE>kIXOdmsYd;*P5V+}of! zayQ%pNF1dvRKP8(3Czt$pxAa40X+1V$ceuMd)n(rlNM54=NwuP&jT`!xe^0PugXg! zg5Q{N2!g${s6)uqVfife@?SnwKqtpZx)6%YbaO~2$4Q>c*|>?N@P&befPgWq1f<0X z+N6k0FuU)uW%BZ$Evq#(?L4cA2OQiEAAp0K;RA3`4kh9*9=u#0xPNAB^2$tJ$ zHbcFg_?!{nkHy>NlB`7_bqPy|RL~*8FEQ0q&7lOpRL~*8uOR%Y!G70qcrjQBA6!;z zbbniGf5)Log>Ix!b@q0x-Qdu)rkhnzb@mpm{RxNWfpoJGs?Of1wLk38bflS$P<8eO zt^HnyrWj73>g@Ge`!t6}3nx}1_=;N~!H)Qfi_k)tMWO~tdPyFd1dGs3k_EBY>F2mJ z>?FoV1sxLnO7M$jKuP-L(IE8eUH@pSEj$0if{wo3CTPM^Q)_E4HP2CIH#gs-PS$sQ zWGgluIN!eC9HZ>{0-CKP=({RyyG=Rg+xM9hls(PObJV%|t}0u(30jvd$mzNtn(tM& zT{_-*8r!WbBJEbXG1sJi8|0d(%ONu)>k@WmIgg!LuEK^Rqwz2S54X&$KEEk1Dz(C} zI#XQBly@=HBrc;Uf*Ay)?oR;k+wnS(~3O$*pIxYGV+o#Zf6nZk>C7igczZW>+B7r(u^8|rsFYGrjw-4kva<`btE3+1v?=Vx#5v3fbG701)Od{R~>{4 z(izZ6s0y78mrjKcoO%AJc|SY2WCfF~VDwSzRC5?XCj>f?$tDd9&me*a6U7lh5Kv*~ zsqSxN=c&s)^WwVuO7P2L!4VhbCi#F7VI&_gPi1?L4_GJpfVtVwNM?Kz{6bEapwux4 z;Ug0K4r}-&roZ~(Yx)~liVY~v{bdy-#>d0>F1y|#!LJ0rk#CkI$inpNq2*})N~{}m zxXo!wqJqLvoQ&N2;)z?2Oj4?)!EX!kE!l$23S^VjDUwtO&s=05ydqipb#V`8C)W7<_rb$n& z&;P{Q@zv@Fp9klgsO(ARXA+Yf!Aw$x0%EZms_=igDpPCU>Coh_HSdS`=;>PfW`{-w zClDV!MQdN<&@4(fpMd!230nI?hb9V6AU=AW)_$KuQ2ZiH;@}_(@U06pW6JA<@yK2??pEb%wi&!U&#uNjsFZ!^^B4it{hg#a0L= zXo%uO5wy@d{{;eKcJGtWhAFW?Yu^8f(LF1eKybX)u5xJ3q?uO$2#(d-XE`)xH~|nGrM2JY(4?frLKQXz)X{2z%L+VPK$wjQGn#C%lg>(@|>(i19)5F>@eYt60GLL@a^>evO2N@zct{-8B zhXm$B|=tWX%OEu+mwC9-< zR6UK&sp>vm*HPOZW%kG0wC`0$B^R7I`B5y%4e7$%kk2tUL`HH$x-d876y}B$?d z-ler~b!g_m3CMzSt$m$Cvpd~B!g%?_-s4~^)uNNs&mP<0UsenmtYBxR*ZF~KTwk-HP!?Ba3+rK#1nRO|>I zt_4R*(2x=|(A+>}X^)^9CW)e#TNLg10@T!6<*>uQvX`%&^EQ;#@9Cg!1xpuTP8Ve( zsp66<4qKeglR`(pU*|L_PtSX>hxN&+yKC^d{N$JwSlQ zlB9FtRvMTbDA6C4KS@f{qY@yccr6-V$ZoV3dvL&+-5>kQL^6a^`i^fE^PvT1>nSrd z+WhsNGDXW%PRpWFTP=hL{#Mbl&}oT+6G#z$UD0x%)ACMb z1;h*9;ZLjj%Ow1j@OR|aY48NY zbVC&FKfB>eHjC4Y0R&t6KDgg=P^ zj$8&vgungS->yEjG`4!5Z6#z0|4z~Jn9~wlYFh~=z%7avmD6&j#J2KOqT*FW%Uw>( z))L!nFabi9K)KVhuEe&hJ|XebTd)7^9iyH}{(pDXoPJ`>tiHbScYX2LmH+wR=AWkA z(m2hXsDLtplbx0&@TXuSgffEToR+yI*mBtT()&6RA#)l{fFx0b7zgt(EQXX2lw)j+ zG6Bql<1w3ShJUX)I=kN2-Yg>N=8|qs7u_S-Mg>8DRFP@wFQD2DokYMjasblgppF8> z2WA62LZV2~sl@Jqw-O;0RAUkD^0ADn3F8BmN`N~ZNs}Y45vh|1XGKHFG%C5Kq#BA5 zDjbq>;!)NFEt;C1!D4i-+s+ za6>`k#X}W_Vr<{gcfXXQG4L5687@+)iZl&Os*^+w!qh+t>30lYIZ$dOB8dSJ69c~S zKIP34h#0G+9w9BRNb0g}?5);j8>gich0P+&1M4w2~48sbcJ<5TOyw0EzG?lY~E> zKuwAEM=eGYno6`kf@%L7pBwRww|;o~C`rPfB>YLqfl!B} zBp4AT1~`HlAQApfOTwQd{6Q5_j@-=4YW42UU$XAe7hYWa>9GR)3ki9*FMJ~Fl?lr- zjyrqi{BdIa6L)^+ug%eQrxQMY<%6Z8WFNQPPwyo=0@aMfsl*(H*4ifOQkKP3P;;C< zM2c<>x8G51n=C5bm*rmbQ6AkKrmmy*6!6Vq_X)$BjXh^#pr6vOR%hx9ckeM@oS`pF zg^%g_!a49URbSZpp84Vwxc8oU{;R4ZkDb*dKBHcDqrT8^%;u;tHBE8H9evk4f1~Qi zEV%WwdfoNhelkdFAo)%2VZ)UzJy$FR$z_-*83h(;p_ya7`Xpw&9x8 zr>#l9bWN5|IcQj*OB*E{S8tuBocD56o~v$r*cZpjUaz;_tDLtns>)S&lYB~r;aOc; zm>2armt0wU_SFfUG)I}RF>bZKK`FVtISDN8m)6}#%fyr|cu$z;xY zt4djt7X{=Zmpdv9o{JZvHUyk={s=F2j+PxbXxQzlyNC1Z&fYzfQLa2_Sfq1}lF93>cPMo)NBLd+pM-li`k!TYua z#vFdq=8j8Vtv>&RJMQEv_4!BP3_c!)vuD-k=fl~v>UER!h1-wWb{sM_-R_Qyde2;% zr#dqKtY#O8kz@6RNpS0+scC{cF7I7)sX=w*=CjzHWCvC41v*Yd(yk?LP9+gVkede^ z`XrT>BMpR#fIYPrsLTR%;%F?s5uZwX*+u$t{kwb0a(myInV}@u9zYM&>Ra4#RRDS$R7dWHTY!h7 z^o0tzWi^34<_OfLhUiA9G=rrV z9ZiQJ68%#FxWoj}u}CLK&=K&kwrh0|A@D27s>oUVWf0h>1i_?1o+N_McqSyPVgw=h zr0S>3YRfM@0iD`^Qc!HZ_-%b*K6q2^(if`X<92`;;&3Ig0EWAt#fgm{F&ZpjiTSpuOtI8QE$Bm_#%m_5qpMaiqI z@->VsH*B3TL{5W2OKgg{9M3{wc~t2_OV_fF4zXU6+?{`bvi$6x)6jlcMA zMQ`-MZ!J^Z{nvK+Q&A^(Z)<)rm|aO-3+Quk_~wxGvpYUaySYp4dZczeQpPY<8XqzD z(9IzqbcieWKtg7QYrV9NFRafNbbR?v%AT^m+zY>N)O5A|{m;9V*)7fc&8f=lubLI= zllm^JE#H*W*1p%AtlY2b`plMU%IRp&GbgCBUG3Y<<*J@j&B^NOw)Sb|y6B`V*XqpP z=d;?dTgf|fs^>-*WkaKqPFHo?KPt`GxFo)Jk8<5Pfu1E=sb@*!rlf*1v!tFS(lop^ zMphtE12i;>^fWAzB?1!u1;VF|Gg}k&Zz@`za9SQHwV9x;=NpQahn<#=5}WB%qW(2S z%M7Pwdx=lrH>q-=RJoAeU`REGbOcNilBLqUe4;49zjI5L$;%&HR%>)a@6LA|n$)#s6}0b! zqWuPkrZwHHg1Y?!Z{0~!M~Zd;qGi1Z0C$cQ?a#w}k|Gmc%)*OO?@msqjYRt+SPkQ; z7so0fwl8v4Fmb9Z6?l8{4;pEz`p|(laoX_Bp}xItRp#!Z{+=aEOKo!K?Y>pf0-cMa z;RJ-hd_@biEIC?YdmZGyO^TN3PRr&J+c-GMQ?yKRTGqfFkoz_$S|&Lyi{TEO7!)mI zomh+}D&I!*2YbnYcPi{UWpe;=G-ZA5gV6Wg9tEsOXH?7*JHPs>sCot zFggnk@zqdKuLQpm{ECEM>tda20_bSXts8u6Jl^(#`unGGKpc#lTFoc6iUSXlfJR5ZRO>dpMSpQ~C;_kpz~Shwmx{S! z2I=;31Zgl|zGG(VUMUQQ#}GodZW8`tecvaDIm(#Mf#5TJjQ33v6xzn<) z#I~zGQ33wn$xh1>xC1BP{~hPF%q^J+&3271z26D;#fFBhXyeN#hCi&E)#<{EHgXXS zfAI-$aXbosGf?oGj&{IXwlqq#FUcO^$R0pc!F-I)cti)@5(6C843G$aM8T&ifbD`H*mYnBqXUyUtzbSK_@QiTQh^!6uEAq7 zkb`z@b(>{FR5iMg27E|-0W=2J&p{Iy(4qG5EZnLyL3J4TK~cIo(;hY%FoYu!golJi zK0(Y@mHeY^SM4QrK}Xk@->tT__x|nAGE@Be56-n8w*AelP%3op^u%=_U-2UWWnFr4S%pg8|ZK=E&vC^T6Rw;-ev4{NuKNpkuEIHKBDV*_FER zr;uHlg2MP*jJaa{EPYjGZ5Tffd}{3LGi#EBo*wvfu0b?>+*TIun0-%GgL|$xHaFC|mN2l{Jc0(|&&C_us#9cg^*NEnj}`e}8qf>+U_1`{umHM68-m2Ez_8z$ORdQ2IZr1||Z{=R9$nCi} zC-+jvsf51c<(Gbascmyn&r2~UdRlkq^fq?SNw`$rT-RJ{Gnf~t)h3hbHkDCnRPEQT zztG;)e8QGz-fZ4!-fmW_%iG)UQJ1^hZ&jCHXjiDqJ6?>g$&PN#j+W&_&&i2a=R~LG zMCa#3@6L&?$%$^wiI(L?&&iEe=SHXIM(5{7@6L^`$&GH!jlRmU;Y#h>AFh~}7CphS z;act6))l(6|Jf^}>ligk=BzMucb)8W)x|4IpqCGv4eTp4teU3O{ZHM_|Njm7H7W}p6$d9>iu&?Gtwbolb4bZs19!-WG zQXzhm7Zp=)g(g%t%ClY;_}a5#U8vuP>J#>tFQy8$6QgVrM*f_#Nf`Nap%!W9*T{0_ zEv%iBHx zgBD@z4~YerV-k!~1&W`JWWsP~0@78T8-(hI5v*K^G6-L}E}u(7DqkyAE~8IGq?*H# zT*E!P#rjFxf$l#`eWbX&s9+eR?Eyxdp>!ZhMZBJ9%;8$PQ(QErRJx7cB}X@hbOcPI zfre{;^p3w{GtuS;r0(?SL%=k|prjZ{29qFIlEFr9_1N9mN2=rG?;6kTe6z7dbKnzG z(>rH12M(K>w!+89rX~Y?RGFIA!N*6YrWx+I2cUrz^b=ipRx=J1Vwt{h-7(v8=qGxU zJFXZSNI^f*JK+{6#8LXfxyLXlaz3QQkf6xJm;ysmqEk>8mSH5MiRi*u5J$(I5p!H* zHWD~~N_f;tIu<4YfCK;|7XWy+Okis4NR|Q)xPQJnGq?LOsE6~jWwoZJoo6-ifP&lM z15j`?d;kjS;R8@`%~{Rs0D2Skgd zCs|2MaO7G-JVKyM5&|V55HoAIt*Ike36g|B$r9+U`)X$EzL@OA1sz9|vyF|K5Bd@Z z5Op25%p`Afj!#lT7EAB*%8QuG@~>D(M5zHcN2#v!Ff>T9sUbT>o{J4qE^UQ8h%4`c z`=fsZ7pMOo^IX2O%%oN-=e-=Yweezcy%p124Dfdw;2g3c@W*oeu@Zl*gCCc=eva8M z!9Se%0A`Eu+!XVaP1`ZuMd)7)$x{wJhAA5%UpK^9sGrhs7iO-An|l7SP(LMoD<<%W zCWBAwt@Cm2a#sc}M{@O%+# zFAw!NNX&E?<8U06|L@G!s$nTAx)OHmSp4JPFJ6Cb@v42tch@hBdu{w9qdsq`>WyyL zD!(te=?Aun%f^0L^Xh*+zOldL_VGSXHkj>m5iHQUK<65dMSsr(xGw0Lri4{3*ieP} zDO0O$H38u|baku38^5~Vx&+i&Gf=L7)DTte$neIG`7yX!33CFBcXXwz!Wus$qpZq& z@K$;Mr*|TTas-&2f{lV!!dft%5V|TRVU1rmMn>{zd&&ZK4qXkQu*UC_<6eAD*Z=9A zh@l+8jouM>KSPY5`z&OH^fnjoQ6^&hseRCX>c`MMs?@gYbmBf}KlO;y(hWt%P9^Sx z_ES$lW0rybL2CPzZD2{k#k#Sm&Js@8@M0!D7z{ z$bYW86S)&I)1jn;HQqV!eqM$-z@h-S7rdXBVFY^rRZv}yRaoRdf;&Quz_~Xnwz}Jv zx;k?Q_M*zTM{EC+L!(`5UUAr%afjBv!J+AZ;@efmj9Z~gRf(+@AP~B-L_>cnsK*G^ zxNGVY%atwnF8>uj79Kb>Ir&mPwqxnaJohgQwIRWWF{BaIdaTTS4liQpO~*a&f2S`0 zaUxa>s3fCDGJFo^0NAl^6hu?Mct6a+P;#T2Jlx1Lg0Yul1e5$nF#2+gV2b|;#$ApP zkhUORIv~zvA|-ar#DYHp24-LCBP(=eBFfp}$wjyL&%q6sV-B#u2S{cfN<>v<$oGO* zHuOqlFo|VYH)beTAy6iS5kQ(Y{|G#?;iaTyax?ZOIPr-w<8H0p=+G=(Yd-O@F=Lw6 zp6$>aO*fzT2)Y(P(^9}e=ufrKp^<@(`hMuN+zKb4F+;Du2c4GVpaNGK-B7I? zdbR8a(ePo1rWJ5+oYoG_`s4tKP_7%Awd{vl-P7P!U84Rv?d{dJ_lL4upVDhE3bvSK zUEj|gLz6vgNy0PN_~b$6|9BqI>94=f@CKDQ3}pR zc=D;gbm$Gg^gO`j(;CC!281@k6AgU&G4p@?9^jhG=9*%HM8n$*{>pLyAbZRxOZ{|d zxa~-R6q1fP5TxtA$nOFU*2CULE-cn4$~`v_qnqI_cM0=nS$dh2YKXZNwNtIR4NY=s@uk z&2Ue3z4o0jw;<~QoID_qC|C{@t_SqI=5OB=1Bv0yL7)SLYXrKmAu&7^Xt5 ze^`0E9-7?e_Wf;U{t|5S_X1cAq0L{S({fL#?FFzJLYu#Mr{${>+Y6@>_0Z&bdx^~i zYVz$)OBC1-K~0|T(Ch{^8M-_t!7WgeCpay6U_Ue{T5fhg4};^TA#C&);8pf+aQ@j7 zsW|(YI`}YFu)|45N^_VZj*%HI! z2qH9P_Ao-*62syMVl-txEU!J8UbMF?p|7G96z1G7*A{8lHdgIh+n` zz(o#fXom&m==-Pf!UNB6%oa0mT;D>>CD-sF{(5z0{H@S5OZ>0bUW?_Pm zcUs8Y_#Kw^?U^L_{~?VF6oc>wLFicIAfn}$Mg@~mzbqQu%NZhTIex!9n_hBp{%S7n&kB5FhVCIzf z53P)JD^?)Xak%n{(j)c(EV>spg4zchki_EJH8S*TMs>^b8C}JyhOERF2F}DjfQ9Rw zK2@681znpX?|Wf};bOy9zb0`3+EImv-{I+1fzV`~11MLkT8wR4StQy&AU_~>`KFD9 z& z=`V|$glJ=cn}LkwQrKaVA^iCasdG&^$I65Z)a>2}f~2hVleT%k-czP%`H9oAxYXtZ zJL7K^E#G%q#=r^W^S!QUx!-A71O`Tk*?!canFF%qc&%Lz21bx2Z*f|xz`zJG+jqk) zkR?ZH?FzVMH9|-7mYaXMnbePspAV8jCv;40XxO{8anoi}LOUKiNp(W8iH3&raB<9) zNIO@-=_6NxnECdA1sF0>btq73YkrF@n*(vTx?BSSU!G*A*K-p@#)7zJPXZa8W z<^=l34MpGtDAN~U@9X}dF71n~xsgaD{r}7-EX?jepkv~ld;$j}{PY8$V04q{we&4H z5vrM05d8pCp#NlmQi&hU)HcSWLPS$wY;JTho|=r60%Fa*!cmsMx;MC!KQ>RgqXo3(WKD%Fd`i4;M5 z&qqgP)hbk(xhRlRjf4iJ{&LfxP+$>JhA%`%-Ve^SJ}gGO#>EL~g$UkL;DB_ZOGx}K^hlOIJRFQ&2tm7JWCRb{n&_9?{uDrU zoG(CM&d`JB{0R&Z6b!v^>zPJgHJE#sGC!vgO#?>I$q}rZT>&*7syazrH`8!S{gXC7pGX>>`Qr*-6xbNd&&3!heKH6S6p;oob!M-coEumXCI|a3s050xLjffzg@=0}Tn7xcqakMS>&In(5LJ$(#BuWG8DF zOUq|+M9~Cd!=RC(XKp!i9w$b|YUs}&{T8w=yx4v6^L;6Y+bld*)qcgIU(DtCng0lU z235j+Jfh+Hku4e$j!Y0sCZq%ePbU6cw7pA6IAum48ozuSVK8J;74(7^0gm-ui&jW@6 zHWm|ktDa`MD&-%8EWF($sBGH-pM2n=$S?e&-#~@5={@BBM`l@BSeARlNCsLWJ)-9 zPzZ`+&844O!umrlM@b-rkiF%309TG8v(6ktXZ9B72)I1Pd}!;lGNUBiXxGcxjo-ZOk>heh+})Uw^*}-@>s7#P0zC`}aTx zWHjeye^d11K<$(<33AQ3Z)OP}*_m*SFFwO}hehkGIrsgHlMxLMAPOJ`o_$CsQ4)OO zBR|i7_bK}X+`lPQ^n@|=IR|I4N} z<+$4q+vb?$DplrscY8zgUURZ4`&|2W^HO!H>A?D~eP+m5F`IKUyNb<_uCm*_ITK+ZxiAjc(NWa zL1eD)Fi|*Fgg1wTJKaSf9icxXhT|t*vIdeyCCXTCS~`>Lzr zX7&D~J7HAp=NFDFKjQvg&d;7)z3@lhOZfqJ991jM_<`VnL4LE23sd>qpZ7)E`T}5m zfFWoXa_mINbS_vXPsS!I3TU$OxYIJX)b{%6Lk2 z4uSy<-Z2K1F&x`xCgDdxPdFF;m_;{%yOHk!9u(}AP|(ZlUBuZ}9Kil1 z6r_)a4?Exp(`l61zCzo=AZ8^sTmn~ZfGFtMPw2;Gi57e?B%vUiU-aW{a)p6J)Aa7| z=PBVc^g2?3+qbe}fYctLlv{Je7Ja~K z9V|&MEJG&CyGx?mh*&D&V7NF)^x58G#>ONX#r!nke&Qlncp^2NR1^*@6jqDtB^V5X zLE?aqN83wB613=(VDK`*ps!*F>6gaA;aNsJ06n=+iX0pu#zGg`^8T6|tkCBRhDXF% zjYUYbk+SRw`Ue7Sp#3^68;NKj%*$E^!#XO`7vclYK-UT12=o^q*s#3&@q((QSRy;I zF;M{}vVY{X+)-*v1TP7c$W}Tnr%G&z6eY4tu=rtmBTQ_=ztLIpcXXC)MrX-VH9AYM z?BVhRaEy#cGMIsrHlV)CEJp6N(+-AZIOngPSi>HDfZ33xc=`4m!~X`s$-%dDtlcOy zuo1HXMOXp7i@d0CIfdC>tvZ5noHhwY4#$kbB2_Znx3 zLu-G_p;@%nY=j!vQ?>R?ho&msY^3NqpI(nb;3p^q{t1P^H7Eo|qY$`@M9jov#7quI zi_N8Tb-cW#8h(R$k9XmF_lkc3RX-9Q5Fw`#xQ}9SDEG55y8=BYy|ZO zLdi+Y=Oi9ng_;vV!vR9i1FXg9v1W6urLvWK%VKgayfL%2FM0njG7ICgcQ-?Kl(zO1 zb%Gu`rPP?@rdlN=n=HkKC|Y&0YQKK{`mUzt7*lU^Gc-tPX-+WZoNLDxDKEZ}d+FZy zOCaZ@_x@d&b5cTDq}VahWHTn7K%q*wcnQMz8@k})m@Bcx#uy@Sd6G;fWsle z(u@4$i8|6>-WQ3+E5-U^c8QsZfBc<4PMCoug1ZFEDbV<;2ScnL`P;yd64Fn_HcVtO z;h`j6Cc9(!q97@J%B}J8nIQ(%x%L=HaNV;Dj{bge z@$Rxd!@CRrZ`~jN=imFEJlyfss-Gx(uE(fCju2~3>L+4mjxUu(kdJ&F z03d|i?&k{{a)F<)Y`Qt*TtW^G<|&=ck$%a~0m`zQ(T&piWI+{iqwN30=ms~+c4!Q` z*1Z2?qZ`~PdMMiu?Vmm}WOUnd7NYSKS3iFa{==clSahAlkT#+j;4nE?j~C74BF58XNnR9=6%8Y-o`WrV zcg4^UA2$OTYK@(g)anT~69n2p%|7xagWze$7;!;fLZ-Dtr{xPv-}VaXw+ zOA3n>3hjZ~bf~(}B*}omgg*$To}p0!zwsIn3p`jbC=6hp&_h8O6xu$5!Xp#s5!MzC zQZlLVGXgdn0jLkOwlXkCH;2MY$R*XXV31!1+|s!J6llR_^B!dm=>+-|^!qHe)q)BP zoj?~lEm3d+Dll{cz0YZRr^NO`L!ttjf!^-47)or;`b0&Zq6Hd(LcgaM-~@VsPH zT|F*|fRYHv9UU@qH~<&6aa-{qOxxe9Oe27J@sLK2r9}@3ff)qWk$}O#cmaJ?_FIkF zm%e-pvPsIjzFTc;KPoFcaK8Nk^+|n~)pk4{mbSf zo+c-op|43#Q?pjxcfm4K9n&_a=$Xy312b#NUsJdlK2Dy&PgWoKE7gGA}ozwty#z{FYxcZ zG20_YDi>*(VE-%vei=_*5ylagX&r~#4&;2h`V=X*wGu3XP;TonrzN)3wh}CYP;N`* zw45oit%Rl|uPR#Za$2^Q*k*%&7(%4wPRqIy+b(bkLx}Wbr)3G;ffERk9tT}bN+v?* zALC2!cS1q0hK8+Z`pYNwKn2%y4Jqgp^?D}z~2+#|_ym$sLUWKNDYjJ$nAQpz(`7z+d`pr2K00;vBx0%(aFVfk%NGunf5;ZhZxToKf z*nE6XHz&Rd4!*f#)WNUA6htTt%iF7jj*jRyv7i{PcY`@Ecm3Ux!I0CgF+lm>U!$g5 zJi4tzbTm5lIRafKe3&0zB(lyHcTi&2n;e7il97pXUAU9P`kVS zBo&n5p8jvp_V)+v{wRFfERe6E8I&Wdju*bVJRO<@Q;{VegvBZ7_;>`h0F!DSB+^M< z5FRI41ZSS-KeFuVe3pxT1)o7G)*t%xFh157STiM1U}5}ubmFU^?tu}lfyO3AWn|nC zbmFU^^@o2BS@pK~xZszv(fEweg}H|9_W#Bcp+^DEkrZI=LZ!T{UzG8f>}NUzq1!o< z@IfJbFwPOaCEV5fhw(y{JQ=1!#l|Eenf8|DCzt)UvB$mh%uKZ{ zIsTVj|FI>jvd=W@JxxgZT_F$;ed3c7~p}kkp<~yA?gtO!ZH)- zqrrN!uui3EAk#%P4U4e3OZkd|GqWJGDP?xxfj}U%CP}RbNoqNG!1C0n?VEj%29fPu6(V;APX z5VZkUk$pK>&!#i0To#jnpRIydmJ&t6!&@m*>C^U<%}JKZ%5WQ}_%xv~`g};VKVp&+ z*pVvwsxI!Sm~-hG>=t4 zoC$`PZc(Xqm9|veP{KN&HorbTm8x06iqL=-Eu*Zm+ToIjO4wed-AYSJ6?T~~irPX!S$WRp{Wq&-}$nc->0DVM}fmJkEa z#40SBl0CxW&@?4tm}Bc+CT+k`X~-pdgs7E{6$?%FoV;UQo&w{5wt#sEyH$_KI*};Y z6u%$mPW0{(!im!3v9pZr5wba{H3?lvF5DQ$FFRVlJ>`Vv%!M$^e16%!`t4jeCKUZ2fi)92AC0Ch^Ob)o(BQOjA}6CK<;sTTs6}84lE8lKW7} z>C=Rf(nP~%1kOG0h7CpxI`T=%g_bj|UEK)S`Jsni61KVLkzUEz0`JBF8GI0}o;IP3 zsS`bZ1hUl=uY_!m5XDVgTRwBtD64f8+8jPyeC&Ju%bbV>H#l?VK7aSq&(D`t)Eg3x zCv407aLnkt$IP3vKJ(?#b2DCE_Tk-0UHgA5koFuc^7><;yv|g)QXrkgRebL^vA}-R=Yj_x51J|$2!JkbeSsW4 ze$@2U^D#Qmm9y;86u znFG%@n|HWS9xILZ^5ka3|CqanlU1cA`M9n?zFHbRmb;`%y+Dw&ivyiAmFMM22;v4E z9(c*arLG@ua>g-VU^tr$iEfbdX5#U389uI0Ix(H`g7eq?s??!U(-dC(E)L7bo1uT~ z_d8YUNU7-oUi=cxT_FHiD#xv6E%#vdfyog^Jo)=Afd_l&5wJOBTVU z--=?#$kO?6Nv(jq=n|k;fvEFoGexL=4i8c62~ZIosTAb{;>y}MDX5LzZ?9O+g ze89Wl>W2`?UQ1j-CEH0+^LT~D=B%sadiE1Un(84EE!`$(5cOeHEJ;z70qDamjNXj-fm#7cP1~Ark$oi0M0ONQZqCOl%5U~7>^H_2F)hMLtf8AsbiU9cgg*m7K zaPN6Ig5A?_1n{>Kjy8y5r_0h00kWM{)Xp;paR3jKg(WNN#m4~jCdksm;ZlL3cB(lj z8SqdpEP0@QZ-D6P;opBQjYepP$pvs;^hs1aEE&ThsvyQgB%=c6GGb)!4qG|s_$R`U z5j_4;#TG}as680o9&Aq+K_UPj-iu&_?6VWO`R!B)1hJDP!jz8x5j_4q^4L)!a0D-c zHX-oJawv@R-<#rO=~*X~w-(CMqhL2*mL3SZIkNPI8 zOP62P=s*XaZ4SEhnR4YGVaZ~+1mfUWS^6rtq*l~UFe8SkZ=MPlAciR^E{^kW0Gn!D z9;^^af=VO_rXWdBfh55(NJpKHe4A6z@;vc;(+KW;DuO`9EL-S|T^gf$IFSxX^>DX( zc$TpB$>R1aDR~Qu+l#aEzG(^)cKk$hMCmUoRje0e2r`6cc77q<+1z5(7iyHsqsl|d z)5<_aVvYWiBJr9&Taj3&ws9xM3tBep6 zV|-z~OS@Knpr-TYu$B{-TR(?4;Zd4Co6JF`>kOi?mP(3L zQuL^fHI)>JT#o%nioaf4o|2DBNIX`2RTFE&+zRQ}~;5Xr!gX+LJ0*dnEa0wLUakBK)a0&b-lgvSppZP;rZR~y8 zYBj19i-}i4k#daLn0cs>tU!pgXk1FW19^%^Ay4rrIQK3p>h=0lY1Cgv*! zz~3}kdg^7(I)J}9<{%5$3Bhf=3@!oujhCgr1eXB*CYysKa7iwNc!NU_Ar5>6U=KtE zwFOTi$lHNj$e4OckFXK*(bpktbSi3{(1eBpu9|GdnzE`Ihu|L3{4|9bvJky&S*lR75r(cizkC3BRl z@yz+RZY=ppDk0j?KtqbyV4ftCIcT8OKm=M@vjtl`ifVGg$^ig;981b3cqCe0-4tgv zhf>9vwGuSh^r1o{DnCKihZKSa0)j{w@W`~DVJ(LkCEQ=7SsIc)sA)WUpvEB11H0jo zdT}1u4O3wUc0)Prz-|}|yRQ_r3(Y~xA>a^_?w+j|PXa?CSC$?N)vt1r7yjVXzN$ry`>S;)?Ywo!XqfYFcO&wxj4QMyHFq)Cr6qH_Qbi!aq@HI zIC%~Qp#_1>fhtWuV5O%CbD`RVz)UIxGL!I;3-EOOllLK65Gc*Ia2rGCS%tF^9L1Grsmu;&$V$3Z z?6)z_YCT$ULLdqSu9aY%YLWn{CSUCQBCf4zyQRgTuhJK3G@4>fpvYRI&lh%ONZ@cv_9#& zI7hI;p+Z(qd98jP3&OFK8Xh zO)QYR`}oPf=eYeAlop%7RaB{$3Z#2DFw`F42@2(2o?Kt0eoP?U&4Cy7BVKNSe2vsJ zj_c*g)*taY#&HvObMg!15mjoq72E~hqwRF35h4=1^eHCX56>FY|{L5k<4n|ywjECD%Fk(H*Vy;3~Mh&tu7U4i`WM#Yuq45Af^{#uDc5deV{^;16uq(k z5Q7g@Xb=?{Ss&6xkS>BGZW*`n9X27bh6;h~744{1d+@Bd(*_q}f z4~*dW4x12|MI9@5yko^yryrPOOOeplE58naV`uy)Q9|MU;n$Nb^)LFvDO7Nz{=duzz9u{&RS^KV=4`%eFK+*=b}A&Q*fOX5KR zhp584PY61n5J(?%O|SCg_v{68v7kmqTuiyQ$pdl8`jCzM((}|3GV0brWFMC81m0&Z z<$ZRQj!_1RtV|C)J80ACfGImUpXrI@KXTrhRj2&Ew zcBM{yDO&kZVaAT}673?L_#hkm*2I0FUO@5)5PPw|-Z30JSd zzT!;gV%KEL7IsvSaZ3(f&$9$PJK1PX)1{v{2ZyW=hj0O+@C(S`TG(mA;Uah zqTQzxbK#&U!#rD}-K-Ob#wg1`Wm%tNgz(}b3$%=BFT;F9aQ>776vlm!Bf)#BXrn&OcZ`emasuIJ{a}trNy%5ZysA) zZq48MUvcTdNfDZvioBMV1Ilbgp1I{6Wt1?XPA?OMNZY>Eh!lzDmVL?yVP~ygB1)3B zX*3avE^|wYGD*0&Sd-k*a`JMuJg~Sq>RM_bFq8Nt03S(feKF9SBu4;ANpL5kIcYpt z^XGk~`M_5)<}=tVM4RW(=5^Tk^LX(ycmZ&WLir}db>hpWIt`Ixq#=S7Up9Ng5yQx@ z5vz*N8~?4CZ3XkO__E2_gqSRRd3bxD(Qd$fLA!x=L;sTkJ3*EYUqR4Nff#l+#8=f_)IB)FO+Bx>BJ%kkbwZ{ITEc*CoYXqp7|YF4l>aZ~)OVVm1>s zD8Wb(jS>V0G?J&BL;~?7O~hyjO_IhTcqz-2zN6VD=DHivc3Q^z1x&|Owr3coq7qk>F!b_)V2 zC^Dv5Nh4#JM2Dur2@(wYGs>Bw3TfMS8i^v$(jr&-2|KUrBSrbrwu_o5MWUr8Ss5ZsFtr?10!_&^ zeT1mEsby}ybY^(GX;WO+miQ*fZm2$j@R{_&~EUc8$uy~+0ytD5Vk+Lwmif9 zs6=~2Cys&&F_11iPokCU#0@b@A*2h>l4yUS6EBZZW`F}^ibVUgPHc%*W`F}^qD1?+ zPMi$~-~bsb(azP0C2*k5INzi)Oi-NzFUz! z?olW@dNdr)9SvIXKi&*z*w!8eIb$HCK@mG&mm(q$(jb~3s3PpD@-TS&X`m3%0H$`x z{uSYi!x#Uk8b;Nyk*bDKH;_kZuY*{tM~2D-W(p3_GJ%YgB2@ICq6dvp9<&%`&*G>C zF$M@Lzipq;GJ(u=B7@lT!%g#(A2d}i01Jbr!XYZ1YX5i87`WqHfj9uVy@lc*3mV-) zV;}Gj)`0wp-1Uye)k>DO7wAZ8HvnC~L&U zQ1^iIJEaox2$m9TEFyW7MTD7mbtEs1EK35-kZ{ahr0_d}>nCCsk$=+)GE_aj<4i-2 zD8~?$GXSc!KMH{AN5^1H&BQ+(fDB8wfgyLic>-6EDWVl*SiDp;KbV%UC1Jpzae2cU zeqC8aWJmR}q6lf*KQ(K7U=g{l83-1US(HUYL0LpjnO=qPcuJ;1y8-pUppOR3A|e^S zRO(mr5i`>Hrk1NLiYi`c7)rbhlpZmHEx%M5eReY|kSzSoWiWc#&8Jm)9cC-3Z^8D>0abTLun^K-4}RjVYpd7t zl!#5U?CXpjizM0%op{YQW!d?R9djkx1fBR&jI!)2;Mp{)ppvw3FW>O2PRy+ilW`?l zU{qQU(%=0?6_k<|?&cd7z$E}hjznvtR1#7?O`?JnDBGK<2$NS5QRU+T z=>(LiBJ26Tp_a)i7YU@}Zf^@#3Z#>6Zwqjt*DKuxU#}3mV7-@&0TiLsEVQ6|PwE8r zp#_TtQk*k&`$nR$yAQhex1kRn?ruT%eo$LrQ;%zgje7j$s{1kSeYxs6wEuAQ+M$-s z)f;Tc+q1t7EqJNB1>O7G(1O_R7Ig1#Lkm{hT7U?*Y>0R|@)22l6P0z*C*WPSSpA>xqtL1^C=AVeI*7FezT`FiK~5LXzM5zr8J`T*bX zqEW>^r8x#};`jK5XN;xh-Tufi{%I}QD!tLE`i@9hWumr4C z45imZ$_4eHrv=^hW|vqHBsqC=*?OGeYu*JP1fw^eF%g>4yTaubcOuQL_n1i+WcXkE z*Vr^Y<4KM`m<>q$%^n|wmJ!@F@X!}Wh&F{TXVIA8+9&@}Ml zw@z_w+o1FT!~fVi(X{&o7SGxX>Z4gyr>Bv!N z^Kgk^Tay_|98@EBid{tS6%KoYs?>OO@U|J=DVkYm3H%0)hF;O9&kf`au9uwxfEgqd z?<6D4#qBH^fh~SKw`-_|A}b(b`LM&MW_Y(KumU26gw_Xq!DaV=*g2d45!(&Hk&^RS zH}Ko!Lp8(b?0@*-`Q2v_Ggn%67`G{|!yMn>V#qzNa(fSc^s`2JHwzT5|6{+w#iUsb zl2h-5W$hC0v@|C15Q_!2S>Tg=#5M+*0lC|Y(zj!sZ_vshKDiZ9ywWrr42KRwu^XLX z6)^RB7Y1cXV8Hx7Yl_;>b)>Ss{@!KVK9W2!!j>bG5hEb?Dywp@o8gt75YI5$oo^80 z+Di8mlWj5#w=@&!n7ff+G#h4}g&S7#kn-5Vw_nrz=Yx}<`TgYJX1||(t~p-+sNsD{ zY-Y*_DTQ}|eG!I4`8K=MunOczrMHC(v%QI<2d6Vg>02D+)x`i6pLWfej8>{{Q;##T zkNfwN=1u8i0UF3(IGR&>BN=aG-G^q$R-5V5K6CpKulw|2|G$xA%VIYApWgZ{j(vEn z>-ZekZgPuNjyGTw8SRT%%b9L|)GgZcN$97H^Oo1GL6uU!9PW;e3QF<82L2}=a6)4Uv!jD6UPeD?mw%YzB8ijL!*sSo8?!FOya z^E2IjBDZ%S_vypFYobHnWx5XaC??}tE7rFhZ7*yR1X~v*SYADm>t{Vs6SHh>d6?zp z9bcrJ&?Ka07*p%FM{HEK&*7I@F6)Df!Ys>nd=YwFb7pUb@%j4gfv+iLllf(`%X&p& zm}S_&vV zEQ#?b45t~qF5^ch?ir1SAP2pldu_wWx%<@K;vr-Au~~|3u4YHH#ogEWw70Y0J{}O3 zA|=@2MfaH`4$~J0-)wh$vBg+_f=;;@F%bjtaQj_;XqK{NS# zz9@P360pOWVJ0|;2|Z7T1<3waXeKOmf?)fq9`E6LWJB&Bd9*IDb%CW!p0u_+V$`Tn zRx92d&bY9DzIN?>5$A4jzP#IV*H1tH=>HZeXPx+8LBqSd-@Nz!D?iN*PP+fsEq=#u zWZYcz;?~S*MNPj;{*NTHGNjAG?P_TbtVpnE0z+Dxle#oX9k=Qt5<5~Vtp9F@Q_oVC#=@&b9np>*%7d3~Jhm;bLpCVY;`AZJa1S@uP zpl#E6-kzMq{iaI2Qm`VKQ)jB2%{yEukCjGyd2)duXBX$7sd6fBU4eYHGbN=;LEU@IW{_y7-< zjm#=_q}1f{F+yf4T-21wNdVRJ2 zhW-j<X}Zw# z_j4bK(ju1}OE@8jjcH7+`SZS`nE|Ei)^%-+tF3PHFJ3zHuGs}|UTEsL68$QC<+o}$ zUm%C$`a;4!?y>Lut{3m$D2kmYOTYVy=5Udsb_HBIu8f;5 zOJ5GVsj~E$u$wGPw|u6InEiwff^gFDKSsZ94m2jUlA? z6-Ld3P0w~w#}9d9uynSC=9cuR=$n>CopgWA`+?c_{@#x# zkEeK+@Yie0MR`!z?4`$wuWAl|t*HIEIVcjK@_k{+-g@yQfJ&Y${n};C;ja|6zo-|N zpHP7r_zi=E9L$QTsss-T={6!QES8st_`Mjgavp zgp8XJGS0-vh|(F?p=kA-M1at_$o2knG!!9o$A3xCoZ_qAxP$N*c9}F}9Y{2KZ7#9e z9%S>xjP8v3HgJ{Sni3AeT*q6VozdavD!rrW;;-={UV-`6w{&2YQM^@S3KHFO{bM&F_0`GWO>0LO~Nm(q%qze>wi zt~?+t`LJI64M5_2S^Bgqn%UYE?z=eJxeey3K1?MCsRx( zz``@5;1kO7&UqIB9R#nBkW9E5u%*Cx zWIA|8f2bIoU{HVEl-K@oK#J(ofGAPyqq6i>pf+Dn)IMhp@&_^TU13QaXw(}-v9o09 zp`bZWlcoE^Zi+0O13RuPy$*EciL&$}*o~K^D`7WQmYxhdjx0U$GnCHQ47DG3BlLR= z>&poJj%6UJP=L@6Rl10|g~Z1;fXUsX5DubL#<^%1{o~C5vh@qER&@Lk&0#VC#gPSM zbC^uNN17X%4TLU2L_+L<=}4^ZcxQc>$$rBI0_|G)ftm#C3u}3qzgb(ZsQslmC>ek+ zRao*~y*Lbn!8x+@=F6JdU`h-!2c^6wYJS8VB!b;Ma}XDHJabU#Z$-_s;2P{^z%|%S zg=?^z1lL{_f$gjof{n%_^jm{vKa74T)+k4c(C;QfKXB5VJ$Dmea{Oqt)ZB$|5QSWR z2qBkL2qH0n4)5{D7@zJU8j}Gi6@rlIgscxo@FHaS8|Sg&_S3`8m4c+|sR-LAo^Kk# z-S5t=%}Z z>&3itirN?I#R~8gKMO~&6T%UAikHC=>=wfjc#0Rm5$qmTjBReTfPg)ANL}4_#UJVliG1?=^oS;MiLK1Z4p!s_Bss9 z#XUmQhh)ZFw;*5(D%1=|P1q80`0(=2H@-am+{e4bv&M*jR&^%R`qbrlM<0InfbpX? zb;6T>{*Fue0=tKrS2a;w0*bJ%=3E8claR{^ zWPQk11YxN9(7UoMj4zk04^NXT3uJvrG=ObJbC%>>-APXA+VZQG^+1|sy%?LO)Hg3r z&oi}rq|6cs1qlZIgQAL^ZQp1tibPY(5oM;JvtB<_l)tmBMAM+?GPNj``GQV^-cMxR ziP>VVoW5Kw4=iqux|SLUk*R(OkXX`MUkq6*$q^8*8r%sn_>GMRA#0^H9}-W-dD9VUK)a#;Ng+hk(Uu6vLb-^jqt~3$@M^+jKpp)&@T0=P^)MMw zN3S%hF6C(USBISj)<9rRg<{~7-~dQsW*b$&9KF9P>@<)D0&yzT0-pp2a=u}L@h54@ zEu_TJSCbGZK^VVd%>r+tILQ_=GAV*eV#sPv)`w(L1P-6^sy>9XG)pD1!IQ-L4WPy9 zE}1HUv4RZ*Wai3^aelcU)HEJVttk^{ZBq)r&M-d$bXYoZARL?r$^)QB)rqrWln`_$cvBzHq2!Wpo(hkT2K!*+ z1!Nk;ReCZ}_)I*CoN3gflSRl>m}$?z>+3eAV}ImoA-8?(d*(JK18=$j4(kOlk{gz0 zse%Hx`A@Db&oDnK(H;R>7r?y>8RmHstz0K=0IKMs4D&3B7Pw%5H#!4wZ;C|wv`!2( zff;~%6D3-pg2{#hz`d~&?OdH$0tf00@Rk@Lbee;aQ`K z0|(c_Wcz^%+Ne5`quE*=#s~Y~JfljUqcK*6@xlH#%c$A_SKt8be^ZUBRdA&;jBn$J zhO7~gFa4JUuY@p})_`YbQ0tO5LIhqo@|a9~VOusldv7>o znG8Q}$Jm!+F3O5M98`z7p)1YXGA}N%5=0L{{m^71h^|2HRv?9N1-OAJ{;|X~+>!Wa zOVYFg`65)eB3nPG`b*x2ckmbl@dz!!-q1WSXBe~fq0RS^PkkTYqU@=*-Y1ZX`u&JR zH@6X3)BwS5fav3YrsD4)ioe+Rae?|iSVkh5-JbgWhPB_%v*Kmc05fte@L2fE%%j2| z75)Yxe`Gibf0ZF&-^?C=?9sPg3xDm$_doN-hNT-0{kb!6*JCG^EV|Lc`(0DsqZ%

XENx=(Q5wGvOrVkfI3C}dQWGEYi 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%0Am9-BHxx@huhBLyV_9-wO4w1=Xk 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


x$NHCBCy7hAIlVis>h;erysK0b2wYci<5HxS4 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 T{`+yo!2k$+`(%CoqpSQsxxkE4 diff --git a/ui.R b/ui.R index ced999e..7f77de6 100644 --- a/ui.R +++ b/ui.R @@ -1,98 +1,158 @@ -#Only UI files and R packages should be included -#Load R packages -source(paste0(getwd(), "/ui/load_r_packages.R")) +.app_root <- normalizePath(getwd(), mustWork = TRUE) -## Language change utilities -source("R/shinyutilities.R") +# ============================================================================= +# Static assets +# ============================================================================= +.anon_dir <- file.path(.app_root, "www", "anon_assets") -source(paste0(getwd(), "/server/maskedpassinput.R")) -# U1 Add this line of code to call automl_UI from UI folder -source("ui/automl_ui.R") -# Automl controls -source("ui/automl_controls_ui.R") -source("ui/train_model_ui.R") +if (dir.exists(.anon_dir)) { + shiny::addResourcePath("anon_assets", .anon_dir) +} -# Load UI function before deploy_model_ui() -source("ui/deploy_model_ui.R") -#Load Headertag -source(paste0(getwd(), "/ui/login_credentials.R")) +# ============================================================================= +# Load packages FIRST (this should load shiny, shinydashboard, shinyjs, waiter, login, etc) +# ============================================================================= +source(file.path(.app_root, "ui", "load_r_packages.R")) -source(paste0(getwd(), "/ui/headertag.R")) -#Load App Theme -source(paste0(getwd(), "/ui/appTheme.R")) -#Load Header -source(paste0(getwd(), "/ui/header.R")) -#Load Footer -source(paste0(getwd(), "/ui/footer.R")) -source(paste0(getwd(), "/ui/homepage.R")) +# ============================================================================= +# UI helpers / assets +# ============================================================================= +source(file.path(.app_root, "ui", "sidebar_hover_collapse.R")) +source(file.path(.app_root, "R", "shinyutilities.R")) +source(file.path(.app_root, "server", "maskedpassinput.R")) -source("ui/dashboard_body.R") +# ============================================================================= +# App UI modules +# ============================================================================= +source(file.path(.app_root, "ui", "automl_ui.R")) +source(file.path(.app_root, "ui", "automl_controls_ui.R")) +source(file.path(.app_root, "ui", "train_model_ui.R")) +source(file.path(.app_root, "ui", "deploy_model_ui.R")) +# ============================================================================= +# Login / header / theme / footer / homepage +# ============================================================================= +source(file.path(.app_root, "ui", "login_credentials.R")) +source(file.path(.app_root, "ui", "headertag.R")) +source(file.path(.app_root, "ui", "appTheme.R")) +source(file.path(.app_root, "ui", "header.R")) +source(file.path(.app_root, "ui", "footer.R")) +source(file.path(.app_root, "ui", "homepage.R")) -#Sidebar -aphrcSiderbar <- dashboardSidebar( - width = "20%", - #menuItemOutput("dynamic_meinu_aphrc"), - sidebarMenuOutput("dynamic_meinu_aphrc") - #menuItem("AutoML", tabName = "automl_tab", icon = icon("robot")) - +# ============================================================================= +# Anonymization UI (module + tab UIs) +# ============================================================================= +# NOTE: local=FALSE so module functions exist at global scope +.mod_quant_path <- file.path(.app_root, "modules", "mod_quant_anonymization.R") +if (file.exists(.mod_quant_path)) { + source(.mod_quant_path, local = FALSE) +} + +.anon_ui_path <- file.path(.app_root, "ui", "anonymization_ui.R") +if (file.exists(.anon_ui_path)) { + source(.anon_ui_path, local = FALSE) +} + +# ============================================================================= +# Dashboard body must be last (it uses functions above) +# ============================================================================= +source(file.path(.app_root, "ui", "dashboard_body.R")) + +# ============================================================================= +# Shinydashboard shell +# ============================================================================= + +aphrcSiderbar <- shinydashboard::dashboardSidebar( + width = "240%", + shinydashboard::sidebarMenuOutput("dynamic_meinu_aphrc") ) -#Body -fluidPage( - useShinyjs(), - useWaiter(), - - waiterShowOnLoad( - color = "#FFF", - html = spin_loaders(id = 2, style="width:56px;height:56px;color:#7BC148;"), - logo= "WWW/aphrc.png"), +# IMPORTANT: +# - disable=TRUE removes the header bar entirely (no hamburger) +# - disable=FALSE keeps header bar + hamburger toggle available +aphrcHeader <- shinydashboard::dashboardHeader(disable = FALSE) + +# ============================================================================= +# UI object (THIS MUST BE NAMED `ui` if using shinyApp(ui=ui,...)) +# ============================================================================= - div( - id = "auth_wrapper1", # <– will be shown after spinner - login::is_logged_in( - id = app_login_config$APP_ID, header - ), - - aphrcHeader <- dashboardHeader(disable = TRUE), - - login::is_not_logged_in( - id = app_login_config$APP_ID, - div( - class = "auth-container", - br(), - div( - class = "auth-title text-center", - tags$img(src = "aphrc.png", height = "80px", style = "margin-bottom: 15px;"), - h3("Welcome to Nocode Platform") - ), - div( - class = "toggle-buttons", - actionButton("show_login", "Login", class = "btn btn-outline-success"), - actionButton("show_signup", "Sign Up", class = "btn btn-outline-success"), - actionButton("show_reset", "Reset Password", class = "btn btn-outline-success") - ), - div(id = "login_form", - login::login_ui(id = app_login_config$APP_ID) - ), - div(id = "signup_form", style = "display:none;", - login::new_user_ui(id = app_login_config$APP_ID) - ), - div(id = "reset_form", style = "display:none;", - login::reset_password_ui(id = app_login_config$APP_ID) - ) +ui <- shiny::fluidPage( + shinyjs::useShinyjs(), + waiter::useWaiter(), + + shiny::tags$head( + # anonymization CSS in WWW/anon_assets + shiny::tags$link(rel = "stylesheet", type = "text/css", href = "anon_assets/custom.css?v=20260129"), + # Font Awesome (needed by anonymization module icons and your hover assets) + shiny::tags$link(rel = "stylesheet", + href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"), + + # hover-collapse assets (your helper) + sidebar_hover_collapse_assets(default_topbar_px = 110) + ), + + shiny::div( + id = "auth_wrapper1", + + # Logged-in header (your existing `header` object from ui/header.R) + login::is_logged_in( + id = app_login_config$APP_ID, + header + ), + + # Not logged-in auth UI + login::is_not_logged_in( + id = app_login_config$APP_ID, + shiny::div( + class = "auth-container", + shiny::br(), + + shiny::div( + class = "auth-title text-center", + shiny::tags$img(src = "aphrc.png", height = "80px", + style = "margin-bottom: 15px;"), + shiny::tags$h3("Welcome to Nocode Platform") + ), + + shiny::div( + class = "toggle-buttons", + shiny::actionButton("show_login", "Login", class = "btn btn-outline-success"), + shiny::actionButton("show_signup", "Sign Up", class = "btn btn-outline-success"), + shiny::actionButton("show_reset", "Reset Password", class = "btn btn-outline-success") + ), + + shiny::div( + id = "login_form", + login::login_ui(id = app_login_config$APP_ID) + ), + + shiny::div( + id = "signup_form", style = "display:none;", + login::new_user_ui(id = app_login_config$APP_ID) + ), + + shiny::div( + id = "reset_form", style = "display:none;", + login::reset_password_ui(id = app_login_config$APP_ID) ) - ), - - login::is_logged_in( - id = app_login_config$APP_ID, - div(dashboardPage(aphrcHeader, aphrcSiderbar, aphrcBody, skin = "green")) - ), - - login::is_logged_in( - id = app_login_config$APP_ID, - div(footer) ) - )) - - + ), + + # Logged-in dashboard + login::is_logged_in( + id = app_login_config$APP_ID, + shinydashboard::dashboardPage( + header = aphrcHeader, + sidebar = aphrcSiderbar, + body = aphrcBody, + skin = "green" + ) + ), + + # Logged-in footer + login::is_logged_in( + id = app_login_config$APP_ID, + footer + ) + ) +) diff --git a/ui/anonymization_ui.R b/ui/anonymization_ui.R new file mode 100644 index 0000000..14f16b4 --- /dev/null +++ b/ui/anonymization_ui.R @@ -0,0 +1,14 @@ +anonymization_quant_ui <- function() { + shinydashboard::tabItem( + tabName = "anonymization_quant", + mod_quant_anon_ui("quant_anon") + ) +} + +anonymization_qual_ui <- function() { + shinydashboard::tabItem( + tabName = "anonymization_qual", + shiny::h3("Qualitative Anonymization"), + shiny::p("Coming soon / integrate later.") + ) +} diff --git a/ui/dashboard_body.R b/ui/dashboard_body.R index a38606d..0010713 100644 --- a/ui/dashboard_body.R +++ b/ui/dashboard_body.R @@ -22,125 +22,130 @@ source("ui/add_resources_ui.R") source("ui/deploy_model_ui.R", local=TRUE) source("ui/predict_pycaret_ui.R", local = TRUE) + #### ---- Change language -------------------------------------------- source("server/change_language.R", local = TRUE) #### Extracts language specific labels get_rv_labels = function(var) { - get_rv_labels_base(rv_lang$labelling_file_df, var) + get_rv_labels_base(rv_lang$labelling_file_df, var) } - aphrcBody <- dashboardBody( - headertag, - useShinyjs(), - useAttendant(), - # useWaiter(), #FIXME: Use better one - theme = appTheme, - # -- Handler JS pour capter les clics 'Deploy' dans la DataTable du module -- - # dashboard_body (une seule fois, avant tabItems) - tags$head( - tags$script(HTML(" - Shiny.addCustomMessageHandler('bindDeployBtn', function(msg) { - var ns = msg.ns; - - // Nettoie d'abord les handlers (évite doublons) - $(document).off('click', '.action-deploy'); - $(document).off('click', '.action-stop'); - - // ---- Deploy ---- - $(document).on('click', '.action-deploy', function(){ - var $btn = $(this); - var mid = $btn.data('model'); - - // Feedback visuel immédiat - $btn.prop('disabled', true).text('Deploying...'); - - // Envoi à Shiny - Shiny.setInputValue(ns + 'deploy_model_id', mid, {priority: 'event'}); - }); - - // ---- Stop ---- - $(document).on('click', '.action-stop', function(){ - var $btn = $(this); - var mid = $btn.data('model'); - - $btn.prop('disabled', true).text('Stopping...'); - - Shiny.setInputValue(ns + 'stop_model_id', mid, {priority: 'event'}); - }); - }); - Shiny.addCustomMessageHandler('openSwagger', function(msg) { - if (msg && msg.url) { window.open(msg.url, '_blank'); } - }); - ")) - ), - - tabItems( - tabItem(tabName = "homePage" - , class = "active" - , homepage() - ) - - ## Source data - , sourcedata_ui() - - ## Data overview - , overview_ui() - - ## Explore - , explore_ui() - - ## Transform data - , transform_ui() - - ## Combine data - , combinedata_ui() - - ## Summarize data automatic - , summarize_automatic_ui() - - ## Summarize data customize - , summarize_custom_ui() - - ## Research questions - , research_questions_ui() - - ## Setup models - , setup_models_ui() - - ## Feature engineering - , feature_engineering_ui() - - ## Evidence quality - , evidence_quality_ui() - - ## Train models: FIXME: NOW - Remove text in the train_model_ui - , train_all_model_ui() - - ## Validate and deploy models - , validate_deploy_model_ui() - - ## Prediction UI - , predict_classify_ui() - - ## Deep learning UI - , deeplearning_ui() - - ## Cohort constructor - , cohort_constructor_ui() - - ## Achilles - , achilles_ui() - - ## Feature extraction - , feature_extraction_ui() - - ## OMOP visualization - , omop_visualizations_ui() - - ## OMOP resources - , add_resources_ui() - - ) + headertag, + useShinyjs(), + useAttendant(), + # useWaiter(), #FIXME: Use better one + theme = appTheme, + + # -- Handler JS pour capter les clics 'Deploy' dans la DataTable du module -- + # dashboard_body (une seule fois, avant tabItems) + tags$head( + tags$script(HTML(" + Shiny.addCustomMessageHandler('bindDeployBtn', function(msg) { + var ns = msg.ns; + + // Nettoie d'abord les handlers (évite doublons) + $(document).off('click', '.action-deploy'); + $(document).off('click', '.action-stop'); + + // ---- Deploy ---- + $(document).on('click', '.action-deploy', function(){ + var $btn = $(this); + var mid = $btn.data('model'); + + // Feedback visuel immédiat + $btn.prop('disabled', true).text('Deploying...'); + + // Envoi à Shiny + Shiny.setInputValue(ns + 'deploy_model_id', mid, {priority: 'event'}); + }); + + // ---- Stop ---- + $(document).on('click', '.action-stop', function(){ + var $btn = $(this); + var mid = $btn.data('model'); + + $btn.prop('disabled', true).text('Stopping...'); + + Shiny.setInputValue(ns + 'stop_model_id', mid, {priority: 'event'}); + }); + }); + + Shiny.addCustomMessageHandler('openSwagger', function(msg) { + if (msg && msg.url) { window.open(msg.url, '_blank'); } + }); + ")) + ), + + tabItems( + tabItem(tabName = "homePage", + class = "active", + homepage() + ) + + ## Source data + , sourcedata_ui() + + ## Data overview + , overview_ui() + + ## Explore + , explore_ui() + + ## Transform data + , transform_ui() + + ## Combine data + , combinedata_ui() + + ## Summarize data automatic + , summarize_automatic_ui() + + ## Summarize data customize + , summarize_custom_ui() + + ## Research questions + , research_questions_ui() + + ## Setup models + , setup_models_ui() + + ## Feature engineering + , feature_engineering_ui() + + ## Evidence quality + , evidence_quality_ui() + + ## Train models: FIXME: NOW - Remove text in the train_model_ui + , train_all_model_ui() + + ## Validate and deploy models + , validate_deploy_model_ui() + + ## Prediction UI + , predict_classify_ui() + + ## Deep learning UI + , deeplearning_ui() + + ## Cohort constructor + , cohort_constructor_ui() + + ## Achilles + , achilles_ui() + + ## Feature extraction + , feature_extraction_ui() + + ## OMOP visualization + , omop_visualizations_ui() + + ## OMOP resources + , add_resources_ui() + + ## Anonymization + , anonymization_quant_ui() + , anonymization_qual_ui() + ) ) diff --git a/ui/load_r_packages.R b/ui/load_r_packages.R index d45c665..377b1fe 100644 --- a/ui/load_r_packages.R +++ b/ui/load_r_packages.R @@ -92,7 +92,25 @@ libraries <- c( "MLmetrics", "fs" ) - +library(shiny) +library(shinyjs) +library(sortable) +library(shinyWidgets) +library(flexdashboard) +library(shinyAce) +library(leaflet) +library(dplyr) +library(readr) +library(readxl) +library(openxlsx) +library(haven) +library(shinyjs) +library(shiny) +library(digest) +library(sdcMicro) +library(rmarkdown) +library(pagedown) +library(data.table) # Install missing CRAN packages missing <- setdiff(libraries, rownames(installed.packages())) diff --git a/ui/sidebar_hover_collapse.R b/ui/sidebar_hover_collapse.R new file mode 100644 index 0000000..0969ba5 --- /dev/null +++ b/ui/sidebar_hover_collapse.R @@ -0,0 +1,175 @@ +# ui/sidebar_hover_collapse.R + +sidebar_hover_collapse_assets <- function( + collapsed_width = 56, # px + expanded_width = 240, # px + transition_ms = 320, # smooth + default_topbar_px = 110 # <- IMPORTANT: fallback if JS can't detect header +) { + shiny::tags$script(shiny::HTML(" +(function () { + + function killAdminLTEHeaderAndToggle() { + // Remove the hamburger toggle wherever it exists + document.querySelectorAll('.sidebar-toggle, a.sidebar-toggle').forEach(function(el){ + if (el && el.parentNode) el.parentNode.removeChild(el); + }); + + // Remove the AdminLTE header bar container if it exists + var mh = document.querySelector('.main-header'); + if (mh && mh.parentNode) mh.parentNode.removeChild(mh); + } + + // Run now + killAdminLTEHeaderAndToggle(); + + // Run again after Shiny attaches UI + document.addEventListener('shiny:connected', function(){ + setTimeout(killAdminLTEHeaderAndToggle, 50); + setTimeout(killAdminLTEHeaderAndToggle, 250); + setTimeout(killAdminLTEHeaderAndToggle, 800); + }); + + // Observe DOM changes (login / dynamic UI) + var obs = new MutationObserver(function(){ killAdminLTEHeaderAndToggle(); }); + if (document.body) obs.observe(document.body, { childList: true, subtree: true }); + +})(); +")) + + css <- sprintf(" + :root{ + /* Fallback so sidebar never goes behind the green header */ + --aphrc-topbar-height: %dpx; + } + + /* Sidebar position */ + .main-sidebar{ + position: fixed !important; + left: 0 !important; + top: var(--aphrc-topbar-height) !important; + height: calc(100vh - var(--aphrc-topbar-height)) !important; + + overflow-x: hidden; + overflow-y: auto; + + width: %dpx !important; + transition: width %dms cubic-bezier(0.22, 1, 0.36, 1); + will-change: width; + z-index: 2000; + } + + /* Fix weird top spacing inside sidebar (THIS fixes the 'home icon too high') */ + .main-sidebar .sidebar{ + padding-top: 10px !important; + } + .main-sidebar .sidebar-menu{ + margin-top: 0 !important; + } + + /* Make menu items consistent height + vertically centered */ + .main-sidebar .sidebar-menu > li > a{ + height: 44px !important; + display: flex !important; + align-items: center !important; + box-sizing: border-box; + } + + /* Keep content aligned to collapsed sidebar (no jump) */ + .content-wrapper, .right-side, .main-footer{ + margin-left: %dpx !important; + transition: margin-left %dms cubic-bezier(0.22, 1, 0.36, 1); + } + + /* Expand on hover */ + .main-sidebar:hover{ + width: %dpx !important; + } + + /* Hide text when collapsed */ + .main-sidebar .sidebar-menu > li > a > span, + .main-sidebar .sidebar-menu > li > a > .pull-right-container{ + display: none !important; + } + + /* Collapsed: icon centered */ + .main-sidebar .sidebar-menu > li > a{ + justify-content: center !important; + padding-left: 0 !important; + padding-right: 0 !important; + } + .main-sidebar .sidebar-menu > li > a > i{ + font-size: 16px; + margin: 0 !important; + width: auto !important; + } + + /* On hover: show text and align left */ + .main-sidebar:hover .sidebar-menu > li > a{ + justify-content: flex-start !important; + padding-left: 15px !important; + padding-right: 15px !important; + } + .main-sidebar:hover .sidebar-menu > li > a > i{ + margin-right: 8px !important; + } + .main-sidebar:hover .sidebar-menu > li > a > span, + .main-sidebar:hover .sidebar-menu > li > a > .pull-right-container{ + display: inline-block !important; + } + + /* Keep shinydashboard header disabled (do NOT force-hide main-header aggressively) */ + .content-wrapper{ padding-top: 0 !important; } + ", + default_topbar_px, + collapsed_width, transition_ms, + collapsed_width, transition_ms, + expanded_width + ) + + shiny::tagList( + shiny::tags$style(shiny::HTML(css)), + shiny::tags$script(shiny::HTML(" + (function () { + + function pickHeader() { + // Try common candidates; we want the GREEN header region container + return document.querySelector('#auth_wrapper1 .header') + || document.querySelector('.header') + || document.querySelector('#auth_wrapper1 header') + || document.querySelector('header'); + } + + function setTopbarHeight() { + var el = pickHeader(); + if (!el) return; + + // Use bottom edge: exactly where green block ends + var r = el.getBoundingClientRect(); + var h = Math.max(0, Math.round(r.bottom)); + if (h > 20) { + document.documentElement.style.setProperty('--aphrc-topbar-height', h + 'px'); + } + } + + // MutationObserver: catches Shiny/login UI changes reliably + var obs = new MutationObserver(function(){ setTopbarHeight(); }); + + function startObserver() { + if (!document.body) return; + obs.observe(document.body, { childList: true, subtree: true }); + setTopbarHeight(); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', startObserver); + } else { + startObserver(); + } + + window.addEventListener('resize', setTopbarHeight); + + })(); + ")) + ) +} diff --git a/users_db/users.sqlite b/users_db/users.sqlite index 3019f3891dc68af6646173ed3631914f4c68f0c6..68509dcf74899e51792455ef187b344148046f86 100644 GIT binary patch literal 20480 zcmeI&dsGuw9tZF|Chx~kt7b)8XRC09xl$kr2_P8ISn&ZO(Mr|gBqSIO2_*@Ft7y>f zuJuvQYIUuxJw94pUr_7WEmn8!YFFv@SjE~ctaW$k>Zw|7v9-SHx)ZHcTws3x>|fqF zCnTAC@|(BtQ}%36KOx0we*F07-x(KoTGckOcl;2}Hya zg&`q99LWlCPMZ|G_O zZcVkgT+U>-o3nD3z) zpVjZzuhP%f=j!|EzR?}ky{Vh0E7B$E#M;la4ccF7r)y1Gjiz1Gq^Z}GY3!N->TlH_ zsyC>s)dlK!)h*R0s_m*eRk6yV(kss>4=P_(Rx1mXLzR@GUD2diqwp)nDF(@J$dAjn z$`{Bd$P;C^WXEKiWK}YUjFm~KQ&a<0M@^!Plv?^P>ATXGr5E57Csw3kDmkT%pa!ge?6|4G8?+jgbyRrl6=V*H${-8 zOir!B&jPn?U0QkCA2(U3Xxi#sH=5!m39^;(-xVe~D04!WdvbR`j33~01;YMN^fG*T z_Yyx_L>c20U0i&fPljoWhC1D4gC|l(L${c}92emhrZ+02SpEd-d>>y*Oyo3~dM4 zU>RZnaDpvVi3SS8?Bb5U3}l|{{%o*k7hn9o9X%mjYS_M$Cy$~504Qp0+<^KE!^{px zM=^>8!1TbjeAEvB`I;AipLU-?eE_iPLf|6m4S+L$ zcV!ZK902>Obyra@VVJ&+b6!A?2}7%G6YD`S!qBq4FV zNGDt>tqDs4NGk|)&({QuHlzVSQ!m|Nqz1sJ9JU&y5{BpID8AT%lmIyE^Tt<^0su3e z$KFG708CtVFc!&#;h!@6m(C$d7)IC&ukA)sVYuMgZ?9ZuB;6n6+}csEFE39JQ!L*a zb^e9^@DH$DzGHkUpe}CZd&Zr0J|4IK( z`v1;fyZ0^((*OTB+CD9h^#6C~9rCx5{=d`gRp+5|JL&&_oYi|Mmtmy;@9DJ3ApQUU z#*@=#C;fjH-^@Qv0_UE4)cXJ0kzbp3M*IInu z7DwbzZvFN1QXG*%x#*daY8;_}ylJA#%;Ja?$`wh+HsXi`$p7$M?3eR#L=5Hn)l@T% zh=BammqxZDpN}z83K4(NLegUd4X6$+cS3q@QbH_0p0O}*nN5k8(AF5;8&9S%~ zs1G-sUb7MVpn65jh1GaAR1clmat6VB4%|6ngrAF`Yny9&<)>S{wqY!xm8>Wb_e zF;}n$r~~H{+djr_p!UB%WZz<33e>)ZCmL>I7gWFSQjrcjf!aGYX6IPU0k!8=Va*ae M1FApW(QEvF0isxT6951J delta 78 zcmZozz}S#5L7Fw3fq{W}qJlkR_{M}K{2WaD*$n(U__H?)3h?nyYzUm3EkBiy7pNwf i=@kS2RsPNVU6c6~7HllEVPet_p1e^-ZL^T^J01W$@D@A(