mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-12-24 13:28:50 +01:00
examples : support minItems/maxItems in JSON grammar converter (#5039)
* support minLength and maxLength in JSON schema grammar converter * Update examples/json-schema-to-grammar.py --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
This commit is contained in:
parent
1387cf60f7
commit
9d679f0fcc
@ -87,7 +87,21 @@ class SchemaConverter:
|
|||||||
elif schema_type == 'array' and 'items' in schema:
|
elif schema_type == 'array' and 'items' in schema:
|
||||||
# TODO `prefixItems` keyword
|
# TODO `prefixItems` keyword
|
||||||
item_rule_name = self.visit(schema['items'], f'{name}{"-" if name else ""}item')
|
item_rule_name = self.visit(schema['items'], f'{name}{"-" if name else ""}item')
|
||||||
rule = f'"[" space ({item_rule_name} ("," space {item_rule_name})*)? "]" space'
|
list_item_operator = f'("," space {item_rule_name})'
|
||||||
|
successive_items = ""
|
||||||
|
min_items = schema.get("minItems", 0)
|
||||||
|
if min_items > 0:
|
||||||
|
first_item = f"({item_rule_name})"
|
||||||
|
successive_items = list_item_operator * (min_items - 1)
|
||||||
|
min_items -= 1
|
||||||
|
else:
|
||||||
|
first_item = f"({item_rule_name})?"
|
||||||
|
max_items = schema.get("maxItems")
|
||||||
|
if max_items is not None and max_items > min_items:
|
||||||
|
successive_items += (list_item_operator + "?") * (max_items - min_items - 1)
|
||||||
|
else:
|
||||||
|
successive_items += list_item_operator + "*"
|
||||||
|
rule = f'"[" space {first_item} {successive_items} "]" space'
|
||||||
return self._add_rule(rule_name, rule)
|
return self._add_rule(rule_name, rule)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user