Skip to content

Commit 9f7ed62

Browse files
authored
Merge pull request #311 from OpenVoiceOS/release-3.2.1a1
Release 3.2.1a1
2 parents 0a5d098 + 21231c4 commit 9f7ed62

File tree

4 files changed

+41
-22
lines changed

4 files changed

+41
-22
lines changed

CHANGELOG.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Changelog
22

3-
## [3.2.0a1](https://github.com/OpenVoiceOS/OVOS-workshop/tree/3.2.0a1) (2024-12-18)
3+
## [3.2.1a1](https://github.com/OpenVoiceOS/OVOS-workshop/tree/3.2.1a1) (2024-12-19)
44

5-
[Full Changelog](https://github.com/OpenVoiceOS/OVOS-workshop/compare/3.1.3...3.2.0a1)
5+
[Full Changelog](https://github.com/OpenVoiceOS/OVOS-workshop/compare/3.2.0...3.2.1a1)
66

77
**Merged pull requests:**
88

9-
- feat: game skill [\#306](https://github.com/OpenVoiceOS/OVOS-workshop/pull/306) ([JarbasAl](https://github.com/JarbasAl))
9+
- fix: improve game skill converse [\#310](https://github.com/OpenVoiceOS/OVOS-workshop/pull/310) ([JarbasAl](https://github.com/JarbasAl))
1010

1111

1212

ovos_workshop/skills/common_play.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,14 +392,15 @@ def play_media(self, media, disambiguation=None, playlist=None):
392392

393393
# @killable_event("ovos.common_play.stop", react_to_stop=True)
394394
def __handle_ocp_play(self, message):
395+
self.activate()
396+
self._playing.set()
397+
self._paused.clear()
395398
if self.__playback_handler:
396399
params = signature(self.__playback_handler).parameters
397400
kwargs = {"message": message} if "message" in params else {}
398401
self.__playback_handler(**kwargs)
399402
self.bus.emit(Message("ovos.common_play.player.state",
400403
{"state": PlayerState.PLAYING}))
401-
self._playing.set()
402-
self._paused.clear()
403404
else:
404405
LOG.error(f"Playback requested but {self.skill_id} handler not "
405406
"implemented")
@@ -417,6 +418,7 @@ def __handle_ocp_pause(self, message):
417418
"implemented")
418419

419420
def __handle_ocp_resume(self, message):
421+
self.activate()
420422
self._paused.clear()
421423
if self.__resume_handler:
422424
params = signature(self.__playback_handler).parameters

ovos_workshop/skills/game_skill.py

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,14 @@ def stop(self) -> bool:
124124
return True
125125
return False
126126

127-
def calc_intent(self, utterance: str, lang: str) -> Optional[Dict[str, str]]:
127+
def calc_intent(self, utterance: str, lang: str, timeout=1.0) -> Optional[Dict[str, str]]:
128128
"""helper to check what intent would be selected by ovos-core"""
129129
# let's see what intent ovos-core will assign to the utterance
130130
# NOTE: converse, common_query and fallbacks are not included in this check
131131
response = self.bus.wait_for_response(Message("intent.service.intent.get",
132132
{"utterance": utterance, "lang": lang}),
133133
"intent.service.intent.reply",
134-
timeout=1.0)
134+
timeout=timeout)
135135
if not response:
136136
return None
137137
return response.data["intent"]
@@ -183,7 +183,6 @@ def on_game_command(self, utterance: str, lang: str):
183183
don't forget to self.speak the game output too!
184184
"""
185185

186-
@abc.abstractmethod
187186
def on_abandon_game(self):
188187
"""user abandoned game mid interaction
189188
@@ -193,7 +192,7 @@ def on_abandon_game(self):
193192
on_game_stop will be called after this handler"""
194193

195194
# converse
196-
def skill_will_trigger(self, utterance: str, lang: str, skill_id: Optional[str] = None) -> bool:
195+
def skill_will_trigger(self, utterance: str, lang: str, skill_id: Optional[str] = None, timeout=0.8) -> bool:
197196
"""helper to check if this skill would be selected by ovos-core with the given utterance
198197
199198
useful in converse method
@@ -205,7 +204,7 @@ def skill_will_trigger(self, utterance: str, lang: str, skill_id: Optional[str]
205204
# determine if an intent from this skill
206205
# will be selected by ovos-core
207206
id_to_check = skill_id or self.skill_id
208-
intent = self.calc_intent(utterance, lang)
207+
intent = self.calc_intent(utterance, lang, timeout=timeout)
209208
skill_id = intent["skill_id"] if intent else ""
210209
return skill_id == id_to_check
211210

@@ -221,26 +220,44 @@ def _autosave(self):
221220
if self.settings.get("auto_save", False) and self.save_is_implemented:
222221
self.on_save_game()
223222

224-
def converse(self, message: Message):
223+
def _async_cmd(self, message: Message):
224+
utterance = message.data["utterances"][0]
225+
lang = get_message_lang(message)
226+
self.log.debug(f"Piping utterance to game: {utterance}")
227+
self.on_game_command(utterance, lang)
228+
229+
def converse(self, message: Message) -> bool:
225230
try:
231+
utterance = message.data["utterances"][0]
232+
lang = get_message_lang(message)
233+
# let the user implemented intents do the job if they can handle the utterance
234+
# otherwise pipe utterance to the game handler
235+
if self.skill_will_trigger(utterance, lang):
236+
self.log.debug("Skill intent will trigger, don't pipe utterance to game")
237+
return False
238+
226239
if self.is_paused:
240+
self.log.debug("game is paused")
227241
# let ocp_pipeline unpause as appropriate
228242
return False
229243

230-
self._autosave()
231-
utterance = message.data["utterances"][0]
232-
lang = get_message_lang(message)
233-
# let the user implemented intents do the job if they can handle the utterance
234-
if self.is_playing and not self.skill_will_trigger(utterance, lang):
235-
# otherwise pipe utterance to the game handler
236-
self.on_game_command(utterance, lang)
244+
try:
245+
self._autosave()
246+
except Exception as e:
247+
self.log.error(f"Autosave failed: {e}")
248+
249+
if self.is_playing:
250+
# do this async so converse executes faster
251+
self.bus.once(f"{self.skill_id}.game_cmd", self._async_cmd)
252+
self.bus.emit(message.forward(f"{self.skill_id}.game_cmd", message.data))
237253
return True
254+
238255
return False
239256
except (KeyError, IndexError) as e:
240-
self.log.error(f"Error processing converse message: {e}")
257+
self.log.error(f"Error processing game converse message: {e}")
241258
return False
242259
except Exception as e:
243-
self.log.exception(f"Unexpected error in converse: {e}")
260+
self.log.exception(f"Unexpected error in game converse: {e}")
244261
return False
245262

246263
def handle_deactivate(self, message: Message):

ovos_workshop/version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# START_VERSION_BLOCK
22
VERSION_MAJOR = 3
33
VERSION_MINOR = 2
4-
VERSION_BUILD = 0
5-
VERSION_ALPHA = 0
4+
VERSION_BUILD = 1
5+
VERSION_ALPHA = 1
66
# END_VERSION_BLOCK

0 commit comments

Comments
 (0)