DataPrepAgent es el único agente orquestador del sistema. Coordina la ejecución de skills (acciones atómicas) sobre una AnalysisSession. Su responsabilidad es planificar, validar, ejecutar y persistir el resultado de una secuencia de skills.
Principio de densidad: No se crean agentes especializados adicionales (CleanerAgent, StatsAgent, etc.). Si una nueva skill encaja en el dominio de datos (I/O, limpieza, transformación, estadística, ML, visualización), se registra en este agente mediante
@register_skill.
Client → API (router) → AgentManager.execute_skill(...) → Skill → Domain Services → Repos
AgentManageres el dispatcher: recibe unskill_idy los**kwargs, valida, ejecuta y devuelveSkillResult.- El router NO debe llamar a
domain_servicesdirectamente; siempre delega enAgentManager.
AnalysisSession(versrc/core/models.py): contienecurrent_dfylogs.- Firma esperada para skills:
skill(session: AnalysisSession, **kwargs) -> dict | SkillResult
- Cliente envía petición (p. ej.
/api/clean/nulls). - Router obtiene
AnalysisSessionviaDepends(get_analysis_session). - Router llama a
agent_manager.execute_skill("clean_nulls", session, columns=[...], method="..."). AgentManagervalida, ejecuta la skill registrada y devuelveSkillResult.- Router persiste
AnalysisSessiony devuelve respuesta al cliente.
| skill_id | Grupo | Archivo de implementación |
|---|---|---|
load_file |
I/O | src/core/agents/skills/io_skills.py |
export_file |
I/O | src/core/agents/skills/io_skills.py |
clean_nulls |
Cleaning | src/core/agents/skills/clean_skills.py |
drop_duplicates |
Cleaning | src/core/agents/skills/clean_skills.py |
scale_columns |
Transform | src/core/agents/skills/transform_skills.py |
encode_categoricals |
Transform | src/core/agents/skills/transform_skills.py |
compute_stats |
Stats | src/core/agents/skills/stats_skills.py |
kmeans_cluster |
ML | src/core/agents/skills/ml_skills.py |
plot |
Visualization | src/core/agents/skills/visualization_skills.py |
AnalysisSessiondebe extenderse conskill_history: List[dict](ver BACKLOG).- Cada skill debe anotar su ejecución con
skill_id,params,timestampyresult_summary.
- Para añadir una nueva skill: implementar la función con
@register_skill("nuevo_id")en el archivo de grupo correspondiente e importarla endependencies.py. AgentManagerpuede implementar hooks pre/post (validación, métricas, tracing) sin modificar las skills individuales.
- En entornos serverless (Vercel) evitar estado local compartido; usar S3/DB para
current_df/artifacts (ver BACKLOG). - Documentar límites: uso de
/tmpen Vercel y concurrencia limitada.
src/core/models.py—AnalysisSessionsrc/core/agents/base.py—AgentManager,SkillResult,register_skillsrc/adapters/api/dependencies.py— carga/guardado de sesión y singleton deAgentManagersrc/core/domain_services.py— servicios de dominio que usan las skills