{"record":{"id":"046521d04b1294ac","repo":"BerriAI/litellm","slug":"custom-secret-manager-client-must-be-an-instance-o","errorCode":null,"errorMessage":"Custom secret manager client must be an instance of CustomSecretManager, got {type(client).__name__}","messagePattern":"Custom secret manager client must be an instance of CustomSecretManager, got (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/secret_managers/secret_manager_handler.py","lineNumber":155,"sourceCode":"            if secret is None:\n                raise ValueError(f\"No secret found in CyberArk Secret Manager for {secret_name}\")\n        except Exception as e:\n            print_verbose(f\"An error occurred - {e}\")\n            raise e\n\n    elif key_manager == KeyManagementSystem.CUSTOM.value:\n        # Check if client is a CustomSecretManager instance\n        from litellm.integrations.custom_secret_manager import CustomSecretManager\n\n        if isinstance(client, CustomSecretManager):\n            secret = client.sync_read_secret(\n                secret_name=secret_name,\n                optional_params=(key_management_settings.model_dump() if key_management_settings else None),\n            )\n            if secret is None:\n                raise ValueError(f\"No secret found in Custom Secret Manager for {secret_name}\")\n        else:\n            raise ValueError(\n                f\"Custom secret manager client must be an instance of CustomSecretManager, got {type(client).__name__}\"\n            )\n\n    elif key_manager == \"local\":\n        secret = os.getenv(secret_name)\n\n    else:  # assume the default is infisicial client\n        secret = client.get_secret(secret_name).secret_value\n\n    return secret\n","sourceCodeStart":137,"sourceCodeEnd":166,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/secret_managers/secret_manager_handler.py#L137-L166","documentation":"Type guard in the CUSTOM key-manager branch: the configured client object is not an instance of CustomSecretManager, so it lacks the sync_read_secret interface the handler expects. The actual type name is reported.","triggerScenarios":"Thrown at litellm/secret_managers/secret_manager_handler.py:155 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Return an instance of a CustomSecretManager subclass from your loader, not {type(client).__name__}."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}