tomo2chin2 commited on
Commit
2f1852d
·
verified ·
1 Parent(s): dda177c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -0
app.py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import requests
3
+ import gradio as gr
4
+ from huggingface_hub import HfApi
5
+
6
+ # 環境変数から取得
7
+ HF_TOKEN = os.environ.get("HF_TOKEN", None)
8
+ MODEL_REPO = os.environ.get("MODEL_REPO", None)
9
+ LORA_REPO = os.environ.get("LORA_REPO", None)
10
+
11
+ # HfApiインスタンス生成
12
+ api = HfApi()
13
+
14
+ def download_and_upload(url, repo_type):
15
+ # 入力チェック
16
+ if not url or not repo_type:
17
+ return "URLまたはタイプが未指定です。"
18
+
19
+ # ファイル名をURLから取得する簡易的な処理
20
+ # URLの末尾がファイル名を想定
21
+ filename = url.split("/")[-1]
22
+ if filename == "":
23
+ filename = "downloaded_file"
24
+
25
+ # ファイルダウンロード
26
+ try:
27
+ response = requests.get(url)
28
+ response.raise_for_status() # エラー時例外発生
29
+ except Exception as e:
30
+ return f"ファイルのダウンロードに失敗しました: {e}"
31
+
32
+ # 一時的なローカルファイルに保存
33
+ with open(filename, "wb") as f:
34
+ f.write(response.content)
35
+
36
+ # 選択されたリポジトリを決定
37
+ if repo_type == "model":
38
+ target_repo = MODEL_REPO
39
+ else:
40
+ target_repo = LORA_REPO
41
+
42
+ if not target_repo:
43
+ return f"{repo_type}用リポジトリが設定されていません。"
44
+
45
+ # Hugging Face Hub にアップロード
46
+ try:
47
+ api.upload_file(
48
+ path_or_fileobj=filename,
49
+ path_in_repo=filename, # リポジトリ内でのファイル名
50
+ repo_id=target_repo,
51
+ token=HF_TOKEN,
52
+ repo_type="model", # modelリポジトリとして扱う想定
53
+ commit_message=f"Add {filename} from {url}"
54
+ )
55
+ # 処理が成功したら成功メッセージ
56
+ return f"ファイル '{filename}' を '{target_repo}' にアップロードしました。"
57
+ except Exception as e:
58
+ return f"アップロード中にエラーが発生しました: {e}"
59
+ finally:
60
+ # ローカルに残ったファイルを削除するなどの後処理は必要に応じて
61
+ pass
62
+
63
+ # Gradio UI構築
64
+ with gr.Blocks() as demo:
65
+ gr.Markdown("## ファイルダウンロード&アップロードツール")
66
+ gr.Markdown("URLを指定して、'model'または'lora'リポジトリへアップロードします。")
67
+
68
+ url_input = gr.Textbox(label="ダウンロードファイルURL", placeholder="例: https://example.com/file.bin")
69
+ repo_choice = gr.Radio(choices=["model", "lora"], label="アップロード先タイプの選択", value="model")
70
+ run_button = gr.Button("実行")
71
+ output = gr.Textbox(label="結果メッセージ", interactive=False)
72
+
73
+ run_button.click(download_and_upload, inputs=[url_input, repo_choice], outputs=output)
74
+
75
+ # アプリ起動
76
+ if __name__ == "__main__":
77
+ demo.launch()