Skip to content

Commit

Permalink
Merge 8e091ef into 7767df5
Browse files Browse the repository at this point in the history
  • Loading branch information
Douglas Paz committed Oct 2, 2018
2 parents 7767df5 + 8e091ef commit 66a0e15
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 1 deletion.
2 changes: 2 additions & 0 deletions bothub/api/serializers/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class Meta:
'name',
'slug',
'language',
'use_language_model_featurizer',
'categories',
'description',
'is_private',
Expand Down Expand Up @@ -65,6 +66,7 @@ class Meta:
'slug',
'language',
'available_languages',
'use_language_model_featurizer',
'categories',
'categories_list',
'description',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.0.6 on 2018-10-02 17:47

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('common', '0022_repositoryupdate_training_log'),
]

operations = [
migrations.AddField(
model_name='repository',
name='use_language_model_featurizer',
field=models.BooleanField(default=True, help_text='You can use language featurizer to get words similarity. You need less examples to create a great bot.', verbose_name='Use language model featurizer'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.0.6 on 2018-10-02 17:54

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('common', '0023_repository_use_language_model_featurizer'),
]

operations = [
migrations.AddField(
model_name='repositoryupdate',
name='use_language_model_featurizer',
field=models.BooleanField(default=True),
),
]
19 changes: 18 additions & 1 deletion bothub/common/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ class Meta:
validators=[
languages.validate_language,
])
use_language_model_featurizer = models.BooleanField(
_('Use language model featurizer'),
help_text=_('You can use language featurizer to get words ' +
'similarity. You need less examples to create a great ' +
'bot.'),
default=True)
categories = models.ManyToManyField(
RepositoryCategory,
help_text=CATEGORIES_HELP_TEXT)
Expand Down Expand Up @@ -293,7 +299,8 @@ def current_update(self, language=None):
language = language or self.language
repository_update, created = self.updates.get_or_create(
language=language,
training_started_at=None)
training_started_at=None,
use_language_model_featurizer=self.use_language_model_featurizer)
return repository_update

def last_trained_update(self, language=None):
Expand Down Expand Up @@ -337,6 +344,7 @@ class Meta:
validators=[
languages.validate_language,
])
use_language_model_featurizer = models.BooleanField(default=True)
created_at = models.DateTimeField(
_('created at'),
auto_now_add=True)
Expand Down Expand Up @@ -434,6 +442,12 @@ def requirements_to_train(self):

@property
def ready_for_train(self):
last_trained_update = self.repository.last_trained_update(
language=self.language)
if last_trained_update:
if last_trained_update.use_language_model_featurizer is not \
self.repository.use_language_model_featurizer:
return True
return len(self.requirements_to_train) is 0

def validate_init_train(self, by=None):
Expand All @@ -450,10 +464,13 @@ def start_training(self, by):
self.validate_init_train(by)
self.by = by
self.training_started_at = timezone.now()
self.use_language_model_featurizer = self.repository \
.use_language_model_featurizer
self.save(
update_fields=[
'by',
'training_started_at',
'use_language_model_featurizer',
])

def save_training(self, bot_data):
Expand Down
45 changes: 45 additions & 0 deletions bothub/common/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1045,3 +1045,48 @@ def test_set_label_to_none(self):
name_entity.set_label(None)

self.assertIsNone(name_entity.label)


class UseLanguageModelFeaturizerTestCase(TestCase):
def setUp(self):
self.language = languages.LANGUAGE_EN

self.owner = User.objects.create_user('owner@user.com', 'user')

self.repository = Repository.objects.create(
owner=self.owner,
name='Test',
slug='test',
language=self.language,
use_language_model_featurizer=True)

RepositoryExample.objects.create(
repository_update=self.repository.current_update(),
text='my name is Douglas',
intent='greet')
RepositoryExample.objects.create(
repository_update=self.repository.current_update(),
text='my name is John',
intent='greet')

def test_change_ready_for_train(self):
self.assertTrue(self.repository.ready_for_train)
current_update = self.repository.current_update()
current_update.start_training(self.owner)
current_update.save_training(b'')
self.assertFalse(self.repository.ready_for_train)
self.repository.use_language_model_featurizer = False
self.repository.save()
self.assertTrue(self.repository.ready_for_train)
self.repository.use_language_model_featurizer = True
self.repository.save()
self.assertFalse(self.repository.ready_for_train)

def test_equal_repository_value_after_train(self):
current_update = self.repository.current_update()
self.repository.use_language_model_featurizer = False
self.repository.save()
self.assertTrue(current_update.use_language_model_featurizer)
current_update.start_training(self.owner)
current_update.save_training(b'')
self.assertFalse(current_update.use_language_model_featurizer)

0 comments on commit 66a0e15

Please sign in to comment.