{"record":{"id":"15d61619b792964c","repo":"microsoft/autogen","slug":"invalid-name-name-name-must-be-less-than-64-ch-15d616","errorCode":null,"errorMessage":"Invalid name: {name}. Name must be less than 64 characters.","messagePattern":"Invalid name: (.+?)\\. Name must be less than 64 characters\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/packages/autogen-ext/src/autogen_ext/models/ollama/_ollama_client.py","lineNumber":369,"sourceCode":"def normalize_name(name: str) -> str:\n    \"\"\"\n    LLMs sometimes ask functions while ignoring their own format requirements, this function should be used to replace invalid characters with \"_\".\n\n    Prefer _assert_valid_name for validating user configuration or input\n    \"\"\"\n    return re.sub(r\"[^a-zA-Z0-9_-]\", \"_\", name)[:64]\n\n\ndef assert_valid_name(name: str) -> str:\n    \"\"\"\n    Ensure that configured names are valid, raises ValueError if not.\n\n    For munging LLM responses use _normalize_name to ensure LLM specified names don't break the API.\n    \"\"\"\n    if not re.match(r\"^[a-zA-Z0-9_-]+$\", name):\n        raise ValueError(f\"Invalid name: {name}. Only letters, numbers, '_' and '-' are allowed.\")\n    if len(name) > 64:\n        raise ValueError(f\"Invalid name: {name}. Name must be less than 64 characters.\")\n    return name\n\n\n# TODO: Does this need to change?\ndef normalize_stop_reason(stop_reason: str | None) -> FinishReasons:\n    if stop_reason is None:\n        return \"unknown\"\n\n    # Convert to lower case\n    stop_reason = stop_reason.lower()\n\n    KNOWN_STOP_MAPPINGS: Dict[str, FinishReasons] = {\n        \"stop\": \"stop\",\n        \"end_turn\": \"stop\",\n        \"tool_calls\": \"function_calls\",\n    }\n\n    return KNOWN_STOP_MAPPINGS.get(stop_reason, \"unknown\")","sourceCodeStart":351,"sourceCodeEnd":387,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/python/packages/autogen-ext/src/autogen_ext/models/ollama/_ollama_client.py#L351-L387","documentation":"The second rule of assert_valid_name(): after passing the character-set check, a name longer than 64 characters raises ValueError. Names are capped at 64 chars to stay compatible with the Ollama/OpenAI tool-name limits (the companion _normalize_name truncates to [:64]).","triggerScenarios":"Registering a tool or component whose name is 65+ characters — typically auto-generated names like 'agent_team_step_...' built by concatenating scopes, ids, and verbs.","commonSituations":"Programmatic name generation from class paths or sentence descriptions; long descriptive agent names in group chat configs; names built by joining namespace prefixes.","solutions":["Shorten the name to <= 64 characters (abbreviate the most redundant segment)","For generated names, truncate before asserting: name = name[:64]","If the name comes from LLM output, use _normalize_name() which truncates automatically"],"exampleFix":"# before\nname = \"very_long_auto_generated_tool_name_\" + uuid4().hex  # > 64 chars\nassert_valid_name(name)\n\n# after\nname = (\"very_long_auto_generated_tool_name_\" + uuid4().hex)[:64]\nassert_valid_name(name)","handlingStrategy":"validation","validationCode":"name = name[:64]\nassert_valid_name(name)  # now safe on length","typeGuard":"def name_within_limit(name: str) -> bool:\n    return 0 < len(name) <= 64","tryCatchPattern":"try:\n    assert_valid_name(name)\nexcept ValueError as e:\n    if \"less than 64\" in str(e):\n        name = name[:64]\n    else:\n        raise","preventionTips":["Cap generated names with [:64] before validation","Prefer short stable slugs over descriptive sentences for tool/agent names","Add a length assertion in name-generator unit tests"],"tags":["ollama","naming","validation","tool-calling"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}