lhoestq HF Staff commited on
Commit
af91d08
·
1 Parent(s): 8b00326

implement list jobs

Browse files
Files changed (1) hide show
  1. start_app.py +33 -5
start_app.py CHANGED
@@ -6,6 +6,7 @@ import time
6
  import yaml
7
 
8
  import gradio as gr
 
9
  import requests
10
  from huggingface_hub import HfApi, get_token
11
 
@@ -50,7 +51,7 @@ def dry_run(src, config, split, dst, query):
50
  args = ["--src", src, "--config", config, "--split", split, "--dst", dst, "--query", query, DRY_RUN]
51
  cmd = CMD + args
52
  logs = "Job:\n\n```bash\n" + " ".join('"' + arg.replace('"', '\"""') + '"' if " " in arg else arg for arg in cmd) + "\n```\nOutput:\n\n"
53
- yield {output_markdown: logs, progress_labels: gr.Label(visible=False)}
54
  process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
55
  for line in iter(process.stdout.readline, b""):
56
  logs += line.decode()
@@ -114,6 +115,7 @@ def run(src, config, split, dst, query, oauth_token: gr.OAuthToken | None, profi
114
  pbars = {"Finished with an error ❌": 1.0}
115
  yield {output_markdown: logs, progress_labels: gr.Label(pbars, visible=bool(pbars))}
116
 
 
117
  READ_FUNCTIONS = ("pl.read_parquet", "pl.read_csv", "pl.read_json")
118
  NUM_TRENDING_DATASETS = 10
119
 
@@ -140,11 +142,11 @@ with gr.Blocks() as demo:
140
  if DRY_RUN:
141
  dry_run_button = gr.Button("Dry-Run")
142
  progress_labels= gr.Label(visible=False, label="Progress")
143
- with gr.Accordion("Details", open=False):
144
  output_markdown = gr.Markdown(label="Output logs")
145
- run_button.click(run, inputs=[dataset_dropdown, subset_dropdown, split_dropdown, dst_dropdown, query_textarea], outputs=[progress_labels, output_markdown])
146
  if DRY_RUN:
147
- dry_run_button.click(dry_run, inputs=[dataset_dropdown, subset_dropdown, split_dropdown, dst_dropdown, query_textarea], outputs=[progress_labels, output_markdown])
148
 
149
  def show_subset_dropdown(dataset: str):
150
  if dataset and "/" not in dataset.strip().strip("/"):
@@ -193,8 +195,34 @@ if HELP:
193
  with demo.route("Help", "/help"):
194
  gr.Markdown(f"# Help\n\n```\n{HELP}\n```")
195
 
196
- with demo.route("Jobs", "/jobs"):
197
  gr.Markdown("# Jobs")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
 
199
  if __name__ == "__main__":
200
  demo.launch(server_name="0.0.0.0")
 
6
  import yaml
7
 
8
  import gradio as gr
9
+ import pandas as pd
10
  import requests
11
  from huggingface_hub import HfApi, get_token
12
 
 
51
  args = ["--src", src, "--config", config, "--split", split, "--dst", dst, "--query", query, DRY_RUN]
52
  cmd = CMD + args
53
  logs = "Job:\n\n```bash\n" + " ".join('"' + arg.replace('"', '\"""') + '"' if " " in arg else arg for arg in cmd) + "\n```\nOutput:\n\n"
54
+ yield {output_markdown: logs, progress_labels: gr.Label(visible=False), details_accordion: gr.Accordion(open=True)}
55
  process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
56
  for line in iter(process.stdout.readline, b""):
57
  logs += line.decode()
 
115
  pbars = {"Finished with an error ❌": 1.0}
116
  yield {output_markdown: logs, progress_labels: gr.Label(pbars, visible=bool(pbars))}
117
 
118
+
119
  READ_FUNCTIONS = ("pl.read_parquet", "pl.read_csv", "pl.read_json")
120
  NUM_TRENDING_DATASETS = 10
121
 
 
142
  if DRY_RUN:
143
  dry_run_button = gr.Button("Dry-Run")
144
  progress_labels= gr.Label(visible=False, label="Progress")
145
+ with gr.Accordion("Details", open=False) as details_accordion:
146
  output_markdown = gr.Markdown(label="Output logs")
147
+ run_button.click(run, inputs=[dataset_dropdown, subset_dropdown, split_dropdown, dst_dropdown, query_textarea], outputs=[details_accordion, progress_labels, output_markdown])
148
  if DRY_RUN:
149
+ dry_run_button.click(dry_run, inputs=[dataset_dropdown, subset_dropdown, split_dropdown, dst_dropdown, query_textarea], outputs=[details_accordion, progress_labels, output_markdown])
150
 
151
  def show_subset_dropdown(dataset: str):
152
  if dataset and "/" not in dataset.strip().strip("/"):
 
195
  with demo.route("Help", "/help"):
196
  gr.Markdown(f"# Help\n\n```\n{HELP}\n```")
197
 
198
+ with demo.route("Jobs", "/jobs") as page:
199
  gr.Markdown("# Jobs")
200
+ jobs_dataframe = gr.DataFrame()
201
+
202
+ @page.load(outputs=[jobs_dataframe])
203
+ def list_jobs(oauth_token: gr.OAuthToken | None, profile: gr.OAuthProfile | None):
204
+ if oauth_token and profile:
205
+ token = oauth_token.token
206
+ username = profile.username
207
+ elif (token := get_token()):
208
+ username = HfApi().whoami(token=token)["name"]
209
+ else:
210
+ return pd.DataFrame({"Log in to see jobs": []})
211
+ resp = requests.get(
212
+ f"https://huggingface.co/api/jobs/{username}",
213
+ headers={"Authorization": f"Bearer {token}"}
214
+ )
215
+ return pd.DataFrame([
216
+ {
217
+ "id": job["metadata"]["id"],
218
+ "created_at": job["metadata"]["created_at"],
219
+ "stage": job["compute"]["status"]["stage"],
220
+ "command": str(job["compute"]["spec"]["extra"]["command"]),
221
+ "args": str(job["compute"]["spec"]["extra"]["args"]),
222
+ }
223
+ for job in resp.json()
224
+ if job["compute"]["spec"]["extra"]["input"]["spaceId"] == spaceId
225
+ ])
226
 
227
  if __name__ == "__main__":
228
  demo.launch(server_name="0.0.0.0")