mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Update LLM selector serializer to support ObjectSelector fields and arrays (#148094)
This commit is contained in:
parent
8641a2141c
commit
1fc624c7a7
@ -777,7 +777,23 @@ def _selector_serializer(schema: Any) -> Any: # noqa: C901
|
||||
return result
|
||||
|
||||
if isinstance(schema, selector.ObjectSelector):
|
||||
return {"type": "object", "additionalProperties": True}
|
||||
result = {"type": "object"}
|
||||
if fields := schema.config.get("fields"):
|
||||
result["properties"] = {
|
||||
field: convert(
|
||||
selector.selector(field_schema["selector"]),
|
||||
custom_serializer=_selector_serializer,
|
||||
)
|
||||
for field, field_schema in fields.items()
|
||||
}
|
||||
else:
|
||||
result["additionalProperties"] = True
|
||||
if schema.config.get("multiple"):
|
||||
result = {
|
||||
"type": "array",
|
||||
"items": result,
|
||||
}
|
||||
return result
|
||||
|
||||
if isinstance(schema, selector.SelectSelector):
|
||||
options = [
|
||||
|
@ -1139,6 +1139,59 @@ async def test_selector_serializer(
|
||||
"type": "object",
|
||||
"additionalProperties": True,
|
||||
}
|
||||
assert selector_serializer(
|
||||
selector.ObjectSelector(
|
||||
{
|
||||
"fields": {
|
||||
"name": {
|
||||
"required": True,
|
||||
"selector": {"text": {}},
|
||||
},
|
||||
"percentage": {
|
||||
"selector": {"number": {"min": 30, "max": 100}},
|
||||
},
|
||||
},
|
||||
"multiple": False,
|
||||
"label_field": "name",
|
||||
},
|
||||
)
|
||||
) == {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string"},
|
||||
"percentage": {"type": "number", "minimum": 30, "maximum": 100},
|
||||
},
|
||||
}
|
||||
assert selector_serializer(
|
||||
selector.ObjectSelector(
|
||||
{
|
||||
"fields": {
|
||||
"name": {
|
||||
"required": True,
|
||||
"selector": {"text": {}},
|
||||
},
|
||||
"percentage": {
|
||||
"selector": {"number": {"min": 30, "max": 100}},
|
||||
},
|
||||
},
|
||||
"multiple": True,
|
||||
"label_field": "name",
|
||||
},
|
||||
)
|
||||
) == {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string"},
|
||||
"percentage": {
|
||||
"type": "number",
|
||||
"minimum": 30,
|
||||
"maximum": 100,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
assert selector_serializer(
|
||||
selector.SelectSelector(
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user