{"record":{"id":"d84886c7d6ff937f","repo":"chroma-core/chroma","slug":"chroma-error-response-missing-required-message-f","errorCode":null,"errorMessage":"Chroma error response missing required 'message' field: {resp.text} (trace ID: {trace_id})","messagePattern":"Chroma error response missing required 'message' field: (.+?) \\(trace ID: (.+?)\\)","errorType":"http","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"chromadb/api/base_http_client.py","lineNumber":142,"sourceCode":"                ):\n                    chroma_error = errors.ConditionalWriteConflictError(message)\n                elif error_name in errors.error_types:\n                    chroma_error = errors.error_types[error_name](message)\n\n                if chroma_error is not None:\n                    trace_id = resp.headers.get(\"chroma-trace-id\")\n                    if trace_id:\n                        chroma_error.trace_id = trace_id\n\n        except KeyError as e:\n            message = (\n                \"Chroma error response missing required 'message' field: \"\n                f\"{resp.text}\"\n            )\n            trace_id = resp.headers.get(\"chroma-trace-id\")\n            if trace_id:\n                message = f\"{message} (trace ID: {trace_id})\"\n            raise ValueError(message) from e\n        except BaseException:\n            pass\n\n        if chroma_error:\n            raise chroma_error\n\n        try:\n            resp.raise_for_status()\n        except httpx.HTTPStatusError:\n            trace_id = resp.headers.get(\"chroma-trace-id\")\n            if trace_id:\n                raise Exception(f\"{resp.text} (trace ID: {trace_id})\")\n            raise (Exception(resp.text))\n\n    def get_request_headers(self) -> Mapping[str, str]:\n        \"\"\"Return headers used for HTTP requests.\"\"\"\n        return {}\n","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/chroma-core/chroma/blob/aecdd12c8a891610db8653630b066b32ceb678b5/chromadb/api/base_http_client.py#L124-L160","documentation":"Raised by BaseHTTPClient._raise_chroma_error while converting a failing HTTP response into an exception. The response body parsed as JSON and contained an \"error\" key (so it looked like a Chroma error envelope) but lacked the required \"message\" key, raising KeyError. This means the server — or something rewriting its responses — produced a malformed Chroma-style error payload.","triggerScenarios":"A server/middleware version that emits {\"error\": \"...\"} without \"message\"; a proxy or custom middleware that rewrites Chroma error bodies; a hand-rolled stub server in tests returning a partial envelope; a Chroma server version whose error schema differs from the client's.","commonSituations":"Client and server chromadb versions skew (upgraded one but not the other); sidecars mutating error responses; test mocks returning incomplete error JSON.","solutions":["Read the raw response body embedded in the message — it shows exactly what was returned and by whom.","Pin client and server to matching chromadb versions.","Disable or fix any middleware/proxy that rewrites error response bodies.","If a trace ID is present in the message, use it to locate the corresponding server log entry."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    client.list_collections()\nexcept ValueError as e:\n    if \"missing required 'message' field\" in str(e):\n        # malformed Chroma error envelope — inspect raw body in the message,\n        # then check version skew / response-rewriting middleware\n        logger.error(\"malformed server error body: %s\", e)\n    raise","preventionTips":["Run the same chromadb version on client and server.","Do not put middleware in front of Chroma that rewrites error bodies.","In tests, mock error responses with the full {error, message} envelope."],"tags":["chroma","http","error-mapping","version-mismatch","proxy"],"backgroundTag":"invalid-server-response","analyzedSha":"aecdd12c8a891610db8653630b066b32ceb678b5","analyzedAt":"2026-08-16T21:53:27.228Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}