summaryrefslogtreecommitdiff
path: root/app/client/modules/samplernn/samplernn.actions.js
blob: b9789c790370e0e0f844797b31d509f0540ea339 (plain)
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import socket from '../../socket'
import types from '../../types'

import actions from '../../actions'

export const load_directories = () => (dispatch) => {
  // console.log(actions)
  Promise.all([
    actions.folder.index({ module: 'samplernn' }),
    actions.file.index({ module: 'samplernn' }),
    actions.task.index({ module: 'samplernn' }),
    actions.socket.list_directory({ module: 'samplernn', dir: 'results' }),
    actions.socket.list_directory({ module: 'samplernn', dir: 'datasets' }),
    actions.socket.run_script({ module: 'samplernn', activity: 'report' })
  ]).then(res => {
    const [folders, files, tasks, results, datasets, report] = res

    const folderLookup = folders.reduce((folderLookup, folder) => {
      folderLookup[folder.id] = folder
      folder.files = []
      folder.results = []
      return folderLookup
    }, {
      'unsorted': {
        id: 0,
        name: 'unsorted',
        files: [],
        results: [],
      }
    })

    const processedFiles = files.filter(file => file.processed)
    const unprocessedFiles = files.filter(file => !file.processed)
    const fileLookup = unprocessedFiles.reduce((fileLookup, file) => {
      file.checkpoints = []
      if (! file.name) {
        file.name = (file.opt || {}).token || 'unloaded'
        // fileLookup[(file.name || 'unsorted').split('.')[0]] = file
      } else {
        fileLookup[(file.name).split('.')[0]] = file
      }
      folderLookup[file.folder_id] && folderLookup[file.folder_id].files.push(file)
      return fileLookup
    }, {
      unsorted: {
        checkpoints: [],
        results: [],
      }
    })
    processedFiles.map(result => {
      const pair = result.name.split('.')[0].split('-')
      const file = fileLookup[pair[0]]
      if (file) {
        file.results.push(result)
      } else {
        folderLookup[file.folder_id] && folderLookup[file.folder_id].results.push(file)
      }
      result.epoch = result.epoch || pair[1]
    })
    folderLookup.unsorted.files.push(fileLookup.unsorted)

    // console.log(datasets)
    // const flatDatasets = datasets.filter(s => s.name.match(/(wav|aiff?|flac|mp3)$/) && !s.dir)
    const builtDatasets = datasets.filter(s => s.dir)
    builtDatasets.forEach(dataset => {
      const file = fileLookup[dataset.name] || fileLookup.unsorted
      file.hasDataset = true
    })

    // exp:coccokit_3-frame_sizes:8,2-n_rnn:2-dataset:coccokit_3
    const checkpoints = results.filter(s => s.dir).map(s => {
      const checkpoint = s.name.split('-').map(s => s.split(':')).reduce((a,b) => (a[b[0]] = b[1])&&a, {})
      checkpoint.dir = s
      const file = fileLookup[checkpoint.dataset] || fileLookup.unsorted
      file.checkpoints.push(checkpoint)
      return checkpoint
    })

    // console.log(folders.length, files.length, tasks.length, results.length, datasets.length)
    // console.log(report)
    report.stdout.split('\n\n').filter(a=>!!a).forEach(data => {
      const [ name, ...lines ] = data.split('\n')
      const file = fileLookup[name] || fileLookup.unsorted
      file.log = lines.map(s => s.split('\t')).map(s => s.split(': ')).reduce((a,b) => (a[b[0]] = b[1])&&a, {})
    })

    dispatch({
      type: types.samplernn.init,
      data: {
        folderLookup,
        // folders, files,
        // checkpoints,
        // builtDatasets,
        // flatDatasets,
        // report
      },
    })
    dispatch({
      type: types.samplernn.set_folder,
      folder: folders[0].name,
    })
  })
}

export const set_folder = (folder) => { types.samplernn.set_folder, folder }

export const fetch_url = (url) => (dispatch) => {
  console.log(url)
  actions.task.start_task({
    activity: 'fetch',
    module: 'samplernn',
    dataset: 'test',
    epochs: 1,
    opt: { url }
  }, { preempt: true, watch: true })
}