Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions ovos_core/intent_services/converse_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from ovos_bus_client.client import MessageBusClient
from ovos_bus_client.handler import HandlerLifecycle
from ovos_bus_client.message import Message
from ovos_bus_client.session import SessionManager, UtteranceState, Session
from ovos_bus_client.session import SessionManager, Session
from ovos_config.config import Configuration
from ovos_utils import flatten_list
from ovos_utils.fakebus import FakeBus
Expand Down Expand Up @@ -215,7 +215,7 @@ def get_active_skills(message: Optional[Message] = None,
active_skills (list): ordered list of skill_ids
"""
session = session or SessionManager.get(message)
return [skill[0] for skill in session.active_skills]
return [h["skill_id"] for h in session.active_handlers]

def deactivate_skill(self, skill_id: str, source_skill: Optional[str] = None,
message: Optional[Message] = None) -> Optional[Session]:
Expand Down Expand Up @@ -409,7 +409,7 @@ def _collect_converse_skills(self, message: Message,

# note: this is sorted by priority already
active_skills = [skill_id for skill_id in self.get_active_skills(message, session=session)
if session.utterance_states.get(skill_id, UtteranceState.INTENT) == UtteranceState.INTENT]
if not (session.response_mode and session.response_mode.get("skill_id") == skill_id)]
if not active_skills:
return []

Expand Down Expand Up @@ -519,9 +519,9 @@ def _check_converse_timeout(self, message: Message):
timeouts = self.config.get("skill_timeouts") or {}
def_timeout = self.config.get("timeout", 300)
session = SessionManager.get(message)
session.active_skills = [
skill for skill in session.active_skills
if time.time() - skill[1] <= timeouts.get(skill[0], def_timeout)]
session.active_handlers = [
h for h in session.active_handlers
if time.time() - h["activated_at"] <= timeouts.get(h["skill_id"], def_timeout)]

def match(self, utterances: List[str], lang: str, message: Message) -> Optional[IntentHandlerMatch]:
"""
Expand Down Expand Up @@ -563,7 +563,7 @@ def match(self, utterances: List[str], lang: str, message: Message) -> Optional[

# note: this is sorted by priority already
gr_skills = [skill_id for skill_id in self.get_active_skills(message, session=session)
if session.utterance_states.get(skill_id, UtteranceState.INTENT) == UtteranceState.RESPONSE]
if session.response_mode and session.response_mode.get("skill_id") == skill_id]

# check if any skill wants to capture utterance for self.get_response method
for skill_id in gr_skills:
Expand Down
14 changes: 9 additions & 5 deletions ovos_core/intent_services/stop_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def get_active_skills(message: Optional[Message] = None) -> List[str]:
active_skills (list): ordered list of skill_ids
"""
session = SessionManager.get(message)
return [skill[0] for skill in session.active_skills]
return [h["skill_id"] for h in session.active_handlers]

@staticmethod
def get_response_mode_holder(message: Optional[Message] = None) -> Optional[str]:
Expand Down Expand Up @@ -299,8 +299,10 @@ def handle_stop_confirmation(self, message: Message) -> None:
# live reads of utterance_states/active_handlers lie; consult the
# pre-drain snapshot popped above, falling back to the live read
# for direct-invocation callers that bypass _targeted_stop.
utt_state = snapshot.utt_state if snapshot else sess.utterance_states.get(
skill_id, UtteranceState.INTENT)
utt_state = snapshot.utt_state if snapshot else (
UtteranceState.RESPONSE
if sess.response_mode and sess.response_mode.get("skill_id") == skill_id
else UtteranceState.INTENT)
if utt_state == UtteranceState.RESPONSE:
LOG.debug("Forcing get_response timeout")
# force-kill any ongoing get_response - see @killable_event decorator (ovos-workshop)
Expand Down Expand Up @@ -373,7 +375,9 @@ def _targeted_stop(self, skill_id: str, conf: float, utterance: str,
# answer either question truthfully.
self._pre_drain[(sess.session_id, skill_id)] = PreDrainSnapshot(
was_active=sess.is_active(skill_id),
utt_state=sess.utterance_states.get(skill_id, UtteranceState.INTENT),
utt_state=(UtteranceState.RESPONSE
if sess.response_mode and sess.response_mode.get("skill_id") == skill_id
else UtteranceState.INTENT),
)
drained = Session.deserialize(sess.serialize())
drained.disable_response_mode(skill_id)
Expand Down Expand Up @@ -401,7 +405,7 @@ def _global_stop(self, conf: float, utterance: str,
(blacklist/missing-slots/dispatch-exception) leaves the live session
untouched.
"""
LOG.info(f"Emitting global stop, {len(sess.active_skills)} active skills")
LOG.info(f"Emitting global stop, {len(sess.active_handlers)} active skills")
# read-only: the pre-drain holder, carried through match_data so
# handle_global_stop (dispatch time, NOT here) can emit the targeted
# `<skill_id>.stop` a killable-event abort actually listens on β€”
Expand Down
Loading