# Experimental

Este directorio contiene un espacio mínimo y claramente separado para iterar rápidamente sobre nuevas ideas.

> [!WARNING]
> **Contrato de estabilidad:** Todo lo que esté bajo `trl.experimental` puede cambiar o eliminarse en *cualquier* versión (incluidas las versiones de parche) sin una obsolescencia previa. No dependa de estas API para cargas de trabajo de producción.

## Ruta de promoción (simple)

1. **Prototipar fuera del repositorio principal:** Comienza el desarrollo en tu propio fork o en un repositorio separado para iterar rápidamente.
2. **Inclusión experimental:** Cuando esté listo para usuarios iniciales, mueva la idea a `trl.experimental.<feature>`.
3. **Mejorar:** Añadir pruebas, una breve documentación/ejemplo y demostrar el uso.
4. **Promover:** Una vez que la API demuestra ser estable y hay un interés o adopción claros por parte de la comunidad, muévela a `trl.<feature>` (módulo estable).

## Eliminación

Experimental es un área de preparación, no un almacenamiento a largo plazo: una función se promociona o se elimina. La eliminación no requiere un ciclo de obsolescencia, tal como se establece en el contrato de estabilidad anterior. El código sigue disponible en el historial de git, y la entrada del [índice de papers](paper_index) permanece, apuntando a la última versión que incluyó la implementación.

Ningún umbral activa una eliminación. Es una decisión de criterio, tomada en la solicitud de eliminación con los números a la vista de todos. Lo que ese criterio pondera:

- **Uso.** Telemetría, etiquetas del Hub y respuestas en la solicitud de extracción o en un hilo de discusión. Ninguna de ellas es concluyente por sí sola, pero si todas están en silencio, es una señal fuerte.
- **Problemas externos y solicitudes de extracción que surgen de la ejecución de la funcionalidad**, en contraposición a los informes generados mediante el análisis del código.
- **Si un entrenador estable ya lo cubre.** Si es así, eso pesa más que el uso.
- **Coste.** Tiempo de CI, mantenimiento, carga de triaje.
- **Consumidores aguas abajo.** Bibliotecas que lo importan.
- **Propietario.** Alguien que desea que se promueva y está dispuesto a realizar el trabajo.
- **Antigüedad.** Si ha estado disponible el tiempo suficiente para que la comunidad lo encuentre y lo pruebe.

## Preguntas frecuentes

**¿Por qué no usar simplemente ramas?** Porque las ramas no se entregan a los usuarios; el código experimental dentro del paquete permite a los primeros adoptadores probar cosas y dar retroalimentación.

**¿Pueden cambiar o desaparecer estas API sin previo aviso?** Sí. Todo lo que esté dentro de `trl.experimental` puede cambiar o desaparecer en *cualquier* versión.

**¿Debo usar esto en producción?** Solo si no te importa actualizar tu código rápidamente cuando las cosas cambien.

**¿Los mantenedores corregirán rápidamente los problemas en `trl.experimental`?** No necesariamente. El módulo experimental es un espacio de pruebas para nuevas ideas, y los mantenedores pueden no priorizar la corrección de errores ni las solicitudes de funciones allí. Los problemas pueden permanecer sin resolver hasta que (o a menos que) la función pase a la API estable.

**Contribuí una implementación de un paper. ¿Se puede eliminar?** Sí. Cualquier cosa bajo `trl.experimental` puede eliminarse, incluidas las implementaciones de papers. Si eso ocurre, la entrada del [índice de papers](paper_index) se mantiene y apunta a la última versión que incluyó el código.

**¿Cómo silenciar la notificación en tiempo de ejecución?**

Uso: `export TRL_EXPERIMENTAL_SILENCE=1`.

