3
from common.animals import ANIMALS_TEMPLATE, PETS_TEMPLATE
4
from common.art import ART_PATTERN
5
from common.books import BOOK_PATTERN
6
from common.gaming import GAMES_WITH_AT_LEAST_1M_COPIES_SOLD_COMPILED_PATTERN, VIDEO_GAME_WORDS_COMPILED_PATTERN
7
from common.gossip import HAVE_YOU_GOSSIP_TEMPLATE, GOSSIP_COMPILED_PATTERN
8
from common.coronavirus import virus_compiled
9
from common.food import FOOD_COMPILED_PATTERN, FOOD_SKILL_TRANSFER_PHRASES_RE
10
from common.funfact import FUNFACT_COMPILED_PATTERN
11
from common.game_cooperative_skill import GAMES_COMPILED_PATTERN
12
from common.movies import MOVIE_COMPILED_PATTERN
13
from common.music import MUSIC_COMPILED_PATTERN
14
from common.science import SCIENCE_COMPILED_PATTERN
15
from common.news import NEWS_COMPILED_PATTERN, TOPIC_NEWS_OFFER
16
from common.sport import (
17
KIND_OF_SPORTS_TEMPLATE,
19
KIND_OF_COMPETITION_TEMPLATE,
23
from common.travel import TRAVELLING_TEMPLATE, HAVE_YOU_BEEN_TEMPLATE, I_HAVE_BEEN_TEMPLATE
24
from common.weather import WEATHER_COMPILED_PATTERN
25
from common.bot_persona import YOUR_FAVORITE_COMPILED_PATTERN
26
from common.travel_italy import ITALY_PATTERN
29
"dff_travel_italy_skill": {
30
"compiled_patterns": [ITALY_PATTERN],
31
"previous_bot_patterns": [],
32
"detected_topics": [],
35
"dff_user_kg_skill": {
36
"compiled_patterns": [re.compile(r"(\bpet\b|\bpets\b|hobby|hobbies)")],
37
"previous_bot_patterns": [],
38
"detected_topics": [],
42
"compiled_patterns": [ART_PATTERN],
43
"previous_bot_patterns": [],
44
"detected_topics": [],
48
"compiled_patterns": [MOVIE_COMPILED_PATTERN],
49
"previous_bot_patterns": [MOVIE_COMPILED_PATTERN],
51
"Entertainment_Movies",
52
"Entertainment_General",
62
"compiled_patterns": [BOOK_PATTERN],
63
"previous_bot_patterns": [BOOK_PATTERN],
64
"detected_topics": ["Entertainment_General", "Entertainment_Books", "Religion", "Entertainment", "Literature"],
68
"compiled_patterns": [NEWS_COMPILED_PATTERN],
69
"previous_bot_patterns": TOPIC_NEWS_OFFER,
70
"detected_topics": ["News"],
74
"compiled_patterns": [FOOD_COMPILED_PATTERN],
75
"previous_bot_patterns": [FOOD_SKILL_TRANSFER_PHRASES_RE, FOOD_COMPILED_PATTERN],
76
"detected_topics": ["Food_Drink"],
80
"compiled_patterns": [GAMES_WITH_AT_LEAST_1M_COPIES_SOLD_COMPILED_PATTERN, VIDEO_GAME_WORDS_COMPILED_PATTERN],
81
"previous_bot_patterns": [
82
GAMES_WITH_AT_LEAST_1M_COPIES_SOLD_COMPILED_PATTERN,
83
VIDEO_GAME_WORDS_COMPILED_PATTERN,
85
"detected_topics": ["Entertainment_General", "Games"],
88
"dff_animals_skill": {
89
"compiled_patterns": [ANIMALS_TEMPLATE, PETS_TEMPLATE],
90
"previous_bot_patterns": [ANIMALS_TEMPLATE, PETS_TEMPLATE],
91
"detected_topics": ["Pets_Animals"],
95
"compiled_patterns": [
97
KIND_OF_SPORTS_TEMPLATE,
98
KIND_OF_COMPETITION_TEMPLATE,
102
"previous_bot_patterns": [SPORT_TEMPLATE],
103
"detected_topics": ["Sports"],
107
"compiled_patterns": [MUSIC_COMPILED_PATTERN],
108
"previous_bot_patterns": [MUSIC_COMPILED_PATTERN],
109
"detected_topics": ["Entertainment_Music", "Music"],
112
"dff_science_skill": {
113
"compiled_patterns": [SCIENCE_COMPILED_PATTERN],
114
"previous_bot_patterns": [SCIENCE_COMPILED_PATTERN],
116
"Science_and_Technology",
117
"Entertainment_Books",
124
"game_cooperative_skill": {
125
"compiled_patterns": [GAMES_COMPILED_PATTERN],
126
"previous_bot_patterns": [GAMES_COMPILED_PATTERN],
127
"detected_topics": ["Entertainment_General", "Games"],
130
"dff_weather_skill": {
131
"compiled_patterns": [WEATHER_COMPILED_PATTERN],
132
"previous_bot_patterns": [WEATHER_COMPILED_PATTERN],
133
"detected_topics": ["Weather_Time"],
136
"dff_funfact_skill": {
137
"compiled_patterns": [FUNFACT_COMPILED_PATTERN],
138
"previous_bot_patterns": [FUNFACT_COMPILED_PATTERN],
139
"detected_topics": [],
142
"dff_travel_skill": {
143
"compiled_patterns": [TRAVELLING_TEMPLATE],
144
"previous_bot_patterns": [HAVE_YOU_BEEN_TEMPLATE, TRAVELLING_TEMPLATE, I_HAVE_BEEN_TEMPLATE],
145
"detected_topics": ["Travel_Geo"],
148
"dff_gossip_skill": {
149
"compiled_patterns": [],
150
"previous_bot_patterns": [HAVE_YOU_GOSSIP_TEMPLATE, GOSSIP_COMPILED_PATTERN],
151
"detected_topics": [],
154
"dff_coronavirus_skill": {
155
"compiled_patterns": [virus_compiled],
156
"previous_bot_patterns": [],
157
"detected_topics": [],
160
"dff_bot_persona_skill": {
161
"compiled_patterns": [YOUR_FAVORITE_COMPILED_PATTERN],
162
"previous_bot_patterns": [],
163
"detected_topics": [],
166
"dff_short_story_skill": {
167
"compiled_patterns": [],
168
"previous_bot_patterns": [],
169
"detected_topics": [],
170
"intents": ["tell_me_a_story"],
175
def turn_on_skills(detected_topics, catched_intents, user_uttr_text, prev_bot_uttr_text, available_skills=None):
177
Function to turn on skills from SKILL_TRIGGERS based on
178
- detected_topics, list of corresponding topics is in SKILL_TRIGGERS[skill_name][detected_topics],
179
- list of patterns (compiled or not) or strings (then ase sensitive) to search in USER utterances,
180
see SKILL_TRIGGERS[skill_name][compiled_patterns]
181
- list of patterns (compiled or not) or strings (then ase sensitive) to search in PREV BOT utterances,
182
see SKILL_TRIGGERS[skill_name][previous_bot_patterns]
183
- list of intents catched by `intent_catcher`, see SKILL_TRIGGERS[skill_name][intents]
185
detected_topics = set(detected_topics)
186
catched_intents = set(catched_intents)
189
for skill_name in SKILL_TRIGGERS:
190
if available_skills is None or (available_skills is not None and skill_name in available_skills):
191
for pattern in SKILL_TRIGGERS[skill_name]["compiled_patterns"]:
192
if re.search(pattern, user_uttr_text):
193
skills.append(skill_name)
194
for pattern in SKILL_TRIGGERS[skill_name]["previous_bot_patterns"]:
195
if re.search(pattern, prev_bot_uttr_text):
196
skills.append(skill_name)
197
if set(SKILL_TRIGGERS[skill_name]["detected_topics"]) & detected_topics:
198
skills.append(skill_name)
199
if set(SKILL_TRIGGERS[skill_name]["intents"]) & catched_intents:
200
skills.append(skill_name)
201
return list(set(skills))