tomo2chin2 commited on
Commit
9e57a76
·
verified ·
1 Parent(s): 029a665

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -25
app.py CHANGED
@@ -3,18 +3,18 @@ import json
3
  import re
4
  import requests
5
  import gradio as gr
6
- from huggingface_hub import HfApi, hf_hub_download
7
 
8
  # 環境変数から取得
9
  HF_TOKEN = os.environ.get("HF_TOKEN", None)
10
- MODEL_REPO = os.environ.get("MODEL_REPO", None)
11
  LORA_REPO = os.environ.get("LORA_REPO", None)
12
  CIVITAI_TOKEN = os.environ.get("CIVITAI_TOKEN", None) # Civitai用トークン
13
 
14
  api = HfApi()
15
 
16
- def download_and_upload(model_id, repo_type):
17
- print(f"モデルID: {model_id}, リポジトリタイプ: {repo_type}")
18
  if not model_id or not repo_type:
19
  return "モデルIDまたはタイプが未指定です。"
20
 
@@ -64,17 +64,42 @@ def download_and_upload(model_id, repo_type):
64
  print(f"ファイルを保存しました: {filename}")
65
 
66
  if repo_type == "model":
67
- target_repo = MODEL_REPO
 
 
 
 
 
 
68
  else:
69
  target_repo = LORA_REPO
 
70
 
71
  if not target_repo:
72
  return f"{repo_type}用リポジトリが環境変数で設定されていません。"
73
 
74
- # リポジトリ内のファイル一覧を取得
75
  try:
76
- repo_files = api.list_repo_files(repo_id=target_repo, repo_type="dataset", token=HF_TOKEN)
77
- print(f"リポジトリ内のファイル一覧を取得しました。")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  except Exception as e:
79
  print(f"リポジトリ内のファイル一覧の取得に失敗しました: {e}")
80
  return f"リポジトリ内のファイル一覧の取得に失敗しました: {e}"
@@ -87,17 +112,24 @@ def download_and_upload(model_id, repo_type):
87
  metadata_file = hf_hub_download(
88
  repo_id=target_repo,
89
  filename=metadata_filename,
90
- repo_type="dataset",
91
  token=HF_TOKEN,
92
  force_download=True
93
  )
94
  with open(metadata_file, 'r', encoding='utf-8') as f:
95
  metadata = json.load(f)
96
  print("既存のメタデータを読み込みました。")
97
- except Exception as e:
 
 
 
 
98
  # メタデータファイルが存在しない場合は新規作成
99
  metadata = []
100
  print("メタデータファイルが存在しないため、新規作成します。")
 
 
 
101
 
102
  # メタデータを更新(存在しないファイルを削除)
103
  updated_metadata = []
@@ -142,7 +174,7 @@ def download_and_upload(model_id, repo_type):
142
  path_in_repo=filename,
143
  repo_id=target_repo,
144
  token=HF_TOKEN,
145
- repo_type="dataset",
146
  commit_message=f"Add {filename} from model ID {model_id}"
147
  )
148
 
@@ -152,7 +184,7 @@ def download_and_upload(model_id, repo_type):
152
  path_in_repo=metadata_filename,
153
  repo_id=target_repo,
154
  token=HF_TOKEN,
155
- repo_type="dataset",
156
  commit_message="Update metadata"
157
  )
158
  print(f"ファイルとメタデータをアップロードしました。")
@@ -166,22 +198,47 @@ with gr.Blocks() as demo:
166
  gr.Markdown("## CivitaiモデルIDからファイルダウンロード&アップロードツール")
167
  gr.Markdown("CivitaiのモデルIDを指定して、'model'または'lora'リポジトリへアップロードします。")
168
 
