{"record":{"id":"2d64c4318342581b","repo":"infiniflow/ragflow","slug":"argument-error-2d64c4","errorCode":"ARGUMENT_ERROR","errorMessage":"Memory name cannot be empty or whitespace.","messagePattern":"Memory name cannot be empty or whitespace\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":400,"severity":"warning","filePath":"api/apps/services/memory_api_service.py","lineNumber":93,"sourceCode":"    return [memory for memory in MemoryService.get_by_ids(memory_ids) if _memory_accessible(memory)]\n\n\nasync def create_memory(memory_info: dict):\n    \"\"\"\n    :param memory_info: {\n        \"name\": str,\n        \"memory_type\": list[str],\n        \"embd_id\": str,\n        \"llm_id\": str,\n        \"tenant_embd_id\": str | None,\n        \"tenant_llm_id\": str | None\n    }\n    \"\"\"\n    # check name length\n    name = memory_info[\"name\"]\n    memory_name = name.strip()\n    if len(memory_name) == 0:\n        raise ArgumentException(\"Memory name cannot be empty or whitespace.\")\n    if len(memory_name) > MEMORY_NAME_LIMIT:\n        raise ArgumentException(f\"Memory name '{memory_name}' exceeds limit of {MEMORY_NAME_LIMIT}.\")\n    # check memory_type valid\n    if not isinstance(memory_info[\"memory_type\"], list):\n        raise ArgumentException(\"Memory type must be a list.\")\n    memory_type = set(memory_info[\"memory_type\"])\n    invalid_type = memory_type - {e.name.lower() for e in MemoryType}\n    if invalid_type:\n        raise ArgumentException(f\"Memory type '{invalid_type}' is not supported.\")\n    memory_type = list(memory_type)\n    success, res = MemoryService.create_memory(\n        tenant_id=current_user.id,\n        name=memory_name,\n        memory_type=memory_type,\n        embd_id=memory_info[\"embd_id\"],\n        llm_id=memory_info[\"llm_id\"],\n        tenant_embd_id=memory_info.get(\"tenant_embd_id\"),\n        tenant_llm_id=memory_info.get(\"tenant_llm_id\"),","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/api/apps/services/memory_api_service.py#L75-L111","documentation":"Validation in create_memory: the 'name' field, after strip(), is empty. Names consisting only of whitespace (or empty strings) are rejected with ArgumentException (HTTP 400) before any row is inserted.","triggerScenarios":"POST create-memory with name=\"\", name=\"   \", or a name of only tabs/newlines. The value is stripped before the length check, so ' ' fails.","commonSituations":"Forms submitted without the name field populated; trimming done only client-side and bypassed by direct API calls; default empty-string values leaking from config objects.","solutions":["Trim the name client-side and require non-empty before calling the API","Give the input a sensible default name when the user leaves it blank","Add form validation (required attribute) so the request never leaves the browser"],"exampleFix":"# before\ncreate_memory({\"name\": \" \", ...})\n\n# after\nname = raw_name.strip() or f\"Memory-{date.today()}\"\ncreate_memory({\"name\": name, ...})","handlingStrategy":"validation","validationCode":"name = (payload.get(\"name\") or \"\").strip()\nif not name:\n    payload[\"name\"] = f\"Memory-{uuid4().hex[:8]}\"","typeGuard":"def is_nonblank_name(v) -> bool:\n    return isinstance(v, str) and len(v.strip()) > 0","tryCatchPattern":"try:\n    create_memory(payload)\nexcept ArgumentException as e:\n    if \"empty or whitespace\" in str(e):\n        payload[\"name\"] = default_name()\n        create_memory(payload)","preventionTips":["Trim and require non-empty name in form validation before submit","Mark the name field required in the client DTO","Provide an auto-generated fallback name for programmatic creation"],"tags":["memory","validation","create","name"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}