multimodalart HF staff commited on
Commit
dc1be6e
1 Parent(s): 78424dc

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +172 -130
index.html CHANGED
@@ -1,135 +1,177 @@
1
- <script type="module">
2
- import { createRepo, uploadFiles } from "https://cdn.jsdelivr.net/npm/@huggingface/hub@0.8.3/+esm";
3
-
4
- const uploadButton = document.getElementById('uploadButton');
5
- uploadButton.addEventListener('click', upload);
6
-
7
- // Override global fetch
8
- const originalFetch = window.fetch;
9
- let uploadStartTime;
10
- let uploadedBytes = 0;
11
- let totalSize = 0; // Total size of the files
12
-
13
- window.fetch = function(url, init) {
14
- if (typeof url === 'string' && init && init.method === 'PUT') {
15
- uploadStartTime = uploadStartTime || Date.now();
16
- return new Promise((resolve, reject) => {
17
- const xhr = new XMLHttpRequest();
18
- xhr.open(init.method, url);
19
-
20
- for (let header in init.headers) {
21
- xhr.setRequestHeader(header, init.headers[header]);
22
- }
23
-
24
- xhr.onload = () => {
25
- resolve({
26
- ok: xhr.status >= 200 && xhr.status < 300,
27
- status: xhr.status,
28
- statusText: xhr.statusText,
29
- text: () => Promise.resolve(xhr.responseText),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  });
31
- };
32
-
33
- xhr.onerror = () => reject(new TypeError('Network request failed'));
34
- xhr.ontimeout = () => reject(new TypeError('Network request failed due to timeout'));
35
-
36
- xhr.upload.onprogress = (event) => {
37
- if (event.lengthComputable) {
38
- uploadedBytes += event.loaded;
39
- const progress = uploadedBytes / totalSize; // Use the known total size
40
- const progressBar = document.getElementById('progressBar');
41
- progressBar.value = progress * 100;
42
-
43
- const speedDiv = document.getElementById('uploadSpeed');
44
- const elapsedTime = (Date.now() - uploadStartTime) / 1000; // in seconds
45
- const speed = uploadedBytes / elapsedTime; // in bytes per second
46
- speedDiv.textContent = `Upload speed: ${(speed / 1024 / 1024).toFixed(2)} MB/s`;
47
- }
48
- };
49
-
50
- xhr.send(init.body);
51
- });
52
- } else {
53
- return originalFetch(url, init);
54
- }
55
- }
56
-
57
- async function upload() {
58
- const fileInput = document.getElementById('fileUpload');
59
- const files = Array.from(fileInput.files); // convert FileList to Array
60
-
61
- // Calculate total size of the files
62
- totalSize = files.reduce((acc, file) => acc + file.size, 0);
63
-
64
- const tokenInput = document.getElementById('tokenInput');
65
- const HF_ACCESS_TOKEN = tokenInput.value; // get the entered token
66
- const repoInput = document.getElementById('repoInput');
67
- const REPO_ID = repoInput.value; // get the entered repo id
68
- const progressBar = document.getElementById('progressBar');
69
- const messageDiv = document.getElementById('message');
70
- const errorDiv = document.getElementById('error');
71
- const processingMessage = document.getElementById('processingMessage');
72
- progressBar.value = 0; // reset progress bar
73
- messageDiv.textContent = ''; // clear previous messages
74
- errorDiv.textContent = ''; // clear previous errors
75
- processingMessage.textContent = ''; // clear previous processing message
76
-
77
- if (files.length > 0) {
78
- // start time
79
- const startTime = Date.now();
80
-
81
- try {
82
- // Attempt to create the repo
83
- await createRepo({
84
- repo: REPO_ID,
85
- credentials: { accessToken: HF_ACCESS_TOKEN },
86
- });
87
- } catch (error) {
88
- // If the repo already exists, we simply log and continue
89
- if (error.message === 'You already created this model repo') {
90
- console.log('Repository already exists, proceeding to upload files');
91
  } else {
92
- console.error('Error creating repository', error);
93
- errorDiv.textContent = 'Error creating repository';
94
- return; // stop if other errors occur during repository creation
95
  }
96
  }
97
-
98
- try {
99
- // upload files
100
- await uploadFiles({
101
- repo: REPO_ID,
102
- credentials: { accessToken: HF_ACCESS_TOKEN },
103
- files: files.map(file => ({path: file.name, content: file}))
104
- });
105
-
106
- console.log(`All files uploaded successfully`);
107
-
108
- // update progress bar
109
- progressBar.value = 100;
110
- } catch (error) {
111
- console.error('Error uploading files', error);
112
- errorDiv.textContent = 'Error uploading files';
113
- return; // stop uploading further files on error
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  }
115
-
116
- // calculate elapsed time and speed
117
- const elapsedTime = (Date.now() - startTime) / 1000; // in seconds
118
- let speed = uploadedBytes / elapsedTime; // in bytes per second
119
-
120
- // Convert totalSize and speed to MB and MB/s respectively
121
- totalSize = totalSize / (1024 * 1024); // convert to MB
122
- speed = speed / (1024 * 1024); // convert to MB/s
123
-
124
- // Estimate time to upload larger files in minutes
125
- let time1GB = (1024 / speed) / 60;
126
- let time5GB = (5 * 1024 / speed) / 60;
127
- let time10GB = (10 * 1024 / speed) / 60;
128
-
129
- messageDiv.innerHTML = `All files uploaded successfully in ${elapsedTime.toFixed(2)} seconds, for all ${totalSize.toFixed(2)} MB in the ${files.length} files, speed ${speed.toFixed(2)} MB/s.<br>To upload a 1GB model at this speed, it would take approximately ${time1GB.toFixed(2)} minutes.<br>To upload a 5GB model at this speed, it would take approximately ${time5GB.toFixed(2)} minutes.<br>To upload a 10GB model at this speed, it would take approximately ${time10GB.toFixed(2)} minutes.`;
130
- processingMessage.textContent = "All files processed";
131
- } else {
132
- messageDiv.textContent = 'Please select files to upload';
133
- }
134
- }
135
- </script>
 
