{"record":{"id":"d77102ffdf5e5758","repo":"BerriAI/litellm","slug":"user-custom-sso-must-be-a-coroutine-function","errorCode":null,"errorMessage":"user_custom_sso must be a coroutine function","messagePattern":"user_custom_sso must be a coroutine function","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/proxy/management_endpoints/ui_sso.py","lineNumber":2182,"sourceCode":"        ui_access_mode=ui_access_mode,\n        access_token_payload=None,\n        jwt_handler=jwt_handler,\n        return_to=cp_return_to,\n    )\n\n\nasync def _build_cli_sso_user_defined_values(\n    result: OpenID | dict,\n    parsed_openid_result: ParsedOpenIDResult,\n) -> SSOUserDefinedValues | None:\n    from litellm.proxy.proxy_server import user_custom_sso\n\n    custom_sso_handler: Final[_CustomSsoCall | None] = user_custom_sso\n    user_id: Final = parsed_openid_result.get(\"user_id\")\n    if custom_sso_handler is not None:\n        if inspect.iscoroutinefunction(custom_sso_handler):\n            return await custom_sso_handler(result)\n        raise ValueError(\"user_custom_sso must be a coroutine function\")\n    if user_id is None:\n        return None\n    return SSOUserDefinedValues(\n        models=[],\n        user_id=user_id,\n        user_email=parsed_openid_result.get(\"user_email\"),\n        max_budget=litellm.max_internal_user_budget,\n        user_role=parsed_openid_result.get(\"user_role\"),\n        budget_duration=litellm.internal_user_budget_duration,\n    )\n\n\ndef _cli_sso_team_detail(team_row: Mapping[str, object]) -> _CliSsoTeamDetail:\n    team: Final = _TeamRowGrants.model_validate(team_row)\n    alias_table: Final = team.litellm_model_table\n    return _CliSsoTeamDetail(\n        team_id=team.team_id,\n        team_alias=team.team_alias,","sourceCodeStart":2164,"sourceCodeEnd":2200,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/ui_sso.py#L2164-L2200","documentation":"Error \"user_custom_sso must be a coroutine function\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/ui_sso.py:2182 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Define user_custom_sso as an async (coroutine) function in the custom auth/SSO module."],"exampleFix":null,"handlingStrategy":null,"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-14T05:17:10.506Z"}