169
- # ダウンロード&アップロード機能
170
- model_id_input = gr.Textbox(
171
- label="CivitaiモデルID",
172
- placeholder="例: 1102"
173
- )
174
- repo_choice = gr.Radio(
175
- choices=["model", "lora"],
176
- label="アップロード先タイプの選択",
177
- value="model"
178
- )
179
- run_button = gr.Button("実行")
180
- output = gr.Textbox(label="結果メッセージ", interactive=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
 
182
  run_button.click(
183
  download_and_upload,
184
- inputs=[model_id_input, repo_choice],
185
  outputs=output
186
  )
187
 
 
3
  import re
4
  import requests
5
  import gradio as gr
6
+ from huggingface_hub import HfApi, hf_hub_download, RepositoryNotFoundError
7
 
8
  # 環境変数から取得
9
  HF_TOKEN = os.environ.get("HF_TOKEN", None)
10
+ MODEL_REPO_USERNAME = os.environ.get("MODEL_REPO", None) # ユーザー名を想定
11
  LORA_REPO = os.environ.get("LORA_REPO", None)
12
  CIVITAI_TOKEN = os.environ.get("CIVITAI_TOKEN", None) # Civitai用トークン
13
 
14
  api = HfApi()
15
 
16
+ def download_and_upload(model_id, repo_type, model_name=None):
17
+ print(f"モデルID: {model_id}, リポジトリタイプ: {repo_type}, モデル名: {model_name}")
18
  if not model_id or not repo_type:
19
  return "モデルIDまたはタイプが未指定です。"
20
 
 
64
  print(f"ファイルを保存しました: {filename}")
65
 
66
  if repo_type == "model":
67
+ if not MODEL_REPO_USERNAME:
68
+ return "MODEL_REPO環境変数にユーザー名が設定されていません。"
69
+ if not model_name:
70
+ return "モデル名が未指定です。"
71
+
72
+ target_repo = f"{MODEL_REPO_USERNAME}/{model_name}"
73
+ repo_api_type = "model"
74
  else:
75
  target_repo = LORA_REPO
76
+ repo_api_type = "dataset"
77
 
78
  if not target_repo:
79
  return f"{repo_type}用リポジトリが環境変数で設定されていません。"
80
 
81
+ # リポジトリが存在するか確認、存在しない場合は作成
82
  try:
83
+ repo_files = api.list_repo_files(repo_id=target_repo, repo_type=repo_api_type, token=HF_TOKEN)
84
+ print(f"リポジトリ '{target_repo}' が存在しま。")
85
+ except RepositoryNotFoundError:
86
+ if repo_type == "model":
87
+ try:
88
+ api.create_repo(
89
+ name=model_name,
90
+ token=HF_TOKEN,
91
+ repo_type=repo_api_type,
92
+ exist_ok=True
93
+ )
94
+ print(f"リポジトリ '{target_repo}' を新規作成しました。")
95
+ repo_files = []
96
+ except Exception as e:
97
+ print(f"リポジトリの作成に失敗しました: {e}")
98
+ return f"リポジトリの作成に失敗しました: {e}"
99
+ else:
100
+ print(f"リポジトリ '{target_repo}' が存在しません。")
101
+ return f"リポジトリ '{target_repo}' が存在しません。"
102
+
103
  except Exception as e:
104
  print(f"リポジトリ内のファイル一覧の取得に失敗しました: {e}")
105
  return f"リポジトリ内のファイル一覧の取得に失敗しました: {e}"
 
112
  metadata_file = hf_hub_download(
113
  repo_id=target_repo,
114
  filename=metadata_filename,
115
+ repo_type=repo_api_type,
116
  token=HF_TOKEN,
117
  force_download=True
118
  )
119
  with open(metadata_file, 'r', encoding='utf-8') as f:
120
  metadata = json.load(f)
121
  print("既存のメタデータを読み込みました。")
122
+ except RepositoryNotFoundError:
123
+ # リポジトリ自体が存在しない場合は既に処理済み
124
+ metadata = []
125
+ print("メタデータファイルが存在しないため、新規作成します。")
126
+ except FileNotFoundError:
127
  # メタデータファイルが存在しない場合は新規作成
128
  metadata = []
129
  print("メタデータファイルが存在しないため、新規作成します。")
130
+ except Exception as e:
131
+ print(f"メタデータの読み込みに失敗しました: {e}")
132
+ return f"メタデータの読み込みに失敗しました: {e}"
133
 
134
  # メタデータを更新(存在しないファイルを削除)
135
  updated_metadata = []
 
174
  path_in_repo=filename,
175
  repo_id=target_repo,
176
  token=HF_TOKEN,
177
+ repo_type=repo_api_type,
178
  commit_message=f"Add {filename} from model ID {model_id}"
179
  )
180
 
 
184
  path_in_repo=metadata_filename,
185
  repo_id=target_repo,
186
  token=HF_TOKEN,
187
+ repo_type=repo_api_type,
188
  commit_message="Update metadata"
189
  )
190
  print(f"ファイルとメタデータをアップロードしました。")
 
198
  gr.Markdown("## CivitaiモデルIDからファイルダウンロード&アップロードツール")
199
  gr.Markdown("CivitaiのモデルIDを指定して、'model'または'lora'リポジトリへアップロードします。")
200
 
201
+ with gr.Row():
202
+ model_id_input = gr.Textbox(
203
+ label="CivitaiモデルID",
204
+ placeholder="例: 1102",
205
+ lines=1
206
+ )
207
+
208
+ with gr.Row():
209
+ repo_choice = gr.Radio(
210
+ choices=["model", "lora"],
211
+ label="アップロード先タイプの選択",
212
+ value="model",
213
+ interactive=True
214
+ )
215
+
216
+ with gr.Row():
217
+ model_name_input = gr.Textbox(
218
+ label="モデル名",
219
+ placeholder="例: my-awesome-model",
220
+ visible=True,
221
+ lines=1
222
+ )
223
+
224
+ with gr.Row():
225
+ run_button = gr.Button("実行")
226
+
227
+ with gr.Row():
228
+ output = gr.Textbox(label="結果メッセージ", interactive=False, lines=2)
229
+
230
+ # リポジトリタイプの選択に応じてモデル名入力を表示/非表示
231
+ def toggle_model_name(repo_type):
232
+ if repo_type == "model":
233
+ return gr.update(visible=True)
234
+ else:
235
+ return gr.update(visible=False)
236
+
237
+ repo_choice.change(toggle_model_name, inputs=repo_choice, outputs=model_name_input)
238
 
239
  run_button.click(
240
  download_and_upload,
241
+ inputs=[model_id_input, repo_choice, model_name_input],
242
  outputs=output
243
  )
244