---
name: part
lang: py
domain: core
version: "1.0.0"
algebraic: sum
definition: |
  Part = Union[TextPart, ContextPart, ToolPart]

  def part_from_dict(data: dict) -> Part:
      """Deserializa un Part desde dict, usando el campo 'type' como discriminador."""
description: "Tipo suma de las partes posibles de un mensaje multipart: texto, referencia a contexto o llamada a herramienta. Incluye part_from_dict() para deserializacion discriminada por el campo 'type'."
tags: [message, part, union, sum_type, multipart, llm, discriminator, deserialization]
uses_types: [text_part_py_core, context_part_py_core, tool_part_py_core]
file_path: "python/types/core/part.py"
---

## Notas

`Part` es un alias de tipo (`Union`) sobre los tres product types concretos. No es una clase — no se instancia directamente.

`part_from_dict()` usa el campo `"type"` como discriminador: `"text"` → `TextPart`, `"context"` → `ContextPart`, `"tool"` → `ToolPart`. Lanza `ValueError` si el tipo es desconocido o falta el campo.

Los campos del dict se pasan directamente al constructor del tipo concreto (excepto `"type"`, que ya es el valor por defecto). Esto permite round-trip: `part_from_dict(dataclasses.asdict(part))` devuelve una copia equivalente.
