langchain-ai/deepagents · error · ValueError

Profile key {key!r} has leading or trailing whitespace; expe

Error message

Profile key {key!r} has leading or trailing whitespace; expected 'provider' or 'provider:model'.

What it means

validate_profile_key rejects keys with leading or trailing whitespace because registry lookups are exact string matches; padded keys would silently create unreachable entries. The check compares the key to its .strip() result.

Source

Thrown at libs/deepagents/deepagents/profiles/_keys.py:31

    Enforces the `provider` or `provider:model` shape used by the lookup
    functions. Rejects empty strings, whitespace-only or whitespace-padded
    halves, multiple colons, and empty halves.

    Args:
        key: The registry key to check.

    Raises:
        ValueError: If `key` is empty, contains leading/trailing whitespace,
            has more than one `:`, has whitespace adjacent to `:`, or has
            an empty half on either side of `:`.
    """
    if not key:
        msg = "Profile key must be a non-empty string."
        raise ValueError(msg)
    if key != key.strip():
        msg = f"Profile key {key!r} has leading or trailing whitespace; expected 'provider' or 'provider:model'."
        raise ValueError(msg)
    if key.count(":") > 1:
        msg = f"Profile key {key!r} has more than one ':'; expected 'provider' or 'provider:model'."
        raise ValueError(msg)
    if ":" in key:
        provider, _, model = key.partition(":")
        if not provider or not model:
            msg = f"Profile key {key!r} has an empty provider or model half; expected 'provider:model'."
            raise ValueError(msg)
        if provider != provider.strip() or model != model.strip():
            msg = f"Profile key {key!r} has whitespace adjacent to ':'; expected 'provider:model' with no spaces around ':'."
            raise ValueError(msg)

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Remove leading/trailing whitespace: key = key.strip() before registering.
  2. Fix whitespace at the config or input-parsing source.
  3. If parsing 'provider:model', strip each half individually.

Example fix

// before
key = f"{provider} : {model}"  # ' anthropic : gpt-4 ' style
register_provider_profile(key)
// after
key = f"{provider.strip()}:{model.strip()}"
register_provider_profile(key)
Defensive patterns

Strategy: validation

Validate before calling

key = key.strip()
assert key == key.strip(), "profile key has surrounding whitespace"

Try / catch

try:
    register_provider_profile(key)
except ValueError as e:
    if "leading or trailing whitespace" in str(e):
        key = key.strip()
    else:
        raise

Prevention

When it happens

Trigger: Registering or looking up a profile with key like ' anthropic' or 'anthropic:model\n', e.g. a name copied from documentation or read from an unstripped config line.

Common situations: Hand-edited YAML/JSON config with stray spaces; splitting a 'provider:model' spec from user input without stripping; env vars containing trailing newlines.

Related errors


AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29). Data as JSON: /api/errors/28ef696e22e65679. Report an issue: GitHub.