Commands Context¶
The Commands Context
feature provides a sophisticated means to manage multi-level command structures. By facilitating a hierarchical command interface, it ensures users enjoy an intuitive and seamless interaction.
Managing Multiple Commands¶
In instances where a single input correlates with multiple commands, the system adeptly manages these overlaps. It gives priority to commands based on their position in the string or their declaration sequence, guaranteeing that the most pertinent command always takes precedence.
The Contextual Hierarchy¶
Visualize the entire system as a tree. Each context functions as a node, with its linked sub-contexts acting as its offspring. As users navigate this tree, they move between nodes—either delving deeper or backtracking—to consistently find the right command match.
Command Context Processing¶
When processing a string:
- The system adds the root context if it's missing.
- It checks the current context to find a command that matches the input string. If a command doesn't fit the current context, the system goes up, removing contexts until it finds a match or runs out of contexts.
- Upon a successful match, the system updates parameters, organizes dependencies, and initiates the command.
- Unneeded contexts are quickly removed.
Managing Responses¶
Responses are neatly lined up. The system constantly checks this line, running responses and commands in the order they come in, ensuring fast and orderly processing.
Response-embedded Context¶
Responses can include:
needs_user_input: bool
: If set to true, the system halts processing after the current response.commands: list[Command]
: Commands that can reshape context, propose subsequent actions, or establish layered interfaces.parameters: dict[str, Any]
: A supporting data list important for later processing or context definition.
For additional details on responses, visit the Command Response page.
Code Implementation¶
@manager.new('hello', hidden=True)
def hello_context(**params):
voice = text = f'Hi, {params["name"]}!'
return Response(text=text, voice=voice)
@manager.new('bye', hidden=True)
def bye_context(name: Word, handler: ResponseHandler):
handler.pop_context()
return Response(text=f'Bye, {name}!')
@manager.new('hello $name:Word')
def hello(name: Word):
text = voice = f'Hello, {name}!'
return Response(
text=text,
voice=voice,
commands=[hello_context, bye_context],
parameters={'name': name}
)
The code example provided demonstrates how to define and manage commands using a fictional manager
object.
hello_context
Function¶
- This function is marked with a
hidden=True
parameter in its decorator. This means that the command will not be available in the root context, making it inaccessible as a top-level command. - The function accepts all context parameters through
**params
, which is a dictionary. - Within the function, both the
voice
andtext
variables are set to greet the user, using the contextname
parameter. - It then returns a response with the generated greeting text and voice.
bye_context
Function¶
- Similarly, this function is also hidden from the root context.
- The function accepts specific parameters:
name
andhandler
. It's important to note that there's noname
in the command pattern, which implies that it must be derived from the context. - The
handler.pop_context()
method is called, which presumably removes the current context, signaling a transition or end of interaction. - A farewell response using the
name
parameter is returned.
hello
Function¶
- This function defines a command pattern where a name is expected as input, formatted as
hello $name:Word
. - Inside, it constructs a greeting using the provided name.
- The response not only contains the greeting but also a list of commands (
hello_context
andbye_context
) that can be triggered next. This showcases the hierarchical and contextual nature of the system. Additionally, the name is passed as a parameter for potential use in subsequent commands.
In summary, the code example gives us a glimpse into the contextual and hierarchical command management system. With the use of the hidden
attribute, commands can be kept away from the root context, making them accessible only when they are contextually relevant.
Created: 2023-09-21