VeuReu commited on
Commit
e06a231
1 Parent(s): cad8954

Upload 8 files

Browse files
Files changed (3) hide show
  1. app.py +5 -0
  2. auth.py +3 -0
  3. page_modules/machine_room.py +181 -0
app.py CHANGED
@@ -21,6 +21,7 @@ from page_modules.process_video import render_process_video_page
21
  from page_modules.analyze_audiodescriptions import render_analyze_audiodescriptions_page
22
  from page_modules.statistics import render_statistics_page
23
  from page_modules.validation import render_validation_page
 
24
 
25
 
26
  # -- Move DB / v铆deos en entorns de desplegament --
@@ -221,3 +222,7 @@ elif page == "Validaci贸":
221
  require_login(render_login_form)
222
  permissions = get_user_permissions(role, st.session_state.get('sms_verified'))
223
  render_validation_page(compliance_client, runtime_videos, permissions, username)
 
 
 
 
 
21
  from page_modules.analyze_audiodescriptions import render_analyze_audiodescriptions_page
22
  from page_modules.statistics import render_statistics_page
23
  from page_modules.validation import render_validation_page
24
+ from page_modules.machine_room import render_machine_room_page
25
 
26
 
27
  # -- Move DB / v铆deos en entorns de desplegament --
 
222
  require_login(render_login_form)
223
  permissions = get_user_permissions(role, st.session_state.get('sms_verified'))
224
  render_validation_page(compliance_client, runtime_videos, permissions, username)
225
+
226
+ elif page == "Sala de m脿quines":
227
+ require_login(render_login_form)
228
+ render_machine_room_page()
auth.py CHANGED
@@ -177,6 +177,9 @@ def render_sidebar():
177
 
178
  if permissions["validar"]:
179
  page_options.append("Validaci贸")
 
 
 
180
 
181
  # Si no hay opciones disponibles, mostrar solo an谩lisis
182
  if not page_options:
 
177
 
178
  if permissions["validar"]:
179
  page_options.append("Validaci贸")
180
+
181
+ # Opci贸 de configuraci贸 avan莽ada (sala de m脿quines), sempre visible per usuaris autenticats
182
+ page_options.append("Sala de m脿quines")
183
 
184
  # Si no hay opciones disponibles, mostrar solo an谩lisis
185
  if not page_options:
