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
- Remove leading/trailing whitespace: key = key.strip() before registering.
- Fix whitespace at the config or input-parsing source.
- 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
- Strip values when reading profile names from config/env/CLI
- Canonicalize 'provider:model' keys in one helper used everywhere
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
- Profile key {key!r} has whitespace adjacent to ':'; expected
- Profile key must be a non-empty string.
- Profile key {key!r} has more than one ':'; expected 'provide
- Profile key {key!r} has an empty provider or model half; exp
- Unknown keys in GeneralPurposeSubagentProfile dict: {sorted(
AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29).
Data as JSON: /api/errors/28ef696e22e65679.
Report an issue: GitHub.