Synav commited on
Commit
2d2e72d
·
verified ·
1 Parent(s): c852186

Update app.py

Browse files

Add publish_to_hub uploader

Files changed (1) hide show
  1. app.py +57 -0
app.py CHANGED
@@ -6,6 +6,9 @@ import streamlit as st
6
  import joblib
7
  import shap
8
  import matplotlib.pyplot as plt
 
 
 
9
 
10
  from sklearn.pipeline import Pipeline
11
  from sklearn.compose import ColumnTransformer
@@ -173,6 +176,60 @@ def build_shap_explainer(pipe, X_bg, max_bg=200):
173
  )
174
  return explainer
175
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
  # ============================================================
178
  # Streamlit UI
 
6
  import joblib
7
  import shap
8
  import matplotlib.pyplot as plt
9
+ import os
10
+ from huggingface_hub import HfApi
11
+
12
 
13
  from sklearn.pipeline import Pipeline
14
  from sklearn.compose import ColumnTransformer
 
176
  )
177
  return explainer
178
 
179
+ def publish_to_hub(model_repo_id: str, version_tag: str):
180
+ """
181
+ Uploads model.joblib and meta.json to a Hugging Face *model* repository
182
+ under a versioned folder and also updates a 'latest/' copy.
183
+ Requires Space Secret: HF_TOKEN.
184
+ """
185
+ token = os.environ.get("HF_TOKEN")
186
+ if not token:
187
+ raise RuntimeError("HF_TOKEN not found. Add it in Space Settings → Secrets.")
188
+
189
+ api = HfApi(token=token)
190
+
191
+ # Versioned paths
192
+ version_model_path = f"releases/{version_tag}/model.joblib"
193
+ version_meta_path = f"releases/{version_tag}/meta.json"
194
+
195
+ # Upload versioned artifacts
196
+ api.upload_file(
197
+ path_or_fileobj="model.joblib",
198
+ path_in_repo=version_model_path,
199
+ repo_id=model_repo_id,
200
+ repo_type="model",
201
+ commit_message=f"Upload model artifacts ({version_tag})"
202
+ )
203
+ api.upload_file(
204
+ path_or_fileobj="meta.json",
205
+ path_in_repo=version_meta_path,
206
+ repo_id=model_repo_id,
207
+ repo_type="model",
208
+ commit_message=f"Upload metadata ({version_tag})"
209
+ )
210
+
211
+ # Also maintain a 'latest/' copy for easy loading
212
+ api.upload_file(
213
+ path_or_fileobj="model.joblib",
214
+ path_in_repo="latest/model.joblib",
215
+ repo_id=model_repo_id,
216
+ repo_type="model",
217
+ commit_message=f"Update latest model ({version_tag})"
218
+ )
219
+ api.upload_file(
220
+ path_or_fileobj="meta.json",
221
+ path_in_repo="latest/meta.json",
222
+ repo_id=model_repo_id,
223
+ repo_type="model",
224
+ commit_message=f"Update latest metadata ({version_tag})"
225
+ )
226
+
227
+ return {
228
+ "version_model_path": version_model_path,
229
+ "version_meta_path": version_meta_path,
230
+ "latest_model_path": "latest/model.joblib",
231
+ "latest_meta_path": "latest/meta.json",
232
+ }
233
 
234
  # ============================================================
235
  # Streamlit UI