Hjgugugjhuhjggg commited on
Commit
8303e85
·
verified ·
1 Parent(s): 43f235c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -22
app.py CHANGED
@@ -4,7 +4,7 @@ import random
4
  import string
5
  import tempfile
6
  import time
7
- from concurrent.futures import ThreadPoolExecutor
8
  from typing import Iterable, List
9
 
10
  import gradio as gr
@@ -14,7 +14,6 @@ import yaml
14
  from gradio_logsview.logsview import Log, LogsView, LogsViewRunner
15
  from mergekit.config import MergeConfiguration
16
  from clean_community_org import garbage_collect_empty_models
17
- import spaces
18
 
19
  has_gpu = torch.cuda.is_available()
20
 
@@ -62,18 +61,19 @@ If you use it in your research, please cite the following paper:
62
  year={2024}
63
  }
64
  This Space is heavily inspired by LazyMergeKit by Maxime Labonne (see [Colab](https://colab.research.google.com/drive/1obulZ1ROXHjYLn6PPZJwRR6GzgQogxxb)).
 
65
  """
66
 
67
  examples = [[str(f)] for f in pathlib.Path("examples").glob("*.yaml")]
68
  COMMUNITY_HF_TOKEN = os.getenv("COMMUNITY_HF_TOKEN")
69
 
70
-
71
  def merge(yaml_config, hf_token, repo_name, profile_name):
72
  runner = LogsViewRunner()
73
 
74
  if not yaml_config:
75
  yield runner.log("Empty yaml, pick an example below", level="ERROR")
76
  return
 
77
  try:
78
  merge_config = MergeConfiguration.model_validate(yaml.safe_load(yaml_config))
79
  except Exception as e:
@@ -83,10 +83,7 @@ def merge(yaml_config, hf_token, repo_name, profile_name):
83
  is_community_model = False
84
  if not hf_token:
85
  if "/" in repo_name and not repo_name.startswith("mergekit-community/"):
86
- yield runner.log(
87
- f"Cannot upload merge model to namespace {repo_name.split('/')[0]}: you must provide a valid token.",
88
- level="ERROR",
89
- )
90
  return
91
  yield runner.log("No HF token provided. Your merged model will be uploaded to the https://huggingface.co/mergekit-community organization.")
92
  is_community_model = True
@@ -132,11 +129,7 @@ def merge(yaml_config, hf_token, repo_name, profile_name):
132
  return
133
 
134
  yield runner.log("Model merged successfully. Uploading to HF.")
135
- yield from runner.run_python(
136
- api.upload_folder,
137
- repo_id=repo_url.repo_id,
138
- folder_path=merged_path / "merge",
139
- )
140
  yield runner.log(f"Model successfully uploaded to HF: {repo_url.repo_id}")
141
 
142
 
@@ -158,22 +151,25 @@ with gr.Blocks() as demo:
158
  button.click(fn=merge, inputs=[config, token, repo_name, profile_name], outputs=[logs])
159
 
160
 
161
- def _garbage_collect_every_hour():
162
- while True:
163
- try:
164
- garbage_collect_empty_models(token=COMMUNITY_HF_TOKEN)
165
- except Exception as e:
166
- print("Error running garbage collection", e)
167
- time.sleep(3600)
168
 
169
 
170
- pool = ThreadPoolExecutor()
171
- pool.submit(_garbage_collect_every_hour)
 
 
172
 
173
 
174
  @spaces.GPU
175
  def launch():
176
- demo.queue(default_concurrency_limit=2).launch(share=True)
 
 
 
177
 
178
 
179
  if __name__ == "__main__":
 
4
  import string
5
  import tempfile
6
  import time
7
+ from concurrent.futures import ThreadPoolExecutor, as_completed
8
  from typing import Iterable, List
9
 
10
  import gradio as gr
 
14
  from gradio_logsview.logsview import Log, LogsView, LogsViewRunner
15
  from mergekit.config import MergeConfiguration
16
  from clean_community_org import garbage_collect_empty_models
 
17
 
18
  has_gpu = torch.cuda.is_available()
19
 
 
61
  year={2024}
62
  }
63
  This Space is heavily inspired by LazyMergeKit by Maxime Labonne (see [Colab](https://colab.research.google.com/drive/1obulZ1ROXHjYLn6PPZJwRR6GzgQogxxb)).
64
+
65
  """
66
 
67
  examples = [[str(f)] for f in pathlib.Path("examples").glob("*.yaml")]
68
  COMMUNITY_HF_TOKEN = os.getenv("COMMUNITY_HF_TOKEN")
69
 
 
70
  def merge(yaml_config, hf_token, repo_name, profile_name):
71
  runner = LogsViewRunner()
72
 
73
  if not yaml_config:
74
  yield runner.log("Empty yaml, pick an example below", level="ERROR")
75
  return
76
+
77
  try:
78
  merge_config = MergeConfiguration.model_validate(yaml.safe_load(yaml_config))
79
  except Exception as e:
 
83
  is_community_model = False
84
  if not hf_token:
85
  if "/" in repo_name and not repo_name.startswith("mergekit-community/"):
86
+ yield runner.log(f"Cannot upload merge model to namespace {repo_name.split('/')[0]}: you must provide a valid token.", level="ERROR")
 
 
 
87
  return
88
  yield runner.log("No HF token provided. Your merged model will be uploaded to the https://huggingface.co/mergekit-community organization.")
89
  is_community_model = True
 
129
  return
130
 
131
  yield runner.log("Model merged successfully. Uploading to HF.")
132
+ yield from runner.run_python(api.upload_folder, repo_id=repo_url.repo_id, folder_path=merged_path / "merge")
 
 
 
 
133
  yield runner.log(f"Model successfully uploaded to HF: {repo_url.repo_id}")
134
 
135
 
 
151
  button.click(fn=merge, inputs=[config, token, repo_name, profile_name], outputs=[logs])
152
 
153
 
154
+ def garbage_collect():
155
+ try:
156
+ garbage_collect_empty_models(token=COMMUNITY_HF_TOKEN)
157
+ except Exception as e:
158
+ print(f"Error running garbage collection: {e}")
 
 
159
 
160
 
161
+ def schedule_garbage_collection(interval_seconds=3600):
162
+ while True:
163
+ time.sleep(interval_seconds)
164
+ garbage_collect()
165
 
166
 
167
  @spaces.GPU
168
  def launch():
169
+ pool = ThreadPoolExecutor(max_workers=1)
170
+ pool.submit(schedule_garbage_collection)
171
+
172
+ demo.launch(share=True)
173
 
174
 
175
  if __name__ == "__main__":