xtekky/gpt4free · warning · ValueError

Label must be provided

Error message

Label must be provided

What it means

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.

Source

Thrown at g4f/Provider/__init__.py:515

        return [(k, self[k]) for k in _provider_names]

    def get(self, item, default=None):
        try:
            return self[item]
        except KeyError:
            return default


__map__ = _ConvertDict()


class ProviderUtils:
    convert = __map__

    @classmethod
    def get_by_label(cls, label: str) -> ProviderType:
        if not label:
            raise ValueError("Label must be provided")

        # Check explicit map
        try:
            return __getattr__(label)
        except AttributeError:
            pass

        # Fallback to search
        for provider_name in _provider_names:
            if provider_name.lower().startswith(label.lower()):
                provider = __map__[provider_name]
                if provider.working:
                    return provider

        raise ValueError(f"Provider with label '{label}' not found")


import sys

View on GitHub (pinned to 973504e177)

Solutions

  1. Default the label to a real provider name: get_by_label(label or 'DeepInfra')
  2. Validate config before calling: reject empty provider settings with a clear message
  3. Skip provider selection entirely when the field is empty (use client default)

Example fix

# before
provider = ProviderUtils.get_by_label(os.getenv('G4F_PROVIDER', ''))

# after
label = os.getenv('G4F_PROVIDER') or 'DeepInfra'
provider = ProviderUtils.get_by_label(label)
Defensive patterns

Strategy: validation

Validate before calling

if not label or not label.strip():
    raise ValueError('provider label missing')  # clearer than the library's message
provider = ProviderUtils.get_by_label(label.strip())

Type guard

def is_valid_label(label) -> bool:
    return isinstance(label, str) and bool(label.strip())

Try / catch

try:
    provider = ProviderUtils.get_by_label(label or '')
except ValueError:
    provider = default_provider

Prevention

When it happens

Trigger: Calling ProviderUtils.get_by_label('') or get_by_label(None), typically because an optional config field defaulted to empty string.

Common situations: 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.

Related errors


AI-assisted analysis of xtekky/gpt4free@973504e177 (2026-08-14). Data as JSON: /api/errors/18ef3864aadc55d4. Report an issue: GitHub.