Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 770df34

Browse filesBrowse files
committed
Add $ref and $defs support to json schema converter
1 parent faeae18 commit 770df34
Copy full SHA for 770df34

File tree

Expand file treeCollapse file tree

1 file changed

+14
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+14
-0
lines changed

‎llama_cpp/llama_grammar.py

Copy file name to clipboardExpand all lines: llama_cpp/llama_grammar.py
+14Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,7 @@ class SchemaConverter:
13991399
def __init__(self, prop_order):
14001400
self._prop_order = prop_order
14011401
self._rules = {"space": SPACE_RULE}
1402+
self._defs = {}
14021403

14031404
def _format_literal(self, literal):
14041405
escaped = GRAMMAR_LITERAL_ESCAPE_RE.sub(
@@ -1422,6 +1423,11 @@ def visit(self, schema, name):
14221423
schema_type = schema.get("type")
14231424
rule_name = name or "root"
14241425

1426+
if "$defs" in schema:
1427+
# add defs to self._defs for later inlining
1428+
for def_name, def_schema in schema["$defs"].items():
1429+
self._defs[def_name] = def_schema
1430+
14251431
if "oneOf" in schema or "anyOf" in schema:
14261432
rule = " | ".join(
14271433
(
@@ -1471,6 +1477,14 @@ def visit(self, schema, name):
14711477
)
14721478
return self._add_rule(rule_name, rule)
14731479

1480+
elif "$ref" in schema:
1481+
ref = schema["$ref"]
1482+
assert ref.startswith("#/$defs/"), f"Unrecognized schema: {schema}"
1483+
# inline $defs
1484+
def_name = ref[len("#/$defs/") :]
1485+
def_schema = self._defs[def_name]
1486+
return self.visit(def_schema, f'{name}{"-" if name else ""}{def_name}')
1487+
14741488
else:
14751489
assert schema_type in PRIMITIVE_RULES, f"Unrecognized schema: {schema}"
14761490
return self._add_rule(

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.