from echo.tools import BaseElicitationTool, ElicitationDetails
from typing import Any, Dict, List
class SelectionElicitationTool(BaseElicitationTool):
"""Present single/multi-select options to user."""
name: str = "elicit_selection"
description: str = (
"Ask choice questions to the user. Presents options as buttons. "
"Use component='pills' for single select, 'multi' for multi-select."
)
@property
def elicitation_components(self):
return [
SelectionElicitationComponent.PILLS,
SelectionElicitationComponent.MULTI_SELECT,
]
@property
def input_schema(self) -> Dict[str, Any]:
return {
"type": "object",
"properties": {
"component": {
"type": "string",
"enum": ["pills", "multi"],
"description": "pills=single select, multi=multi-select",
},
"options": {
"type": "array",
"items": {"type": "string"},
"description": "Options to display",
},
"text": {
"type": "string",
"description": "Question text above options",
},
},
"required": ["component", "options", "text"],
}
async def run(
self,
component: str,
text: str,
options: List[str],
**kwargs,
) -> ElicitationDetails:
options_formatted = [{"label": opt, "value": opt} for opt in options]
return await super().run(component, text=text, options=options_formatted)