1
+ !DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <style>
5
+ body {
6
+ font-family: Arial, sans-serif;
7
+ }
8
+ input, button, progress {
9
+ display: block;
10
+ margin-top: 10px;
11
+ }
12
+ #message {
13
+ margin-top: 20px;
14
+ color: blue;
15
+ }
16
+ #error {
17
+ color: red;
18
+ }
19
+ </style>
20
+ </head>
21
+ <body>
22
+ <label for="tokenInput">Hugging Face Token:</label>
23
+ <input type="password" id="tokenInput" name="tokenInput">
24
+ <label for="repoInput">Repository ID:</label>
25
+ <input type="text" id="repoInput" name="repoInput" placeholder="my-user/nlp-model">
26
+ <input type="file" id="fileUpload" multiple>
27
+ <button id="uploadButton">Upload Files</button>
28
+ <div id="processingMessage"></div>
29
+ <div style="display:flex"><progress id="progressBar" value="0" max="100"></progress><div id="uploadSpeed"></div></div>
30
+ <div id="message"></div>
31
+ <div id="error"></div>
32
+ <script type="module">
33
+ import { createRepo, uploadFiles } from "https://cdn.jsdelivr.net/npm/@huggingface/hub@0.8.3/+esm";
34
+
35
+ const uploadButton = document.getElementById('uploadButton');
36
+ uploadButton.addEventListener('click', upload);
37
+
38
+ // Override global fetch
39
+ const originalFetch = window.fetch;
40
+ let uploadStartTime;
41
+ let uploadedBytes = 0;
42
+ let totalSize = 0; // Total size of the files
43
+ let uploadFinished = false;
44
+
45
+ window.fetch = function(url, init) {
46
+ if (typeof url === 'string' && init && init.method === 'PUT') {
47
+ uploadStartTime = uploadStartTime || Date.now();
48
+ return new Promise((resolve, reject) => {
49
+ const xhr = new XMLHttpRequest();
50
+ xhr.open(init.method, url);
51
+
52
+ for (let header in init.headers) {
53
+ xhr.setRequestHeader(header, init.headers[header]);
54
+ }
55
+
56
+ xhr.onload = () => {
57
+ resolve({
58
+ ok: xhr.status >= 200 && xhr.status < 300,
59
+ status: xhr.status,
60
+ statusText: xhr.statusText,
61
+ text: () => Promise.resolve(xhr.responseText),
62
+ });
63
+ };
64
+
65
+ xhr.onerror = () => reject(new TypeError('Network request failed'));
66
+ xhr.ontimeout = () => reject(new TypeError('Network request failed due to timeout'));
67
+
68
+ xhr.upload.onprogress = (event) => {
69
+ if (event.lengthComputable) {
70
+ uploadedBytes += event.loaded;
71
+ const progress = uploadedBytes / totalSize; // Use the known total size
72
+ const progressBar = document.getElementById('progressBar');
73
+ progressBar.value = progress * 100;
74
+
75
+ const speedDiv = document.getElementById('uploadSpeed');
76
+ const processingMessage = document.getElementById('processingMessage');
77
+
78
+ if (progress < 1) { // If upload is not yet finished
79
+ const elapsedTime = (Date.now() - uploadStartTime) / 1000; // in seconds
80
+ const speed = uploadedBytes / elapsedTime; // in bytes per second
81
+ speedDiv.textContent = `Upload speed: ${(speed / 1024 / 1024).toFixed(2)} MB/s`;
82
+ } else if (!uploadFinished) { // If upload just finished
83
+ uploadFinished = true;
84
+ speedDiv.textContent = '';
85
+ processingMessage.textContent = "Processing your upload...";
86
+ }
87
+ }
88
+ };
89
+
90
+ xhr.send(init.body);
91
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  } else {
93
+ return originalFetch(url, init);
 
 
94
  }
95
  }
96
+
97
+ async function upload() {
98
+ const fileInput = document.getElementById('fileUpload');
99
+ const files = Array.from(fileInput.files); // convert FileList to Array
100
+
101
+ // Calculate total size of the files
102
+ totalSize = files.reduce((acc, file) => acc + file.size, 0);
103
+
104
+ const tokenInput = document.getElementById('tokenInput');
105
+ const HF_ACCESS_TOKEN = tokenInput.value; // get the entered token
106
+ const repoInput = document.getElementById('repoInput');
107
+ const REPO_ID = repoInput.value; // get the entered repo id
108
+ const progressBar = document.getElementById('progressBar');
109
+ const messageDiv = document.getElementById('message');
110
+ const errorDiv = document.getElementById('error');
111
+ const processingMessage = document.getElementById('processingMessage');
112
+ progressBar.value = 0; // reset progress bar
113
+ messageDiv.textContent = ''; // clear previous messages
114
+ errorDiv.textContent = ''; // clear previous errors
115
+ processingMessage.textContent = ''; // clear previous processing message
116
+
117
+ if (files.length > 0) {
118
+ // start time
119
+ const startTime = Date.now();
120
+
121
+ try {
122
+ // Attempt to create the repo
123
+ await createRepo({
124
+ repo: REPO_ID,
125
+ credentials: { accessToken: HF_ACCESS_TOKEN },
126
+ });
127
+ } catch (error) {
128
+ // If the repo already exists, we simply log and continue
129
+ if (error.message === 'You already created this model repo') {
130
+ console.log('Repository already exists, proceeding to upload files');
131
+ } else {
132
+ console.error('Error creating repository', error);
133
+ errorDiv.textContent = 'Error creating repository';
134
+ return; // stop if other errors occur during repository creation
135
+ }
136
+ }
137
+
138
+ try {
139
+ // upload files
140
+ await uploadFiles({
141
+ repo: REPO_ID,
142
+ credentials: { accessToken: HF_ACCESS_TOKEN },
143
+ files: files.map(file => ({path: file.name, content: file}))
144
+ });
145
+
146
+ console.log(`All files uploaded successfully`);
147
+
148
+ // update progress bar
149
+ progressBar.value = 100;
150
+ } catch (error) {
151
+ console.error('Error uploading files', error);
152
+ errorDiv.textContent = 'Error uploading files';
153
+ return; // stop uploading further files on error
154
+ }
155
+
156
+ // calculate elapsed time and speed
157
+ const elapsedTime = (Date.now() - startTime) / 1000; // in seconds
158
+ let speed = uploadedBytes / elapsedTime; // in bytes per second
159
+
160
+ // Convert totalSize and speed to MB and MB/s respectively
161
+ totalSize = totalSize / (1024 * 1024); // convert to MB
162
+ speed = speed / (1024 * 1024); // convert to MB/s
163
+
164
+ // Estimate time to upload larger files in minutes
165
+ let time1GB = (1024 / speed) / 60;
166
+ let time5GB = (5 * 1024 / speed) / 60;
167
+ let time10GB = (10 * 1024 / speed) / 60;
168
+
169
+ messageDiv.innerHTML = `All files uploaded successfully in ${elapsedTime.toFixed(2)} seconds, for all ${totalSize.toFixed(2)} MB in the ${files.length} files, speed ${speed.toFixed(2)} MB/s.<br>To upload a 1GB model at this speed, it would take approximately ${time1GB.toFixed(2)} minutes.<br>To upload a 5GB model at this speed, it would take approximately ${time5GB.toFixed(2)} minutes.<br>To upload a 10GB model at this speed, it would take approximately ${time10GB.toFixed(2)} minutes.`;
170
+ processingMessage.textContent = "All files processed";
171
+ } else {
172
+ messageDiv.textContent = 'Please select files to upload';
173
+ }
174
  }
175
+ </script>
176
+ </body>
177
+ </html>