workflows/libs/ui_utils/single_select.py
bobo.yang f3d867623c feat: Integrate LLM API and UI utility functions
- Added new LLM API functions for non-streaming chat completions
- Introduced UI utility functions for input/output interaction
- Implemented multi-select and single-select UI components
2023-12-08 10:37:32 +08:00

34 lines
955 B
Python

from typing import List
from .iobase import pipe_interaction
class RadioOption:
def __init__(self, id, text):
# it will show as: - (id): text
self._id = id
self._text = text
def ui_radio_select(title: str, options: List[RadioOption]) -> str | None:
"""
```chatmark type=form
How would you like to make the change?
> - (insert) Insert the new code.
> - (new) Put the code in a new file.
> - (replace) Replace the current code.
```
"""
option_line = lambda option: f"> - ({option._id}) {option._text}"
options_lines = "\n".join([option_line(option) for option in options])
ui_message = f"""
```chatmark type=form
{title}
{options_lines}
```
"""
response = pipe_interaction(ui_message)
selected_options = [key for key, value in response.items() if value=='checked' and key in [option._id for option in options]]
return selected_options[0] if len(selected_options) > 0 else None