{"record":{"id":"a4a3dfbb8936052b","repo":"BerriAI/litellm","slug":"unsupported-provider-config-transcription-provid","errorCode":null,"errorMessage":"Unsupported provider config: {transcription_provider_config} for model: {model}","messagePattern":"Unsupported provider config: (.+?) for model: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/litellm_core_utils/get_supported_openai_params.py","lineNumber":123,"sourceCode":"    elif custom_llm_provider == \"vllm\":\n        return litellm.VLLMConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"deepseek\":\n        return litellm.DeepSeekChatConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"tencent\":\n        return litellm.TencentChatConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"cohere_chat\" or custom_llm_provider == \"cohere\":\n        return litellm.CohereChatConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"maritalk\":\n        return litellm.MaritalkConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"openai\":\n        if request_type == \"transcription\":\n            transcription_provider_config = litellm.ProviderConfigManager.get_provider_audio_transcription_config(\n                model=model, provider=LlmProviders.OPENAI\n            )\n            if isinstance(transcription_provider_config, litellm.OpenAIGPTAudioTranscriptionConfig):\n                return transcription_provider_config.get_supported_openai_params(model=model)\n            else:\n                raise ValueError(f\"Unsupported provider config: {transcription_provider_config} for model: {model}\")\n        return litellm.OpenAIConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"sap\":\n        if request_type == \"chat_completion\":\n            return litellm.GenAIHubOrchestrationConfig().get_supported_openai_params(model=model)\n        elif request_type == \"embeddings\":\n            return litellm.GenAIHubEmbeddingConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"azure\":\n        _azure_detection_model: Final = base_model or model\n        if litellm.AzureOpenAIO1Config().is_o_series_model(model=_azure_detection_model):\n            return litellm.AzureOpenAIO1Config().get_supported_openai_params(model=_azure_detection_model)\n        elif litellm.AzureOpenAIGPT5Config.is_model_gpt_5_model(model=_azure_detection_model):\n            return litellm.AzureOpenAIGPT5Config().get_supported_openai_params(model=_azure_detection_model)\n        else:\n            return litellm.AzureOpenAIConfig().get_supported_openai_params(model=_azure_detection_model)\n    elif custom_llm_provider == \"openrouter\":\n        return litellm.OpenrouterConfig().get_supported_openai_params(model=model)\n    elif custom_llm_provider == \"vercel_ai_gateway\":\n        return litellm.VercelAIGatewayConfig().get_supported_openai_params(model=model)","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/litellm_core_utils/get_supported_openai_params.py#L105-L141","documentation":"Raised in get_supported_openai_params() when custom_llm_provider=='openai' and request_type=='transcription': ProviderConfigManager.get_provider_audio_transcription_config() returned a config object that is not an instance of litellm.OpenAIGPTAudioTranscriptionConfig. LiteLLM asks the config for the supported OpenAI params for the request type, and any other class means the audio-transcription config layer is inconsistent — custom registration or a version regression, not something the model name alone fixes.","triggerScenarios":"litellm.transcription(model='whisper-1', ...) or calling get_supported_openai_params(model, custom_llm_provider='openai', request_type='transcription') after a custom audio-transcription config was registered with ProviderConfigManager, or after mixing litellm versions where the manager returns a different config class for openai transcription.","commonSituations":"Registering custom provider configs (e.g. for self-hosted whisper behind an OpenAI-compatible facade) that override the openai transcription slot; upgrading litellm with stale cached modules; forks that add new audio transcription config classes without updating this isinstance chain.","solutions":["Upgrade litellm to the latest patch release (config-class mapping bugs here are fixed quickly).","If you register custom audio transcription configs, make the one bound to LlmProviders.OPENAI a subclass/instance of OpenAIGPTAudioTranscriptionConfig.","Clear stale installs (pip cache, duplicated litellm dirs on sys.path) so the manager and the isinstance check come from the same version.","Report upstream with the litellm version, model, and any ProviderConfigManager customizations."],"exampleFix":"# before\nparams = litellm.get_supported_openai_params(model='whisper-1', custom_llm_provider='openai', request_type='transcription')\n# ValueError: Unsupported provider config: <OtherConfig ...>\n\n# after: keep the openai slot on the expected config class\ncfg = litellm.ProviderConfigManager.get_provider_audio_transcription_config(model='whisper-1', provider=LlmProviders.OPENAI)\nassert isinstance(cfg, litellm.OpenAIGPTAudioTranscriptionConfig), type(cfg)\nparams = litellm.get_supported_openai_params(model='whisper-1', custom_llm_provider='openai', request_type='transcription')","handlingStrategy":"type-guard","validationCode":"from litellm.types.llms.openai import LlmProviders\n\ncfg = litellm.ProviderConfigManager.get_provider_audio_transcription_config(model='whisper-1', provider=LlmProviders.OPENAI)\nif not isinstance(cfg, litellm.OpenAIGPTAudioTranscriptionConfig):\n    raise RuntimeError(f'openai transcription config overridden by {type(cfg).__name__}; remove custom registration or upgrade litellm')\nparams = litellm.get_supported_openai_params(model='whisper-1', custom_llm_provider='openai', request_type='transcription')","typeGuard":"def openai_transcription_config_ok(model: str) -> bool:\n    cfg = litellm.ProviderConfigManager.get_provider_audio_transcription_config(model=model, provider=LlmProviders.OPENAI)\n    return isinstance(cfg, litellm.OpenAIGPTAudioTranscriptionConfig)","tryCatchPattern":"try:\n    params = litellm.get_supported_openai_params(model=model, custom_llm_provider='openai', request_type='transcription')\nexcept ValueError as e:\n    if 'Unsupported provider config' in str(e):\n        # a custom provider config replaced the openai transcription config; fix registration or pin litellm version\n        raise\n    raise","preventionTips":["Pin the litellm version in production and test upgrades in CI.","Keep custom ProviderConfigManager registrations scoped to their own provider, never the openai slot.","Watch litellm release notes for provider-config manager changes."],"tags":["litellm","transcription","provider-config","version-mismatch"],"backgroundTag":"unsupported-provider-config","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}