--- title: "FileContent" id: filecontent slug: "/filecontent" description: "`FileContent` represents file payloads in chat messages, including base64 data, MIME type, filename, and provider-specific metadata." --- # FileContent `FileContent` represents a file payload that can be attached to a [`ChatMessage`](chatmessage.mdx). Use it when a chat model accepts file inputs, such as PDFs or other documents, together with the user's text prompt. If you need the full list of parameters and methods, see the [`FileContent` API reference](/reference/data-classes-api#filecontent). ## Attributes ```python @dataclass class FileContent: base64_data: str mime_type: str | None = None filename: str | None = None extra: dict[str, Any] = field(default_factory=dict) validation: bool = True ``` - `base64_data` stores the file content as a base64-encoded string. - `mime_type` identifies the file type, for example `application/pdf`. Providing it explicitly is recommended because many model providers require it. - `filename` is optional, but some providers use it when processing uploaded files. - `extra` can store provider-specific metadata. Values should be JSON serializable. - `validation` checks that `base64_data` is valid and tries to infer the MIME type when one is not provided. ## Create from a file path Use `from_file_path` to read a local file, base64-encode it, infer the MIME type from the path, and populate the filename. ```python from haystack.dataclasses import ChatMessage, FileContent file_content = FileContent.from_file_path("data/attention-is-all-you-need.pdf") message = ChatMessage.from_user( content_parts=[ file_content, "Summarize the key ideas in this paper.", ] ) ``` Pass `filename` or `extra` when a provider expects a specific filename or provider-specific options: ```python file_content = FileContent.from_file_path( "data/report.pdf", filename="quarterly-report.pdf", extra={"source": "finance"}, ) ``` ## Create from a URL Use `from_url` to download a file and convert it into a `FileContent` instance. ```python from haystack.dataclasses import FileContent file_content = FileContent.from_url( "https://example.com/reports/quarterly-report.pdf", timeout=30, ) ``` If no filename is provided, Haystack uses the final path segment of the URL. ## Create from base64 data If you already have file bytes, encode them and pass the MIME type explicitly. ```python import base64 from pathlib import Path from haystack.dataclasses import FileContent data = Path("data/manual.pdf").read_bytes() file_content = FileContent( base64_data=base64.b64encode(data).decode("utf-8"), mime_type="application/pdf", filename="manual.pdf", ) ``` Set `validation=False` only when the base64 data and MIME type are already trusted and you want to skip validation. ## Inspect files in a ChatMessage After adding `FileContent` to a `ChatMessage`, use the `file` and `files` properties to access file payloads. ```python from haystack.dataclasses import ChatMessage, FileContent file_content = FileContent.from_file_path("data/invoice.pdf") message = ChatMessage.from_user(content_parts=[file_content, "Extract the invoice total."]) print(message.file) print(message.files) ``` `message.file` returns the first file payload, or `None` if there are no files. `message.files` returns all file payloads. ## Serialization Use `to_dict` and `from_dict` to serialize and restore file content. ```python payload = file_content.to_dict() restored = FileContent.from_dict(payload) ``` For tracing, Haystack replaces the full base64 payload with a placeholder so large files are not sent to the tracing backend.