{"record":{"id":"705983c099089095","repo":"langchain-ai/deepagents","slug":"profile-key-must-be-a-non-empty-string","errorCode":null,"errorMessage":"Profile key must be a non-empty string.","messagePattern":"Profile key must be a non-empty string\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"libs/deepagents/deepagents/profiles/_keys.py","lineNumber":28,"sourceCode":"\ndef validate_profile_key(key: str) -> None:\n    \"\"\"Validate a profile registry key.\n\n    Enforces the `provider` or `provider:model` shape used by the lookup\n    functions. Rejects empty strings, whitespace-only or whitespace-padded\n    halves, multiple colons, and empty halves.\n\n    Args:\n        key: The registry key to check.\n\n    Raises:\n        ValueError: If `key` is empty, contains leading/trailing whitespace,\n            has more than one `:`, has whitespace adjacent to `:`, or has\n            an empty half on either side of `:`.\n    \"\"\"\n    if not key:\n        msg = \"Profile key must be a non-empty string.\"\n        raise ValueError(msg)\n    if key != key.strip():\n        msg = f\"Profile key {key!r} has leading or trailing whitespace; expected 'provider' or 'provider:model'.\"\n        raise ValueError(msg)\n    if key.count(\":\") > 1:\n        msg = f\"Profile key {key!r} has more than one ':'; expected 'provider' or 'provider:model'.\"\n        raise ValueError(msg)\n    if \":\" in key:\n        provider, _, model = key.partition(\":\")\n        if not provider or not model:\n            msg = f\"Profile key {key!r} has an empty provider or model half; expected 'provider:model'.\"\n            raise ValueError(msg)\n        if provider != provider.strip() or model != model.strip():\n            msg = f\"Profile key {key!r} has whitespace adjacent to ':'; expected 'provider:model' with no spaces around ':'.\"\n            raise ValueError(msg)\n","sourceCodeStart":10,"sourceCodeEnd":43,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/deepagents/deepagents/profiles/_keys.py#L10-L43","documentation":"validate_profile_key enforces the `provider` or `provider:model` key shape used by harness and provider profile registries. The very first check rejects an empty string (or any falsy key) before any shape inspection. The library throws because an empty key can never identify a profile.","triggerScenarios":"Calling _register_harness_profile_impl or _register_provider_profile_impl (or the public register APIs that wrap them) with key=\"\" or a value that is empty after being read from config/env.","commonSituations":"YAML/JSON profile config with `key:` left blank; env var or CLI flag for a profile name unset; programmatic registration passing an unpopulated variable.","solutions":["Supply a non-empty key such as 'anthropic' or 'anthropic:claude-sonnet-4'.","Fix the config/env source so the profile name is actually populated.","Check the value passed to register_harness_profile/register_provider_profile before calling."],"exampleFix":"// before\nregister_provider_profile(\"\")\n// after\nregister_provider_profile(\"anthropic:claude-sonnet-4\")","handlingStrategy":"validation","validationCode":"def ensure_profile_key_ok(key: str) -> str:\n    if not isinstance(key, str) or not key:\n        raise ValueError(\"profile key must be a non-empty string\")\n    return key","typeGuard":"def is_nonempty_str(v: object) -> bool:\n    return isinstance(v, str) and bool(v)","tryCatchPattern":"try:\n    register_provider_profile(key)\nexcept ValueError as e:\n    if \"non-empty\" in str(e):\n        logging.error(\"profile key missing: %s\", e)\n    else:\n        raise","preventionTips":["Validate config at load time before registering profiles","Fail fast if an env/config source for the profile name is empty"],"tags":["python","profiles","validation"],"backgroundTag":"invalid-profile-key","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}