Bases: IOMessageVisitor
Initialize the console UI object.
PARAMETER | DESCRIPTION |
super_conversation | The super conversation. Defaults to None. TYPE: Optional[UI] DEFAULT: None |
Source code in fastagency/ui/console/base.py
| def __init__(
self,
super_conversation: Optional["ConsoleUI"] = None,
) -> None:
"""Initialize the console UI object.
Args:
super_conversation (Optional[UI], optional): The super conversation. Defaults to None.
"""
self.super_conversation: Optional[ConsoleUI] = super_conversation
self.sub_conversations: list[ConsoleUI] = []
|
sub_conversations instance-attribute
super_conversation instance-attribute
ConsoleMessage dataclass
A console message.
heading instance-attribute
recipient instance-attribute
sender instance-attribute
create
Source code in fastagency/ui/console/base.py
| @contextmanager
def create(self, app: Runnable, import_string: str) -> Iterator[None]:
yield
|
create_subconversation
Source code in fastagency/ui/console/base.py
| def create_subconversation(self) -> "ConsoleUI":
sub_conversation = ConsoleUI(self)
self.sub_conversations.append(sub_conversation)
return sub_conversation
|
process_message
Source code in fastagency/ui/console/base.py
| def process_message(self, message: IOMessage) -> Optional[str]:
# logger.info(f"process_message(): {message=}")
return self.visit(message)
|
start
Source code in fastagency/ui/console/base.py
| def start(
self,
*,
app: Runnable,
import_string: str,
name: Optional[str] = None,
initial_message: Optional[str] = None,
single_run: bool = False,
) -> None:
run_workflow(
wf=app.wf,
ui=self,
name=name,
initial_message=initial_message,
single_run=single_run,
)
|
visit
Source code in fastagency/base.py
| def visit(self, message: IOMessage) -> Optional[str]:
method_name = f"visit_{message.type}"
method = getattr(self, method_name, self.visit_default)
return method(message)
|
visit_default
Source code in fastagency/ui/console/base.py
| def visit_default(self, message: IOMessage) -> None:
content = message.model_dump()["content"]
console_msg = self.ConsoleMessage(
sender=message.sender,
recipient=message.recipient,
heading=message.type,
body=json.dumps(content, indent=2),
)
self._format_and_print(console_msg)
|
visit_error
Source code in fastagency/base.py
| def visit_error(self, message: Error) -> Optional[str]:
return self.visit_default(message)
|
visit_function_call_execution
Source code in fastagency/base.py
| def visit_function_call_execution(
self, message: FunctionCallExecution
) -> Optional[str]:
return self.visit_default(message)
|
visit_multiple_choice
Source code in fastagency/ui/console/base.py
| def visit_multiple_choice(self, message: MultipleChoice) -> str:
console_msg = self.ConsoleMessage(
sender=message.sender,
recipient=message.recipient,
heading=message.type,
body=f"{message.prompt} (choices: {', '.join(message.choices)}, default: {message.default})",
)
prompt = self._format_message(console_msg)
prompt = self._indent(prompt)
while True:
# logger.info(f"visit_multiple_choice(): {prompt=}")
retval = input(prompt)
if retval in message.choices:
return retval
elif retval == "" and message.default:
return message.default
else:
print(f"Invalid choice ('{retval}'). Please try again.") # noqa: T201 `print` found
|
visit_suggested_function_call
Source code in fastagency/base.py
| def visit_suggested_function_call(
self, message: SuggestedFunctionCall
) -> Optional[str]:
return self.visit_default(message)
|
visit_system_message
Source code in fastagency/base.py
| def visit_system_message(self, message: SystemMessage) -> Optional[str]:
return self.visit_default(message)
|
visit_text_input
Source code in fastagency/ui/console/base.py
| def visit_text_input(self, message: TextInput) -> str:
suggestions = (
f" (suggestions: {', '.join(message.suggestions)})"
if message.suggestions
else ""
)
console_msg = self.ConsoleMessage(
sender=message.sender,
recipient=message.recipient,
heading=message.type,
body=f"{message.prompt}{suggestions}:",
)
prompt = self._format_message(console_msg)
prompt = self._indent(prompt)
if message.password:
return getpass.getpass(prompt)
else:
return input(prompt)
|
visit_text_message
Source code in fastagency/ui/console/base.py
| def visit_text_message(self, message: TextMessage) -> None:
console_msg = self.ConsoleMessage(
sender=message.sender,
recipient=message.recipient,
heading=message.type,
body=message.body,
)
self._format_and_print(console_msg)
|
visit_workflow_completed
Source code in fastagency/base.py
| def visit_workflow_completed(self, message: WorkflowCompleted) -> Optional[str]:
return self.visit_default(message)
|