Skip to content

Commit 7f234d7

Browse files
committed
2 parents aa34d06 + aab81ea commit 7f234d7

2 files changed

Lines changed: 154 additions & 21 deletions

File tree

services/language_translation/v2.html

Lines changed: 75 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,24 @@
3333
<input type="password" id="node-input-password" placeholder="Password">
3434
</div>
3535
<div class="form-row">
36-
<label for="node-input-action"><i class="fa fa-cog"></i> Action</label>
36+
<label for="node-input-action"><i class="fa fa-cog"></i> Mode</label>
3737
<select type="text" id="node-input-action" style="display: inline-block; vertical-align:middle; width: 70%;">
3838
<option value="translate" selected="selected">Translate</option>
3939
<option value="train">Train</option>
40+
<option value="getstatus">Get status</option>
41+
<option value="delete">Delete</option>
4042
</select>
4143
</div>
4244
<div class="form-row">
4345
<label for="node-input-domain"><i class="fa fa-book"></i> Domains</label>
4446
<select type="text" id="node-input-domain" style="display: inline-block; vertical-align:middle; width: 70%;">
4547
</select>
4648
</div>
49+
<div class="form-row">
50+
<label for="node-input-basemodel"><i class="fa fa-book"></i> Base model</label>
51+
<select type="text" id="node-input-basemodel" style="display: inline-block; vertical-align:middle; width: 70%;">
52+
</select>
53+
</div>
4754
<div class="form-row">
4855
<label for="node-input-srclang"><i class="fa fa-comments-o"></i> Source</label>
4956
<select type="text" id="node-input-srclang" style="display: inline-block; vertical-align:middle; width: 70%;">
@@ -62,6 +69,10 @@
6269
<option value="monolingualcorpus">Monolingual corpus</option>
6370
</select>
6471
</div>
72+
<div class="form-row">
73+
<label for="node-input-trainid"><i class="fa fa-tag"></i> ID</label>
74+
<input type="text" id="node-input-trainid" placeholder="ID">
75+
</div>
6576
</script>
6677

6778
<script type="text/x-red" data-help-name="watson-translate">
@@ -83,6 +94,7 @@
8394
var srclang_selected = $('#node-input-srclang').val();
8495
var destlang_selected = $('#node-input-destlang').val();
8596
var action = $('#node-input-action').val();
97+
var base_model_selected = $('#node-input-basemodel').val();
8698

8799
(function () {
88100
// sorting functions
@@ -101,6 +113,11 @@
101113
selectDomain();
102114
});
103115

