{"record":{"id":"bb85298c4b74f697","repo":"microsoft/autogen","slug":"error-query-mime-type-is-not-supported-only-me","errorCode":null,"errorMessage":"Error: {query.mime_type} is not supported. Only MemoryMimeType.TEXT, MemoryMimeType.JSON, MemoryMimeType.MARKDOWN are currently supported.","messagePattern":"Error: (.+?) is not supported\\. Only MemoryMimeType\\.TEXT, MemoryMimeType\\.JSON, MemoryMimeType\\.MARKDOWN are currently supported\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"python/packages/autogen-ext/src/autogen_ext/memory/redis/_redis_memory.py","lineNumber":316,"sourceCode":"            raise ValueError(\n                \"Non-sequential queries cannot be run with an underlying sequential RedisMemory. Set sequential=False in RedisMemoryConfig to enable semantic memory querying.\"\n            )\n        elif sequential or self.config.sequential:\n            results = self.message_history.get_recent(\n                top_k=top_k,\n                raw=False,\n            )\n        else:\n            # get the query string, or raise an error for unsupported MemoryContent types\n            if isinstance(query, str):\n                prompt = query\n            elif isinstance(query, MemoryContent):\n                if query.mime_type in (MemoryMimeType.TEXT, MemoryMimeType.MARKDOWN):\n                    prompt = str(query.content)\n                elif query.mime_type == MemoryMimeType.JSON:\n                    prompt = serialize(query.content)\n                else:\n                    raise NotImplementedError(\n                        f\"Error: {query.mime_type} is not supported. Only MemoryMimeType.TEXT, MemoryMimeType.JSON, MemoryMimeType.MARKDOWN are currently supported.\"\n                    )\n            else:\n                raise TypeError(\"'query' must be either a string or MemoryContent\")\n\n            results = self.message_history.get_relevant(  # type: ignore\n                prompt=prompt,  # type: ignore[reportArgumentType]\n                top_k=top_k,\n                distance_threshold=distance_threshold,\n                raw=False,\n            )\n\n        memories: List[MemoryContent] = []\n        for result in results:  # type: ignore[reportUnkownVariableType]\n            metadata = deserialize(result[\"metadata\"])  # type: ignore[reportArgumentType]\n            mime_type = MemoryMimeType(metadata.pop(\"mime_type\"))\n            if mime_type in (MemoryMimeType.TEXT, MemoryMimeType.MARKDOWN):\n                memory_content = result[\"content\"]  # type: ignore[reportArgumentType]","sourceCodeStart":298,"sourceCodeEnd":334,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/python/packages/autogen-ext/src/autogen_ext/memory/redis/_redis_memory.py#L298-L334","documentation":"On the semantic (non-sequential) query path, RedisMemory must turn the query into a string prompt for embedding. It accepts MemoryContent only with TEXT, MARKDOWN, or JSON mime types; anything else (IMAGE, BINARY) raises NotImplementedError listing the supported types.","triggerScenarios":"await redis_memory.query(MemoryContent(content=Image(...), mime_type=MemoryMimeType.IMAGE)) on a sequential=False memory; querying with a binary MemoryContent; passing a custom mime enum value.","commonSituations":"Passing the agent's last multimodal message directly as the query; building query MemoryContent from uploaded files without converting to text; mixing sequential and semantic code paths where the sequential path never validates mime type.","solutions":["Query with a plain string or a TEXT/MARKDOWN/JSON MemoryContent containing the text to embed.","For image-based retrieval, first produce a textual description and use that as the query.","Centralize a to_query_text() helper so all query inputs are normalized to strings."],"exampleFix":"# before\nresult = await memory.query(MemoryContent(content=img, mime_type=MemoryMimeType.IMAGE))  # NotImplementedError\n\n# after\nresult = await memory.query('notes about the architecture diagram')","handlingStrategy":"type-guard","validationCode":"from autogen_core.memory import MemoryContent, MemoryMimeType\n\nQUERYABLE = (MemoryMimeType.TEXT, MemoryMimeType.MARKDOWN, MemoryMimeType.JSON)\n\ndef query_ok(q) -> bool:\n    return isinstance(q, str) or (isinstance(q, MemoryContent) and q.mime_type in QUERYABLE)","typeGuard":"def is_queryable_content(q) -> bool:\n    return isinstance(q, MemoryContent) and q.mime_type in (MemoryMimeType.TEXT, MemoryMimeType.MARKDOWN, MemoryMimeType.JSON)","tryCatchPattern":"try:\n    res = await memory.query(q)\nexcept NotImplementedError as e:\n    raise ValueError(f'convert query to text first: {e}') from e","preventionTips":["Normalize all queries to str at your boundary","Never pass Image/binary MemoryContent as a semantic query","Wrap query construction in one helper with the mime allowlist"],"tags":["redis","memory","mime-type","query"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}