Skip to content

Commit

Permalink
Merge pull request #211 from Ilhasoft/use-comp-intents-flag
Browse files Browse the repository at this point in the history
 Add use_competing_intents flag in repository and repository update
  • Loading branch information
Douglas Paz committed Oct 4, 2018
2 parents 9a16bae + 2b1d3de commit 4ad1714
Show file tree
Hide file tree
Showing 4 changed files with 83 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 @@ -27,6 +27,7 @@ class Meta:
'slug',
'language',
'use_language_model_featurizer',
'use_competing_intents',
'categories',
'description',
'is_private',
Expand Down Expand Up @@ -67,6 +68,7 @@ class Meta:
'language',
'available_languages',
'use_language_model_featurizer',
'use_competing_intents',
'categories',
'categories_list',
'description',
Expand Down
23 changes: 23 additions & 0 deletions bothub/common/migrations/0025_auto_20181003_1911.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 2.0.6 on 2018-10-03 19:11

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('common', '0024_repositoryupdate_use_language_model_featurizer'),
]

operations = [
migrations.AddField(
model_name='repository',
name='use_competing_intents',
field=models.BooleanField(default=False, help_text='When using competing intents the confidence of the prediction is distributed in all the intents.', verbose_name='Use competing intents'),
),
migrations.AddField(
model_name='repositoryupdate',
name='use_competing_intents',
field=models.BooleanField(default=False),
),
]
14 changes: 13 additions & 1 deletion bothub/common/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,11 @@ class Meta:
'similarity. You need less examples to create a great ' +
'bot.'),
default=True)
use_competing_intents = models.BooleanField(
_('Use competing intents'),
help_text=_('When using competing intents the confidence of the ' +
'prediction is distributed in all the intents.'),
default=False)
categories = models.ManyToManyField(
RepositoryCategory,
help_text=CATEGORIES_HELP_TEXT)
Expand Down Expand Up @@ -300,7 +305,8 @@ def current_update(self, language=None):
repository_update, created = self.updates.get_or_create(
language=language,
training_started_at=None,
use_language_model_featurizer=self.use_language_model_featurizer)
use_language_model_featurizer=self.use_language_model_featurizer,
use_competing_intents=self.use_competing_intents)
return repository_update

def last_trained_update(self, language=None):
Expand Down Expand Up @@ -345,6 +351,7 @@ class Meta:
languages.validate_language,
])
use_language_model_featurizer = models.BooleanField(default=True)
use_competing_intents = models.BooleanField(default=False)
created_at = models.DateTimeField(
_('created at'),
auto_now_add=True)
Expand Down Expand Up @@ -448,6 +455,9 @@ def ready_for_train(self):
if last_trained_update.use_language_model_featurizer is not \
self.repository.use_language_model_featurizer:
return True
if last_trained_update.use_competing_intents is not \
self.repository.use_competing_intents:
return True
return len(self.requirements_to_train) is 0

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

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 @@ -1090,3 +1090,48 @@ def test_equal_repository_value_after_train(self):
current_update.start_training(self.owner)
current_update.save_training(b'')
self.assertFalse(current_update.use_language_model_featurizer)


class UseCompetingIntentsTestCase(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_competing_intents=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_competing_intents = False
self.repository.save()
self.assertTrue(self.repository.ready_for_train)
self.repository.use_competing_intents = 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_competing_intents = False
self.repository.save()
self.assertTrue(current_update.use_competing_intents)
current_update.start_training(self.owner)
current_update.save_training(b'')
self.assertFalse(current_update.use_competing_intents)

0 comments on commit 4ad1714

Please sign in to comment.