---
name: smart_split_content
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "def smart_split_content(content: str, max_tokens: int = 1024, max_chars: int = 8000) -> list[str]"
description: "Divide contenido grande en partes respetando limites de tokens y caracteres. Divide por parrafos (doble newline). Si un parrafo individual excede el limite, lo corta por caracteres."
tags: [chunking, splitting, tokens, text, markdown, llm]
uses_functions: [estimate_token_count_py_core]
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [re]
params:
  - name: content
    desc: "Contenido grande a dividir"
  - name: max_tokens
    desc: "Límite máximo de tokens por chunk"
  - name: max_chars
    desc: "Límite máximo de caracteres por chunk"
output: "Lista de strings donde cada string es un chunk que respeta ambos límites"
tested: true
tests:
  - "contenido corto produce una sola parte"
  - "contenido largo divide en multiples partes"
  - "parrafo gigante que requiere forzar corte"
test_file_path: "python/functions/core/parse_markdown_test.py"
file_path: "python/functions/core/core.py"
---

## Ejemplo

```python
# Short content — stays as one chunk
parts = smart_split_content("Hello.\n\nWorld.", max_tokens=1024, max_chars=8000)
# ["Hello.\n\nWorld."]

# Long content — split at paragraph boundaries
long_md = "\n\n".join(["paragraph text"] * 300)
parts = smart_split_content(long_md, max_tokens=100, max_chars=8000)
# [<chunk1>, <chunk2>, ...]
```

## Notas

Funcion pura. Compone `estimate_token_count` para la estimacion de tokens. La estrategia de split es conservadora: acumula parrafos mientras quepan bajo AMBOS limites (tokens Y caracteres). Si un parrafo individual excede cualquier limite se fuerza corte byte a byte cada `max_chars` caracteres. Util para partir documentos grandes antes de enviarlos a LLMs con ventana de contexto limitada.
