Spaces:
Sleeping
Sleeping
Pointf5ive commited on
Commit Β·
ca7d969
1
Parent(s): 83a57b2
Prevent workbook fallback from populating TOTEM scores
Browse files- app.py +20 -6
- src/totem_bridge.py +2 -0
app.py
CHANGED
|
@@ -2925,7 +2925,13 @@ def clear_codex_form() -> tuple[None, str, str, str, str, str, str]:
|
|
| 2925 |
|
| 2926 |
# ββ WORKBOOK FUNCTIONS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 2927 |
|
| 2928 |
-
def _build_dashboard_state_from_workbook(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2929 |
"""
|
| 2930 |
UI-layer adapter (Stage 8). Reads workbook analytics and maps into dashboard_state.
|
| 2931 |
Does NOT change any extractor/scoring logic β reads only.
|
|
@@ -2938,7 +2944,7 @@ def _build_dashboard_state_from_workbook(path: Path, status: str, notice: str =
|
|
| 2938 |
state["dashboard_message"] = notice or ""
|
| 2939 |
state["last_analysis_at"] = datetime.datetime.now().isoformat(timespec="seconds") if status == "complete" else None
|
| 2940 |
|
| 2941 |
-
if path.exists():
|
| 2942 |
try:
|
| 2943 |
log_df = score_log(path)
|
| 2944 |
if log_df is not None and not log_df.empty:
|
|
@@ -3016,7 +3022,7 @@ def _build_dashboard_state_from_workbook(path: Path, status: str, notice: str =
|
|
| 3016 |
def load_workbook(uploaded_file=None, notice: str = ""):
|
| 3017 |
path = _validate_workbook_path(_clean_path(uploaded_file))
|
| 3018 |
log_df = score_log(path)
|
| 3019 |
-
state = _build_dashboard_state_from_workbook(path, "
|
| 3020 |
return str(path), render_dashboard(state), log_df, _score_summary(log_df)
|
| 3021 |
|
| 3022 |
|
|
@@ -3049,14 +3055,18 @@ def set_active_workbook(uploaded_file):
|
|
| 3049 |
def load_local_path(path_text: str):
|
| 3050 |
path = _validate_workbook_path(Path(path_text or "").expanduser())
|
| 3051 |
log_df = score_log(path)
|
| 3052 |
-
state = _build_dashboard_state_from_workbook(path, "
|
| 3053 |
return str(path), render_dashboard(state), log_df, _score_summary(log_df)
|
| 3054 |
|
| 3055 |
|
| 3056 |
def run_analysis(active_path: str):
|
| 3057 |
path = _validate_workbook_path(Path(active_path) if active_path else _preferred_workbook_path())
|
| 3058 |
log_df = score_log(path)
|
| 3059 |
-
state = _build_dashboard_state_from_workbook(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3060 |
return render_dashboard(state), log_df, _score_summary(log_df)
|
| 3061 |
|
| 3062 |
|
|
@@ -3224,7 +3234,11 @@ def run_totem_analysis_from_context(active_path: str, manuscript_context_json: s
|
|
| 3224 |
def recalc_log(log_df, active_path: str):
|
| 3225 |
path = _validate_workbook_path(Path(active_path) if active_path else _preferred_workbook_path())
|
| 3226 |
recalculated = recalculate_log(log_df, path)
|
| 3227 |
-
state = _build_dashboard_state_from_workbook(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3228 |
return render_dashboard(state), recalculated, _score_summary(recalculated)
|
| 3229 |
|
| 3230 |
|
|
|
|
| 2925 |
|
| 2926 |
# ββ WORKBOOK FUNCTIONS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 2927 |
|
| 2928 |
+
def _build_dashboard_state_from_workbook(
|
| 2929 |
+
path: Path,
|
| 2930 |
+
status: str,
|
| 2931 |
+
notice: str = "",
|
| 2932 |
+
*,
|
| 2933 |
+
include_scorecard: bool = False,
|
| 2934 |
+
) -> dict:
|
| 2935 |
"""
|
| 2936 |
UI-layer adapter (Stage 8). Reads workbook analytics and maps into dashboard_state.
|
| 2937 |
Does NOT change any extractor/scoring logic β reads only.
|
|
|
|
| 2944 |
state["dashboard_message"] = notice or ""
|
| 2945 |
state["last_analysis_at"] = datetime.datetime.now().isoformat(timespec="seconds") if status == "complete" else None
|
| 2946 |
|
| 2947 |
+
if path.exists() and include_scorecard:
|
| 2948 |
try:
|
| 2949 |
log_df = score_log(path)
|
| 2950 |
if log_df is not None and not log_df.empty:
|
|
|
|
| 3022 |
def load_workbook(uploaded_file=None, notice: str = ""):
|
| 3023 |
path = _validate_workbook_path(_clean_path(uploaded_file))
|
| 3024 |
log_df = score_log(path)
|
| 3025 |
+
state = _build_dashboard_state_from_workbook(path, "ready", notice or "Workbook loaded. Upload a manuscript and run TOTEM Analysis.")
|
| 3026 |
return str(path), render_dashboard(state), log_df, _score_summary(log_df)
|
| 3027 |
|
| 3028 |
|
|
|
|
| 3055 |
def load_local_path(path_text: str):
|
| 3056 |
path = _validate_workbook_path(Path(path_text or "").expanduser())
|
| 3057 |
log_df = score_log(path)
|
| 3058 |
+
state = _build_dashboard_state_from_workbook(path, "ready", "Local workbook loaded. Upload a manuscript and run TOTEM Analysis.")
|
| 3059 |
return str(path), render_dashboard(state), log_df, _score_summary(log_df)
|
| 3060 |
|
| 3061 |
|
| 3062 |
def run_analysis(active_path: str):
|
| 3063 |
path = _validate_workbook_path(Path(active_path) if active_path else _preferred_workbook_path())
|
| 3064 |
log_df = score_log(path)
|
| 3065 |
+
state = _build_dashboard_state_from_workbook(
|
| 3066 |
+
path,
|
| 3067 |
+
"ready",
|
| 3068 |
+
"Workbook is ready. Upload a manuscript and click Run TOTEM Analysis to score.",
|
| 3069 |
+
)
|
| 3070 |
return render_dashboard(state), log_df, _score_summary(log_df)
|
| 3071 |
|
| 3072 |
|
|
|
|
| 3234 |
def recalc_log(log_df, active_path: str):
|
| 3235 |
path = _validate_workbook_path(Path(active_path) if active_path else _preferred_workbook_path())
|
| 3236 |
recalculated = recalculate_log(log_df, path)
|
| 3237 |
+
state = _build_dashboard_state_from_workbook(
|
| 3238 |
+
path,
|
| 3239 |
+
"ready",
|
| 3240 |
+
"Gates recalculated in private controls. Run manuscript analysis to update dashboard metrics.",
|
| 3241 |
+
)
|
| 3242 |
return render_dashboard(state), recalculated, _score_summary(recalculated)
|
| 3243 |
|
| 3244 |
|
src/totem_bridge.py
CHANGED
|
@@ -144,6 +144,8 @@ def run_totem_skill(
|
|
| 144 |
skill_text, skill_path = load_totem_skill()
|
| 145 |
|
| 146 |
if _env_truthy("TOTEM_FAKE_API"):
|
|
|
|
|
|
|
| 147 |
raw_payload = _fake_dashboard_payload(manuscript)
|
| 148 |
validated = validate_dashboard_payload(raw_payload)
|
| 149 |
return validated, {
|
|
|
|
| 144 |
skill_text, skill_path = load_totem_skill()
|
| 145 |
|
| 146 |
if _env_truthy("TOTEM_FAKE_API"):
|
| 147 |
+
if os.getenv("SPACE_ID") and not _env_truthy("TOTEM_ALLOW_FAKE_API_IN_SPACE"):
|
| 148 |
+
raise BridgeError("TOTEM_FAKE_API is disabled on Hugging Face Spaces.")
|
| 149 |
raw_payload = _fake_dashboard_payload(manuscript)
|
| 150 |
validated = validate_dashboard_payload(raw_payload)
|
| 151 |
return validated, {
|