116+
$('#node-input-basemodel').change(function (val) {
117+
base_model_selected = $('#node-input-basemodel').val();
118+
basemodelsAvailable();
119+
})
120+
104121
// check availability
105122
$('#node-input-srclang').change(function () {
106123
srclang_selected = $('#node-input-srclang').val();
@@ -115,27 +132,64 @@
115132

116133
function selectAction() {
117134
action = $('#node-input-action').val();
118-
if (action === 'train') {
119-
$('select#node-input-srclang, select#node-input-destlang').parent().hide();
120-
$('select#node-input-filetype').parent().show();
121-
} else {
122-
$('select#node-input-srclang, select#node-input-destlang').parent().show();
123-
$('select#node-input-filetype').parent().hide();
135+
switch (action) {
136+
case 'train':
137+
$('select#node-input-srclang, select#node-input-destlang, #node-input-trainid, select#node-input-domain').parent().hide();
138+
$('select#node-input-filetype, select#node-input-basemodel').parent().show();
139+
basemodelsAvailable();
140+
break;
141+
case 'translate':
142+
$('select#node-input-srclang, select#node-input-destlang, select#node-input-domain').parent().show();
143+
$('select#node-input-filetype, #node-input-trainid, select#node-input-basemodel').parent().hide();
144+
break;
145+
case 'getstatus':
146+
$('select#node-input-srclang, select#node-input-destlang, select#node-input-filetype, select#node-input-domain, select#node-input-basemodel').parent().hide();
147+
$('#node-input-trainid').parent().show();
148+
break;
149+
case 'delete':
150+
$('select#node-input-srclang, select#node-input-destlang, select#node-input-filetype, select#node-input-domain, select#node-input-basemodel').parent().hide();
151+
$('#node-input-trainid').parent().show();
152+
break;
124153
}
125154
domainsAvailable();
126155
}
127156

128-
function domainsAvailable() {
129-
$('select#node-input-domain').empty();
130-
if (action === 'train') {
131-
var models_with_domains_available = models.filter(function (model) {
132-
return model.customizable === true;
157+
function basemodelsAvailable() {
158+
$('select#node-input-basemodel').empty();
159+
var base_models_available = models.filter(function (model) {
160+
return model.customizable === true;
161+
});
162+
163+
base_models_available_ids = base_models_available.map(function (a) {
164+
return a.model_id;
165+
});
166+
167+
if(!base_model_selected) {
168+
var base_model_first_iteration = true;
169+
170+
base_models_available_ids.forEach(function (base_model) {
171+
if (base_model_first_iteration) {
172+
$('select#node-input-basemodel').append('<option value="' + base_model + '" selected="selected">' + base_model + '</option>');
173+
} else {
174+
$('select#node-input-basemodel').append('<option value="' + base_model + '">' + base_model + '</option>');
175+
}
176+
base_model_first_iteration = false;
133177
});
134178
} else {
135-
var models_with_domains_available = models;
136-
179+
base_models_available_ids.forEach(function (base_model) {
180+
if (base_model_selected === base_model) {
181+
$('select#node-input-basemodel').append('<option value="' + base_model + '" selected="selected">' + base_model + '</option>');
182+
} else {
183+
$('select#node-input-basemodel').append('<option value="' + base_model + '">' + base_model + '</option>');
184+
}
185+
});
137186
}
138-
domains = models_with_domains_available.map(function (a) {
187+
188+
}
189+
190+
function domainsAvailable() {
191+
$('select#node-input-domain').empty();
192+
domains = models.map(function (a) {
139193
return a.domain;
140194
});
141195

@@ -292,11 +346,17 @@
292346
domain: {
293347
value: 'news'
294348
},
349+
dbase_model: {
350+
value: ''
351+
},
295352
action: {
296353
value: 'translate'
297354
},
298355
filetype: {
299356
value: 'forcedglossary'
357+
},
358+
trainid: {
359+
value: ''
300360
}
301361
},
302362
credentials: {

services/language_translation/v2.js

Lines changed: 79 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,26 +118,25 @@ module.exports = function (RED) {
118118
if (!err) {
119119
fs.write(info.fd, msg.payload);
120120
var params = {};
121-
122121
switch (filetype) {
123122
case 'forcedglossary':
124123
params = {
125124
name: msg.filename.replace(/[^0-9a-z]/gi, ''),
126-
base_model_id: 'en-es',
125+
base_model_id: model_id,
127126
forced_glossary: fs.createReadStream(info.path)
128127
};
129128
break;
130129
case 'parallelcorpus':
131130
params = {
132131
name: msg.filename.replace(/[^0-9a-z]/gi, ''),
133-
base_model_id: 'en-es',
132+
base_model_id: model_id,
134133
parallel_corpus: fs.createReadStream(info.path)
135134
};
136135
break;
137136
case 'monolingualcorpus':
138137
params = {
139138
name: msg.filename.replace(/[^0-9a-z]/gi, ''),
140-
base_model_id: 'en-es',
139+
base_model_id: model_id,
141140
monolingual_corpus: fs.createReadStream(info.path)
142141
};
143142
break;
@@ -160,6 +159,7 @@ module.exports = function (RED) {
160159
text: 'model sent to training'
161160
});
162161
msg.payload = 'Model ' + model.name + ' successfully sent for training with id: ' + model.model_id;
162+
msg.id = model_id;
163163
node.send(msg);
164164
node.status({});
165165
}
@@ -168,6 +168,66 @@ module.exports = function (RED) {
168168
});
169169
}
170170

171+
this.doGetStatus = function(msg, trainid) {
172+
language_translation = watson.language_translation({
173+
username: username,
174+
password: password,
175+
version: 'v2'
176+
});
177+
178+
node.status({
179+
fill: 'blue',
180+
shape: 'dot',
181+
text: 'requesting status'
182+
});
183+
184+
language_translation.getModel({ model_id: trainid},
185+
function(err, model) {
186+
node.status({});
187+
if (err) {
188+
node.status({
189+
fill: 'red',
190+
shape: 'ring',
191+
text: 'call to translation service failed'
192+
});
193+
node.error(err, msg);
194+
} else {
195+
msg.payload = model.status;
196+
node.send(msg);
197+
node.status({});
198+
}
199+
}
200+
);
201+
}
202+
203+
this.doDelete = function(msg, trainid) {
204+
language_translation = watson.language_translation({
205+
username: username,
206+
password: password,
207+
version: 'v2'
208+
});
209+
210+
node.status({
211+
fill: 'blue',
212+
shape: 'dot',
213+
text: 'deleting'
214+
});
215+
216+
language_translation.deleteModel({ model_id:'{model_id}'},
217+
function(err) {
218+
node.status({});
219+
if (err) {
220+
node.status({
221+
fill: 'red',
222+
shape: 'ring',
223+
text: 'could not delete'
224+
});
225+
node.error(err, msg);
226+
}
227+
}
228+
);
229+
}
230+
171231
this.on('input', function (msg) {
172232
var message = '';
173233

@@ -217,6 +277,9 @@ module.exports = function (RED) {
217277
return;
218278
}
219279

280+
var trainid = msg.trainid || config.trainid;
281+
var basemodel = msg.basemodel || config.basemodel;
282+
220283
username = username || this.credentials.username;
221284
password = password || this.credentials.password;
222285

@@ -237,8 +300,12 @@ module.exports = function (RED) {
237300
version: 'v2'
238301
});
239302

240-
var model_id = srclang + '-' + destlang +
241-
(domain === 'news' ? '' : '-conversational');
303+
var model_id = "";
304+
if(domain === "news") {
305+
model_id = srclang + '-' + destlang;
306+
} else {
307+
model_id = srclang + '-' + destlang + '-' + domain;
308+
}
242309

243310
switch (action) {
244311
case 'translate':
@@ -247,6 +314,12 @@ module.exports = function (RED) {
247314
case 'train':
248315
this.doTrain(msg, model_id, filetype);
249316
break;
317+
case 'getstatus':
318+
this.doGetStatus(msg, trainid);
319+
break;
320+
case 'delete':
321+
this.doDelete(msg, trainid);
322+
break;
250323
}
251324
});
252325
}

0 commit comments

Comments
 (0)