{"record":{"id":"de10710ca666e5c4","repo":"deepset-ai/haystack","slug":"openaitextembedder-expects-a-string-as-an-input-in","errorCode":null,"errorMessage":"OpenAITextEmbedder expects a string as an input.In case you want to embed a list of Documents, please use the OpenAIDocumentEmbedder.","messagePattern":"OpenAITextEmbedder expects a string as an input\\.In case you want to embed a list of Documents, please use the OpenAIDocumentEmbedder\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"haystack/components/embedders/openai_text_embedder.py","lineNumber":199,"sourceCode":"            max_retries=self.max_retries,\n            http_client_kwargs=self.http_client_kwargs,\n        )\n\n    @classmethod\n    def from_dict(cls, data: dict[str, Any]) -> \"OpenAITextEmbedder\":\n        \"\"\"\n        Deserializes the component from a dictionary.\n\n        :param data:\n            Dictionary to deserialize from.\n        :returns:\n            Deserialized component.\n        \"\"\"\n        return default_from_dict(cls, data)\n\n    def _prepare_input(self, text: str) -> dict[str, Any]:\n        if not isinstance(text, str):\n            raise TypeError(\n                \"OpenAITextEmbedder expects a string as an input.\"\n                \"In case you want to embed a list of Documents, please use the OpenAIDocumentEmbedder.\"\n            )\n\n        text_to_embed = self.prefix + text + self.suffix\n\n        kwargs: dict[str, Any] = {\"model\": self.model, \"input\": text_to_embed, \"encoding_format\": \"float\"}\n        if self.dimensions is not None:\n            kwargs[\"dimensions\"] = self.dimensions\n        return kwargs\n\n    def _prepare_output(self, result: CreateEmbeddingResponse) -> dict[str, Any]:\n        return {\"embedding\": result.data[0].embedding, \"meta\": {\"model\": result.model, \"usage\": dict(result.usage)}}\n\n    @component.output_types(embedding=list[float], meta=dict[str, Any])\n    def run(self, text: str) -> dict[str, Any]:\n        \"\"\"\n        Embeds a single string.","sourceCodeStart":181,"sourceCodeEnd":217,"githubUrl":"https://github.com/deepset-ai/haystack/blob/e318778c9bf60a1963e3b5f451359655dd696c30/haystack/components/embedders/openai_text_embedder.py#L181-L217","documentation":"OpenAITextEmbedder._prepare_input checks that `text` is a str before applying prefix/suffix and embedding. It raises TypeError for any non-string input because this component embeds exactly one string; lists of Documents belong in OpenAIDocumentEmbedder.","triggerScenarios":"Calling `embedder.run(text=[Document(...)])`, `text=[\"a\", \"b\"]`, or None — any non-str passed to run/run_async of OpenAITextEmbedder.","commonSituations":"Connecting a retriever/document list output to OpenAITextEmbedder by mistake; refactoring from DocumentEmbedder to TextEmbedder without changing input shape; passing pre-split chunks as a list.","solutions":["Pass a plain string: `embedder.run(text=\"some text\")`","If embedding Documents, use OpenAITextEmbedder only per string, or switch to OpenAIDocumentEmbedder","Add a converter (e.g. join strings or build Documents) upstream in the pipeline"],"exampleFix":"// before\nembedder.run(text=[Document(content=\"hello\")])\n// after\nembedder.run(text=\"hello\")","handlingStrategy":"type-guard","validationCode":"if not isinstance(text, str):\n    raise TypeError(\"OpenAITextEmbedder requires a str input\")","typeGuard":"def is_str(value) -> bool:\n    return isinstance(value, str)","tryCatchPattern":"try:\n    result = embedder.run(text=text)\nexcept TypeError as e:\n    if \"OpenAITextEmbedder expects a string\" in str(e):\n        result = doc_embedder.run(documents=text)  # if it is a Document list\n    else:\n        raise","preventionTips":["Only pipe string outputs (e.g. from prompt builders) into OpenAITextEmbedder","Route Document lists to OpenAIDocumentEmbedder","Rely on pipeline.connect() type validation instead of calling run() manually"],"tags":["python","type-error","embedders","openai"],"backgroundTag":"wrong-input-type-for-component","analyzedSha":"e318778c9bf60a1963e3b5f451359655dd696c30","analyzedAt":"2026-08-30T11:45:20.711Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}