{"record":{"id":"dddc2c4c04c5572a","repo":"rohitg00/ai-engineering-from-scratch","slug":"unknown-tool-name-r","errorCode":null,"errorMessage":"unknown tool {name!r}","messagePattern":"unknown tool (.+?)","errorType":"exception","errorClass":"KeyError","httpStatus":null,"severity":"error","filePath":"phases/19-capstone-projects/21-tool-registry-schema-validation/code/main.py","lineNumber":96,"sourceCode":"        override: bool = False,\n    ) -> ToolRecord:\n        if not self._NAME_RE.match(name):\n            raise ValueError(f\"tool name {name!r} must match {self._NAME_RE.pattern}\")\n        if name in self._records and not override:\n            raise ValueError(f\"tool {name!r} already registered; pass override=True to replace\")\n        validate_schema_shape(schema)\n        rec = ToolRecord(\n            name=name, description=description, schema=schema, handler=handler,\n            idempotent=idempotent, timeout_ms=timeout_ms,\n        )\n        if name not in self._records:\n            self._order.append(name)\n        self._records[name] = rec\n        return rec\n\n    def get(self, name: str) -> ToolRecord:\n        if name not in self._records:\n            raise KeyError(f\"unknown tool {name!r}\")\n        return self._records[name]\n\n    def names(self) -> list[str]:\n        return list(self._order)\n\n    def validate(self, name: str, args: Any) -> Ok | list[ValidationError]:\n        rec = self.get(name)\n        errors: list[ValidationError] = []\n        _walk(rec.schema, args, \"\", errors)\n        if errors:\n            return errors\n        return Ok()\n\n\ndef validate_schema_shape(schema: dict) -> None:\n    \"\"\"Reject schemas using keywords outside the supported subset.\"\"\"\n    if not isinstance(schema, dict):\n        raise ValueError(\"schema must be a dict\")","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/19-capstone-projects/21-tool-registry-schema-validation/code/main.py#L78-L114","documentation":"Lookup failure in ToolRegistry.get: no record exists under the requested name. Because register() enforces the naming pattern, an unknown name usually means the tool was never registered, was registered under a different name, or the registry instance differs from the one populated at startup.","triggerScenarios":"Thrown at phases/19-capstone-projects/21-tool-registry-schema-validation/code/main.py:96 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["List registry.names() to see what is actually registered","Fix typos or casing in the requested name","Ensure lookups go through the same registry instance that was populated","Register the tool before serving requests that reference it"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}