From 3d8e04894b02aef9a05ff70c8e9e0e4234c0423f Mon Sep 17 00:00:00 2001 From: WerLaj Date: Wed, 2 Aug 2023 16:53:04 +0200 Subject: [PATCH 1/3] Abstract class for dialogue policy --- dialoguekit/core/dialogue_policy.py | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 dialoguekit/core/dialogue_policy.py diff --git a/dialoguekit/core/dialogue_policy.py b/dialoguekit/core/dialogue_policy.py new file mode 100644 index 00000000..e8f407f7 --- /dev/null +++ b/dialoguekit/core/dialogue_policy.py @@ -0,0 +1,44 @@ +"""Abstract interface for dialogue policy. + +The dialogue policy generates a dialogue act by the agent based on the current +dialogue state (last user's utterance and dialogue history). It defines the flow +of the conversation, i.e., what steps an agent must take at every stage. The +annotations of the dialogue act represent what the agent must elicit, recommend, +or inform. The output of the dialogue policy is converted to a natural language +response by the natural language generator. + +For example, the dialogue act with intent ELICIT is generated if the agent does +not store any user preferences. For the user intent REVEAL, the dialogue policy +triggers the generation of an item recommendation (dialogue act with intent +RECOMMEND). +""" + +from abc import ABC, abstractmethod +from typing import List + +from dialoguekit.core.dialogue_act import DialogueAct +from dialoguekit.core.utterance import Utterance + + +class DialoguePolicy(ABC): + def __init__(self) -> None: + """Initializes the dialogue policy.""" + + @abstractmethod + def next_dialogue_act( + user_utterance: Utterance, dialogue_history: List[Utterance] + ) -> DialogueAct: + """Returns the next dialogue act given the user utterance and history. + + This method is most likely used in receive_utterance() in the agent to + generate the agent's response. Dialogue act prediction is composed of + two steps: intent prediction and annotation prediction. + + Args: + user_utterance: The last user utterance. + dialogue_history: The dialogue history. + + Returns: + The next dialogue act. + """ + raise NotImplementedError From 69bb5ba362e0e521cc229e66e8249c03043bfed9 Mon Sep 17 00:00:00 2001 From: WerLaj Date: Wed, 2 Aug 2023 16:57:25 +0200 Subject: [PATCH 2/3] Flake8 issues --- dialoguekit/core/dialogue_policy.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dialoguekit/core/dialogue_policy.py b/dialoguekit/core/dialogue_policy.py index e8f407f7..d08ff6b7 100644 --- a/dialoguekit/core/dialogue_policy.py +++ b/dialoguekit/core/dialogue_policy.py @@ -10,7 +10,7 @@ For example, the dialogue act with intent ELICIT is generated if the agent does not store any user preferences. For the user intent REVEAL, the dialogue policy triggers the generation of an item recommendation (dialogue act with intent -RECOMMEND). +RECOMMEND). """ from abc import ABC, abstractmethod @@ -26,7 +26,7 @@ def __init__(self) -> None: @abstractmethod def next_dialogue_act( - user_utterance: Utterance, dialogue_history: List[Utterance] + self, user_utterance: Utterance, dialogue_history: List[Utterance] ) -> DialogueAct: """Returns the next dialogue act given the user utterance and history. From 8b0c1f32fe4cc22afce8db4a962c997408e0ed4f Mon Sep 17 00:00:00 2001 From: WerLaj Date: Thu, 3 Aug 2023 11:21:34 +0200 Subject: [PATCH 3/3] Fixes after code review --- dialoguekit/core/dialogue_policy.py | 30 ++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/dialoguekit/core/dialogue_policy.py b/dialoguekit/core/dialogue_policy.py index d08ff6b7..3d1df7ec 100644 --- a/dialoguekit/core/dialogue_policy.py +++ b/dialoguekit/core/dialogue_policy.py @@ -1,21 +1,21 @@ """Abstract interface for dialogue policy. -The dialogue policy generates a dialogue act by the agent based on the current -dialogue state (last user's utterance and dialogue history). It defines the flow -of the conversation, i.e., what steps an agent must take at every stage. The -annotations of the dialogue act represent what the agent must elicit, recommend, -or inform. The output of the dialogue policy is converted to a natural language -response by the natural language generator. - -For example, the dialogue act with intent ELICIT is generated if the agent does -not store any user preferences. For the user intent REVEAL, the dialogue policy -triggers the generation of an item recommendation (dialogue act with intent -RECOMMEND). +The dialogue policy generates the next dialogue act of an agent based on the +current dialogue state (last user's utterance and dialogue history). It defines +the flow of the conversation, i.e., what steps an agent must take at every +stage. The annotations of the dialogue act represent what the agent must elicit, +recommend, or inform. The output of the dialogue policy is converted to a +natural language response by the natural language generator. + +For example, in the context of recommendation system, the dialogue act with +intent ELICIT is generated if the agent does not store any user preferences. +For the user intent REVEAL, the dialogue policy triggers the generation of an +item recommendation (dialogue act with intent RECOMMEND). """ from abc import ABC, abstractmethod -from typing import List +from dialoguekit.core.dialogue import Dialogue from dialoguekit.core.dialogue_act import DialogueAct from dialoguekit.core.utterance import Utterance @@ -23,10 +23,11 @@ class DialoguePolicy(ABC): def __init__(self) -> None: """Initializes the dialogue policy.""" + pass @abstractmethod def next_dialogue_act( - self, user_utterance: Utterance, dialogue_history: List[Utterance] + self, user_utterance: Utterance, dialogue_history: Dialogue ) -> DialogueAct: """Returns the next dialogue act given the user utterance and history. @@ -38,6 +39,9 @@ def next_dialogue_act( user_utterance: The last user utterance. dialogue_history: The dialogue history. + Raises: + NotImplementedError: If not implemented in derived class. + Returns: The next dialogue act. """