{"record":{"id":"a29c1a9f19b4077b","repo":"BerriAI/litellm","slug":"hf-response-not-in-expected-format-embeddings","errorCode":null,"errorMessage":"HF response not in expected format - {embeddings}","messagePattern":"HF response not in expected format - (.+?)","errorType":"http","errorClass":"SagemakerError","httpStatus":422,"severity":"error","filePath":"litellm/llms/sagemaker/embedding/transformation.py","lineNumber":118,"sourceCode":"                message=f\"Failed to parse response: {e}\",\n                status_code=raw_response.status_code,\n            )\n\n        # Handle both raw array format (TEI) and wrapped format (standard HF)\n        if isinstance(response_data, list):\n            # TEI and some HF models return raw embedding arrays directly\n            embeddings = response_data\n        elif isinstance(response_data, dict) and \"embedding\" in response_data:\n            # Standard HF format with \"embedding\" key\n            embeddings = response_data[\"embedding\"]\n        else:\n            raise SagemakerError(\n                status_code=500,\n                message=f\"Unexpected response format. Expected list or dict with 'embedding' key, got: {type(response_data).__name__}\",\n            )\n\n        if not isinstance(embeddings, list):\n            raise SagemakerError(\n                status_code=422,\n                message=f\"HF response not in expected format - {embeddings}\",\n            )\n\n        output_data: Final = []\n        for idx, embedding in enumerate(embeddings):\n            output_data.append({\"object\": \"embedding\", \"index\": idx, \"embedding\": embedding})\n\n        model_response.object = \"list\"\n        model_response.data = output_data\n        model_response.model = model\n\n        # Calculate usage from request data\n        input_texts: Final = request_data.get(\"inputs\", [])\n        input_tokens = 0\n        for text in input_texts:\n            input_tokens += len(text.split())  # Simple word count fallback\n","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/sagemaker/embedding/transformation.py#L100-L136","documentation":"Once the embeddings payload is extracted (raw list or dict['embedding']), LiteLLM requires it to be a JSON list so it can iterate per-input vectors. If the value under 'embedding' (or the whole payload) is an object, string, or number, it raises SagemakerError 422 echoing the malformed value.","triggerScenarios":"A response like {'embedding': {'vector': [...]}} or {'embedding': 'error message'} - the key exists but does not map to an array of embedding arrays.","commonSituations":"Containers that return a single vector object for single-input requests; error payloads nested under the embedding key; hand-written inference scripts with inconsistent shapes between single and batch requests.","solutions":["Log the value shown in the error message to see the exact malformed shape.","Make the container return a list of lists even for a single input: {'embedding': [[...]]}.","Keep single-request and batch-request response shapes identical in custom inference code."],"exampleFix":"# custom container - before (single input)\nreturn {'embedding': [0.1, 0.2, 0.3]}\n# after (list of per-input vectors)\nreturn {'embedding': [[0.1, 0.2, 0.3]]}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"from litellm import SagemakerError\n\ntry:\n    resp = litellm.embedding(model='sagemaker/hf-emb', input=texts)\nexcept SagemakerError as e:\n    if e.status_code == 422 and 'not in expected format' in str(e):\n        log.error('malformed embedding payload: %s', e.message)\n    raise","preventionTips":["Make custom containers return a list of lists even for single inputs.","Test single-input and batch-input requests separately in CI."],"tags":["sagemaker","embedding","response-parsing","format"],"backgroundTag":"unexpected-response-schema","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}