{"record":{"id":"4940589c62fb40d7","repo":"BerriAI/litellm","slug":"no-response-from-fallbacks-got-none-turn-on-lit","errorCode":null,"errorMessage":"No response from fallbacks. Got none. Turn on `litellm.set_verbose=True` to see more details.","messagePattern":"No response from fallbacks\\. Got none\\. Turn on `litellm\\.set_verbose=True` to see more details\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"litellm/main.py","lineNumber":607,"sourceCode":"        \"acompletion\": True,  # assuming this is a required parameter\n        \"thinking\": thinking,\n        \"web_search_options\": web_search_options,\n        \"include_server_side_tool_invocations\": include_server_side_tool_invocations,\n        \"shared_session\": shared_session,\n        \"enable_json_schema_validation\": enable_json_schema_validation,\n    }\n    if custom_llm_provider is None:\n        _, custom_llm_provider, _, _ = get_llm_provider(\n            model=model,\n            custom_llm_provider=custom_llm_provider,\n            api_base=base_url,\n        )\n\n    fallbacks = fallbacks or litellm.model_fallbacks\n    if fallbacks is not None:\n        response = await async_completion_with_fallbacks(**completion_kwargs, kwargs={\"fallbacks\": fallbacks, **kwargs})\n        if response is None:\n            raise Exception(\n                \"No response from fallbacks. Got none. Turn on `litellm.set_verbose=True` to see more details.\"\n            )\n        return response\n\n    ### APPLY MOCK DELAY ###\n\n    mock_delay: Final = kwargs.get(\"mock_delay\")\n    mock_response: Final = kwargs.get(\"mock_response\")\n    mock_tool_calls: Final = kwargs.get(\"mock_tool_calls\")\n    mock_timeout = kwargs.get(\"mock_timeout\")\n    if mock_delay and should_run_mock_completion(\n        mock_response=mock_response,\n        mock_tool_calls=mock_tool_calls,\n        mock_timeout=mock_timeout,\n    ):\n        await asyncio.sleep(mock_delay)\n\n    try:","sourceCodeStart":589,"sourceCodeEnd":625,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/main.py#L589-L625","documentation":"Generic Exception raised in async completion when the fallbacks machinery (async_completion_with_fallbacks) returned None instead of a response -- meaning every configured fallback was exhausted or skipped and the individual failures were swallowed by the fallback loop. The message itself admits the root cause is only visible with verbose logging.","triggerScenarios":"await litellm.acompletion(..., fallbacks=[...]) where all fallback models fail (bad keys, unknown model names, network) or the fallbacks argument is malformed so nothing is actually attempted; the helper returns None and main.py raises.","commonSituations":"Fallback list pointing at models that are not in the deployment; one shared bad API key across primary and fallbacks; fallbacks config shaped for Router (list of {model: [...]}) passed to plain completion; auth or rate-limit errors on every candidate.","solutions":["Set litellm.set_verbose = True (or debug via callback logs) and rerun to see each fallback's real error","Test each fallback model standalone with the same credentials to find the broken entry","Fix the fallbacks structure for the API you are calling (plain list for completion kwargs; router-style mapping belongs to Router)","Temporarily remove fallbacks so the primary model's original exception surfaces directly"],"exampleFix":"# before\nresp = await litellm.acompletion(model='gpt-4o', fallbacks=['claude-3-5-sonnet'], messages=m)  # Exception: No response from fallbacks\n\n# after: verify fallbacks work standalone, keep fallbacks off until fixed\nresp = await litellm.acompletion(model='gpt-4o', messages=m)","handlingStrategy":"try-catch","validationCode":"# sanity-check every fallback model resolves before relying on it\nfor m in [primary, *fallbacks]:\n    try:\n        litellm.get_llm_provider(model=m)\n    except Exception as e:\n        raise ValueError(f'fallback model {m!r} does not resolve: {e}')","typeGuard":null,"tryCatchPattern":"try:\n    resp = await litellm.acompletion(model=primary, fallbacks=fallbacks, messages=m)\nexcept Exception as e:\n    if 'No response from fallbacks' in str(e):\n        # all candidates failed; surface the primary error directly\n        resp = await litellm.acompletion(model=primary, messages=m)\n    else:\n        raise","preventionTips":["Validate fallback model names and credentials with the same checks as the primary model at deploy time","Prefer Router with its documented fallbacks structure over ad-hoc fallbacks kwargs for production","Keep verbose logging or a callback logger enabled in lower environments so fallback failures are never silent","Add alerting on fallback-exhaustion events, not just on primary errors"],"tags":["fallbacks","routing","async","litellm"],"backgroundTag":"all-fallbacks-failed","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}