File size: 3,723 Bytes
7e1dd21
 
b4c0213
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c2a8871
310a2f8
b4c0213
 
 
 
 
3e75ed6
b4c0213
59695de
 
 
 
 
c2a8871
59695de
 
 
 
 
 
 
 
 
 
 
b4c0213
59695de
 
 
 
dda908e
59695de
 
 
dda908e
59695de
 
 
 
 
 
 
 
d823e4a
 
b4c0213
59695de
 
 
 
 
 
 
 
 
b4c0213
59695de
 
b4c0213
59695de
 
 
 
b4c0213
 
 
59695de
 
b4c0213
 
07ee08f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE html>
<html>
  <head>
    <style>
      body {
        font-family: Arial, sans-serif;
      }
      input, button, progress {
        display: block;
        margin-top: 10px;
      }
      #message {
        margin-top: 20px;
        color: blue;
      }
      #error {
        color: red;
      }
    </style>
  </head>
  <body>
    <label for="tokenInput">Hugging Face Token:</label>
    <input type="password" id="tokenInput" name="tokenInput">
    <label for="repoInput">Repository ID:</label>
    <input type="text" id="repoInput" name="repoInput" placeholder="my-user/nlp-model">
    <input type="file" id="fileUpload" multiple>
    <button id="uploadButton">Upload Files</button>
    <div id="processingMessage"></div>
    <progress id="progressBar" value="0" max="100"></progress>
    <div id="message"></div>
    <div id="error"></div>

    <script type="module">
      import { createRepo, uploadFiles } from "https://cdn.jsdelivr.net/npm/@huggingface/[email protected]/+esm";

      class FileUploader {
        constructor() {
          this.uploadButton = document.getElementById('uploadButton');
          this.uploadButton.addEventListener('click', () => this.upload());
        }

        async upload() {
          const fileInput = document.getElementById('fileUpload');
          const files = Array.from(fileInput.files);
          const tokenInput = document.getElementById('tokenInput');
          const HF_ACCESS_TOKEN = tokenInput.value;
          const repoInput = document.getElementById('repoInput');
          const REPO_ID = repoInput.value;
          const progressBar = document.getElementById('progressBar');
          const messageDiv = document.getElementById('message');
          const errorDiv = document.getElementById('error');
          const processingMessage = document.getElementById('processingMessage');

          progressBar.value = 0;
          messageDiv.textContent = '';
          errorDiv.textContent = '';
          processingMessage.textContent = '';

          if (files.length > 0) {
            const totalSize = files.reduce((total, file) => total + file.size, 0) / (1024 * 1024);
            const startTime = Date.now();

            try {
              await createRepo({ repo: REPO_ID, credentials: { accessToken: HF_ACCESS_TOKEN } });
            } catch (error) {
              if (error.message !== 'You already created this model repo') {
                console.error('Error creating repository', error);
                errorDiv.textContent = 'Error creating repository';
                return;
              }
              console.log('Repository already exists, proceeding to upload files');
            }

            try {
              await uploadFiles({ repo: REPO_ID, credentials: { accessToken: HF_ACCESS_TOKEN }, files: files.map(file => ({ path: file.name, content: file })) });
              console.log('All files uploaded successfully');
              progressBar.value = 100;
            } catch (error) {
              console.error('Error uploading files', error);
              errorDiv.textContent = 'Error uploading files';
              return;
            }

            const elapsedTime = (Date.now() - startTime) / 1000;
            const speed = totalSize / elapsedTime;

            messageDiv.textContent = `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.`;
            processingMessage.textContent = "All files processed";
          } else {
            messageDiv.textContent = 'Please select files to upload';
          }
        }
      }

      new FileUploader();
    </script>
  </body>
</html>