{"record":{"id":"d3d1b063fc746ba0","repo":"BerriAI/litellm","slug":"skill-not-found-skill-id","errorCode":null,"errorMessage":"Skill not found: {skill_id}","messagePattern":"Skill not found: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/litellm_proxy/skills/handler.py","lineNumber":159,"sourceCode":"            return cached\n\n        prisma_client: Final = await LiteLLMSkillsHandler._get_prisma_client()\n        skill: Final = await SkillsRepository(prisma_client).table.find_unique(where={\"skill_id\": skill_id})\n        _SKILL_CACHE.set_cache(skill_id, skill if skill is not None else _NEGATIVE_SKILL_SENTINEL)\n        return skill\n\n    @staticmethod\n    async def get_skill(\n        skill_id: str,\n        user_api_key_dict: UserAPIKeyAuth | None = None,\n    ) -> LiteLLM_SkillsTable:\n        verbose_logger.debug(\"LiteLLMSkillsHandler: Getting skill %s\", skill_id)\n\n        skill: Final = await LiteLLMSkillsHandler._load_skill(skill_id)\n        # Same \"not found\" message for both \"missing\" and \"cross-tenant\"\n        # so callers can't enumerate skill IDs they don't own.\n        if skill is None or not user_can_access_resource_owner(getattr(skill, \"created_by\", None), user_api_key_dict):\n            raise ValueError(f\"Skill not found: {skill_id}\")\n\n        return _prisma_skill_to_litellm(skill)\n\n    @staticmethod\n    async def delete_skill(\n        skill_id: str,\n        user_api_key_dict: UserAPIKeyAuth | None = None,\n    ) -> dict[str, str]:\n        prisma_client: Final = await LiteLLMSkillsHandler._get_prisma_client()\n        verbose_logger.debug(\"LiteLLMSkillsHandler: Deleting skill %s\", skill_id)\n\n        skill: Final = await LiteLLMSkillsHandler._load_skill(skill_id)\n        if skill is None or not user_can_access_resource_owner(getattr(skill, \"created_by\", None), user_api_key_dict):\n            raise ValueError(f\"Skill not found: {skill_id}\")\n\n        await SkillsRepository(prisma_client).table.delete(where={\"skill_id\": skill_id})\n        _SKILL_CACHE.set_cache(skill_id, _NEGATIVE_SKILL_SENTINEL)\n","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/llms/litellm_proxy/skills/handler.py#L141-L177","documentation":"Error \"Skill not found: {skill_id}\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/llms/litellm_proxy/skills/handler.py:159 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check that the skill_id exists in the LiteLLM skills store."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}