page_modules/machine_room.py ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import Any, Dict
5
+
6
+ import os
7
+ import yaml
8
+ import streamlit as st
9
+
10
+
11
+ BASE_DIR = Path(__file__).resolve().parent.parent
12
+ CONFIG_PATH = BASE_DIR / "config.yaml"
13
+
14
+
15
+ def _load_config() -> Dict[str, Any]:
16
+ if not CONFIG_PATH.exists():
17
+ return {}
18
+ with CONFIG_PATH.open("r", encoding="utf-8") as f:
19
+ cfg = yaml.safe_load(f) or {}
20
+ return cfg
21
+
22
+
23
+ def _save_config(cfg: Dict[str, Any]) -> None:
24
+ """Guarda el diccionario cfg en config.yaml preservando estructura b谩sica."""
25
+ with CONFIG_PATH.open("w", encoding="utf-8") as f:
26
+ yaml.safe_dump(cfg, f, allow_unicode=True, sort_keys=False)
27
+
28
+
29
+ def render_machine_room_page() -> None:
30
+ st.header("Sala de m脿quines")
31
+
32
+ cfg = _load_config()
33
+
34
+ app_cfg = cfg.get("app", {}) or {}
35
+ media_cfg = cfg.get("media", {}) or {}
36
+ versions_cfg = cfg.get("versions", {}) or {}
37
+ refinement_cfg = cfg.get("refinement", {}) or {}
38
+ automation_cfg = cfg.get("automation", {}) or {}
39
+ validation_cfg = cfg.get("validation", {}) or {}
40
+ compliance_cfg = cfg.get("compliance", {}) or {}
41
+
42
+ with st.form("machine_room_form"):
43
+ # 1) Mida del v铆deo
44
+ st.subheader("Mida del v铆deo")
45
+ col1, col2 = st.columns(2)
46
+ with col1:
47
+ max_size_mb = st.number_input(
48
+ "Mida m脿xima (MB)",
49
+ min_value=1,
50
+ max_value=10_000,
51
+ value=int(media_cfg.get("max_size_mb", 20) or 20),
52
+ )
53
+ with col2:
54
+ max_duration_s = st.number_input(
55
+ "Durada m脿xima (s)",
56
+ min_value=1,
57
+ max_value=60 * 60,
58
+ value=int(media_cfg.get("max_duration_s", 30) or 30),
59
+ )
60
+
61
+ st.markdown("---")
62
+
63
+ # 2) Modalitat / app
64
+ st.subheader("Modalitat")
65
+ data_origin = app_cfg.get("data_origin", "external") or "external"
66
+ origin_label = "persistent" if data_origin == "external" else "temporal"
67
+ origin = st.selectbox(
68
+ "Origen de dades",
69
+ options=["persistent", "temporal"],
70
+ index=["persistent", "temporal"].index(origin_label),
71
+ help="'persistent' equival a 'external'; 'temporal' equival a 'internal'.",
72
+ )
73
+ manual_validation_enabled = bool(app_cfg.get("manual_validation_enabled", False))
74
+ manual_validation_enabled = st.checkbox(
75
+ "Incloure validaci贸 manual",
76
+ value=manual_validation_enabled,
77
+ )
78
+
79
+ st.markdown("---")
80
+
81
+ # 3) Versions d'audiodescripci贸
82
+ st.subheader("Versions d'audiodescripci贸")
83
+ salamandra_enabled = bool(versions_cfg.get("Salamandra_enabled", True))
84
+ moe_enabled = bool(versions_cfg.get("MoE_enabled", True))
85
+ salamandra_enabled = st.checkbox("Salamandra", value=salamandra_enabled)
86
+ moe_enabled = st.checkbox("Mixture of Experts (MoE)", value=moe_enabled)
87
+
88
+ st.markdown("---")
89
+
90
+ # 4) Refinament final
91
+ st.subheader("Refinament final")
92
+ reflection_enabled = bool(refinement_cfg.get("reflection_enabled", True))
93
+ reflexion_enabled = bool(refinement_cfg.get("reflexion_enabled", False))
94
+ introspection_enabled = bool(refinement_cfg.get("introspection_enabled", False))
95
+
96
+ reflection_enabled = st.checkbox("Reflection multi-agent", value=reflection_enabled)
97
+ reflexion_enabled = st.checkbox("Reflexion", value=reflexion_enabled)
98
+ introspection_enabled = st.checkbox("Introspection", value=introspection_enabled)
99
+
100
+ st.markdown("---")
101
+
102
+ # 5) Automatitzacions
103
+ st.subheader("Automatitzacions")
104
+ twilio_enabled = bool(automation_cfg.get("twilio_enabled", False))
105
+ zapier_enabled = bool(automation_cfg.get("zapier_enabled", False))
106
+
107
+ col_a, col_b = st.columns(2)
108
+ with col_a:
109
+ twilio_enabled = st.checkbox("Twilio", value=twilio_enabled)
110
+ with col_b:
111
+ # Deshabilitat per no permetre canvis
112
+ st.checkbox("Zapier", value=zapier_enabled, disabled=True)
113
+
114
+ user_sms_enabled = bool(validation_cfg.get("user_sms_enabled", False))
115
+ video_validator_sms_enabled = bool(validation_cfg.get("video_validator_sms_enabled", False))
116
+ une_validator_sms_enabled = bool(validation_cfg.get("une_validator_sms_enabled", False))
117
+
118
+ user_sms_enabled = st.checkbox("SMS a l'usuari", value=user_sms_enabled)
119
+ video_validator_sms_enabled = st.checkbox(
120
+ "SMS al validador de v铆deos", value=video_validator_sms_enabled
121
+ )
122
+ une_validator_sms_enabled = st.checkbox(
123
+ "SMS validador UNE-153020", value=une_validator_sms_enabled
124
+ )
125
+
126
+ st.markdown("---")
127
+
128
+ # 6) Tra莽abilitat
129
+ st.subheader("Tra莽abilitat")
130
+ private_blockchain_enabled = bool(compliance_cfg.get("private_blockchain_enabled", False))
131
+ public_blockchain_enabled = bool(compliance_cfg.get("public_blockchain_enabled", True))
132
+ monthly_digest_enabled = bool(compliance_cfg.get("monthly_digest_enabled", False))
133
+
134
+ public_blockchain_enabled = st.checkbox(
135
+ "Public blockchain (Polygon)", value=public_blockchain_enabled
136
+ )
137
+ st.checkbox(
138
+ "Private blockchain (QLDB)", value=private_blockchain_enabled, disabled=True
139
+ )
140
+ monthly_digest_enabled = st.checkbox("Monthly digest", value=monthly_digest_enabled)
141
+
142
+ st.markdown("---")
143
+
144
+ submitted = st.form_submit_button("Desar canvis", type="primary")
145
+
146
+ if submitted:
147
+ # Actualitzar seccions del cfg en mem貌ria
148
+ cfg.setdefault("media", {})
149
+ cfg["media"]["max_size_mb"] = int(max_size_mb)
150
+ cfg["media"]["max_duration_s"] = int(max_duration_s)
151
+
152
+ cfg.setdefault("app", {})
153
+ cfg["app"]["data_origin"] = "external" if origin == "persistent" else "internal"
154
+ cfg["app"]["manual_validation_enabled"] = bool(manual_validation_enabled)
155
+
156
+ cfg.setdefault("versions", {})
157
+ cfg["versions"]["Salamandra_enabled"] = bool(salamandra_enabled)
158
+ cfg["versions"]["MoE_enabled"] = bool(moe_enabled)
159
+
160
+ cfg.setdefault("refinement", {})
161
+ cfg["refinement"]["reflection_enabled"] = bool(reflection_enabled)
162
+ cfg["refinement"]["reflexion_enabled"] = bool(reflexion_enabled)
163
+ cfg["refinement"]["introspection_enabled"] = bool(introspection_enabled)
164
+
165
+ cfg.setdefault("automation", {})
166
+ cfg["automation"]["twilio_enabled"] = bool(twilio_enabled)
167
+ # zapier_enabled es mant茅 per貌 no es canvia des de la UI
168
+
169
+ cfg.setdefault("validation", {})
170
+ cfg["validation"]["user_sms_enabled"] = bool(user_sms_enabled)
171
+ cfg["validation"]["video_validator_sms_enabled"] = bool(video_validator_sms_enabled)
172
+ cfg["validation"]["une_validator_sms_enabled"] = bool(une_validator_sms_enabled)
173
+
174
+ cfg.setdefault("compliance", {})
175
+ cfg["compliance"]["public_blockchain_enabled"] = bool(public_blockchain_enabled)
176
+ # private_blockchain_enabled no es modifica des de la UI
177
+ cfg["compliance"]["monthly_digest_enabled"] = bool(monthly_digest_enabled)
178
+
179
+ _save_config(cfg)
180
+ st.success("Configuraci贸 desada correctament. Reinicia la p脿gina per veure els canvis aplicats.")
181
+ st.experimental_rerun()