MCPcopy Create free account
hub / github.com/abetlen/llama-cpp-python / _build_object_rule

Method _build_object_rule

examples/server/server.py:678–762  ·  view source on GitHub ↗
(
        self,
        properties: List[Tuple[str, Any]],
        required: set[str],
        name: str,
        additional_properties: Union[bool, Any],
    )

Source from the content-addressed store, hash-verified

676 return rule_name
677
678 def _build_object_rule(
679 self,
680 properties: List[Tuple[str, Any]],
681 required: set[str],
682 name: str,
683 additional_properties: Union[bool, Any],
684 ) -> str:
685 prop_order = self._prop_order
686 sorted_props = [
687 key
688 for _, (key, _) in sorted(
689 enumerate(properties),
690 key=lambda indexed_key: (
691 prop_order.get(indexed_key[1][0], len(prop_order)),
692 indexed_key[0],
693 ),
694 )
695 ]
696
697 property_kv_rule_names: Dict[str, str] = {}
698 for prop_name, prop_schema in properties:
699 prop_rule_name = self.visit(
700 cast(Dict[str, Any], prop_schema),
701 f"{name}{'-' if name else ''}{prop_name}",
702 )
703 property_kv_rule_names[prop_name] = self._add_rule(
704 f"{name}{'-' if name else ''}{prop_name}-kv",
705 rf'{self._format_literal(json.dumps(prop_name))} space ":" space {prop_rule_name}',
706 )
707
708 required_props = [key for key in sorted_props if key in required]
709 optional_props = [key for key in sorted_props if key not in required]
710
711 if additional_properties is True or isinstance(additional_properties, dict):
712 sub_name = f"{name}{'-' if name else ''}additional"
713 value_rule = self.visit(
714 {} if additional_properties is True else cast(Dict[str, Any], additional_properties),
715 f"{sub_name}-value",
716 )
717 property_kv_rule_names["*"] = self._add_rule(
718 f"{sub_name}-kv",
719 self._add_primitive("string", self._primitive_rules()["string"])
720 + f' ":" space {value_rule}',
721 )
722 optional_props.append("*")
723
724 rule = '"{" space '
725 rule += ' "," space '.join(property_kv_rule_names[key] for key in required_props)
726
727 if optional_props:
728 if required_props:
729 rule += ' ( "," space ( '
730 else:
731 rule += "( "
732
733 def get_recursive_refs(keys: List[str], first_is_optional: bool) -> str:
734 head, *rest = keys
735 kv_rule_name = property_kv_rule_names[head]

Callers 1

visitMethod · 0.95

Calls 6

visitMethod · 0.95
_add_ruleMethod · 0.95
_format_literalMethod · 0.95
_add_primitiveMethod · 0.95
_primitive_rulesMethod · 0.95
appendMethod · 0.80

Tested by

no test coverage detected