{"record":{"id":"18ef3864aadc55d4","repo":"xtekky/gpt4free","slug":"label-must-be-provided","errorCode":null,"errorMessage":"Label must be provided","messagePattern":"Label must be provided","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"warning","filePath":"g4f/Provider/__init__.py","lineNumber":515,"sourceCode":"        return [(k, self[k]) for k in _provider_names]\n\n    def get(self, item, default=None):\n        try:\n            return self[item]\n        except KeyError:\n            return default\n\n\n__map__ = _ConvertDict()\n\n\nclass ProviderUtils:\n    convert = __map__\n\n    @classmethod\n    def get_by_label(cls, label: str) -> ProviderType:\n        if not label:\n            raise ValueError(\"Label must be provided\")\n\n        # Check explicit map\n        try:\n            return __getattr__(label)\n        except AttributeError:\n            pass\n\n        # Fallback to search\n        for provider_name in _provider_names:\n            if provider_name.lower().startswith(label.lower()):\n                provider = __map__[provider_name]\n                if provider.working:\n                    return provider\n\n        raise ValueError(f\"Provider with label '{label}' not found\")\n\n\nimport sys","sourceCodeStart":497,"sourceCodeEnd":533,"githubUrl":"https://github.com/xtekky/gpt4free/blob/973504e1770928ed5fb82f43da528f441ad9ddc3/g4f/Provider/__init__.py#L497-L533","documentation":"ValueError from ProviderUtils.get_by_label() guarding against empty lookup input. The method resolves a provider by exact name first, then by prefix match over _provider_names; an empty/None label cannot match anything meaningfully, so it fails fast before searching.","triggerScenarios":"Calling ProviderUtils.get_by_label('') or get_by_label(None), typically because an optional config field defaulted to empty string.","commonSituations":"Config-driven code like get_by_label(os.getenv('G4F_PROVIDER', '')) where the env var is unset; form inputs left blank; CLI flags with empty defaults.","solutions":["Default the label to a real provider name: get_by_label(label or 'DeepInfra')","Validate config before calling: reject empty provider settings with a clear message","Skip provider selection entirely when the field is empty (use client default)"],"exampleFix":"# before\nprovider = ProviderUtils.get_by_label(os.getenv('G4F_PROVIDER', ''))\n\n# after\nlabel = os.getenv('G4F_PROVIDER') or 'DeepInfra'\nprovider = ProviderUtils.get_by_label(label)","handlingStrategy":"validation","validationCode":"if not label or not label.strip():\n    raise ValueError('provider label missing')  # clearer than the library's message\nprovider = ProviderUtils.get_by_label(label.strip())","typeGuard":"def is_valid_label(label) -> bool:\n    return isinstance(label, str) and bool(label.strip())","tryCatchPattern":"try:\n    provider = ProviderUtils.get_by_label(label or '')\nexcept ValueError:\n    provider = default_provider","preventionTips":["Never forward optional env/config values unchecked into label lookup","Provide a sensible default provider in config schemas"],"tags":["provider-registry","validation","empty-input"],"backgroundTag":null,"analyzedSha":"973504e1770928ed5fb82f43da528f441ad9ddc3","analyzedAt":"2026-08-14T23:45:32.408Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}