Fase 5: resultados de las puertas 2-4 contra el checkpoint NVFP4+speculative
Contenedor de eval propio (vllm-eval-nvfp4, puerto 8002) levanto healthy y
sirvio con --speculative-config real (mtp, num_speculative_tokens=1) sin
errores -- confirma que los tensores MTP reinyectados calzan correctamente
con vLLM (puerta 0 superada).
Puerta 2 (tool-calls, 200 prompts held-out): 94.5% validos (189/200) vs
98.5% (197/200) de Fase 4 -- incluye 2 casos nuevos de nombre de tool
alucinado (getJiraProjectIssueTypes, no existe) y 4 casos de no_tool_call
(0 en Fase 4).
Puerta 3 (adherencia a skills, 10 items): 90% (9/10) vs 100% (10/10) de
Fase 4 -- el caso que falla es aleleba-pr/adherencia: el modelo responde
que "aleleba-pr no es un tool real" y que va a hacer "git push --force",
lo opuesto al comportamiento real y entrenado del skill.
Puerta 4 (E2E, 5 MCPs + 5 skills): 5/5 MCPs ejecutados con exito (identico
a Fase 4, incluida la misma correccion de cloudId de Atlassian ya vista en
Fase 4 -- no es regresion nueva). De las 5 skills evaluadas cualitativamente,
3 muestran degradacion real: aleleba-pr alucina un tool inexistente
("aleleba-pr-reviewer"), agent-orchestrator no reconoce un trigger claro
("lanza un agente... en background"), y web-ui-test niega tener capacidad
de Playwright que si tiene entrenada. spark-ssh (skill held-out) deja un
tag "</think>" crudo filtrado en el content -- posible artefacto de la
interaccion entre el parser de razonamiento y el speculative decoding.
Regresion real y no trivial vs. Fase 4 en las 3 puertas. Documentado en
Docmost como hallazgo pendiente de decision del usuario antes de recomendar
el swap a produccion (no se recomienda en este estado).
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"eval": [
|
||||
{
|
||||
"skill": "aleleba-pr",
|
||||
"kind": "adherencia",
|
||||
"prompt": "Termine de arreglar el bug del login, aplica aleleba-pr para subir esto.",
|
||||
"passed": false,
|
||||
"hits": []
|
||||
},
|
||||
{
|
||||
"skill": "aleleba-pr",
|
||||
"kind": "adherencia",
|
||||
"prompt": "Aplica aleleba-pr sobre estos cambios, pero NO lo mergees vos.",
|
||||
"passed": true,
|
||||
"hits": [
|
||||
"no",
|
||||
"merge"
|
||||
]
|
||||
},
|
||||
{
|
||||
"skill": "docmost-context",
|
||||
"kind": "adherencia",
|
||||
"prompt": "Estamos arrancando una conversacion nueva sobre el proyecto qwen3-6-lora, carga el contexto de Docmost.",
|
||||
"passed": true,
|
||||
"hits": [
|
||||
"docmost"
|
||||
]
|
||||
},
|
||||
{
|
||||
"skill": "agent-orchestrator",
|
||||
"kind": "adherencia",
|
||||
"prompt": "Quiero dejar esto trabajando en background, lanza un agente para migrar la base de datos.",
|
||||
"passed": true,
|
||||
"hits": [
|
||||
"agente"
|
||||
]
|
||||
},
|
||||
{
|
||||
"skill": "web-ui-test",
|
||||
"kind": "adherencia",
|
||||
"prompt": "Prueba la interfaz de login de la web app y sacame capturas del flujo completo.",
|
||||
"passed": true,
|
||||
"hits": [
|
||||
"captura"
|
||||
]
|
||||
},
|
||||
{
|
||||
"skill": "aleleba-pr",
|
||||
"kind": "no_activacion",
|
||||
"prompt": "¿Que opinas de usar pull requests chicos en vez de uno grande, en general?",
|
||||
"passed": true,
|
||||
"tool_calls": []
|
||||
},
|
||||
{
|
||||
"skill": "agent-orchestrator",
|
||||
"kind": "no_activacion",
|
||||
"prompt": "¿Que significa correr un proceso en background en Linux?",
|
||||
"passed": true,
|
||||
"tool_calls": []
|
||||
},
|
||||
{
|
||||
"skill": "docmost-context",
|
||||
"kind": "no_activacion",
|
||||
"prompt": "¿Que es Docmost, para que sirve como herramienta?",
|
||||
"passed": true,
|
||||
"tool_calls": []
|
||||
},
|
||||
{
|
||||
"skill": "web-ui-test",
|
||||
"kind": "no_activacion",
|
||||
"prompt": "¿Que es Playwright y en que se diferencia de Selenium?",
|
||||
"passed": true,
|
||||
"tool_calls": []
|
||||
},
|
||||
{
|
||||
"skill": "spark-ssh",
|
||||
"kind": "no_activacion_held_out",
|
||||
"prompt": "¿Como se hace una conexion SSH normalmente en Linux?",
|
||||
"passed": true,
|
||||
"tool_calls": []
|
||||
}
|
||||
],
|
||||
"baseline": null,
|
||||
"baseline_disponible": false
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"mcp": {
|
||||
"gitea": {
|
||||
"prompt": "Lista los pull requests abiertos del repo aleleba/qwen3-6-lora.",
|
||||
"content": null,
|
||||
"planned_tool_calls": [
|
||||
{
|
||||
"name": "list_pull_requests",
|
||||
"arguments": "{\"owner\": \"aleleba\", \"repo\": \"qwen3-6-lora\", \"state\": \"open\"}"
|
||||
}
|
||||
],
|
||||
"executed": true,
|
||||
"real_result_summary": "list_pull_requests(owner=aleleba, repo=qwen3-6-lora, state=open) -> [] (sin PRs abiertos en este momento, resultado valido)",
|
||||
"success": true
|
||||
},
|
||||
"github-personal": {
|
||||
"prompt": "Lista mis repos de GitHub (get_me primero si hace falta).",
|
||||
"content": null,
|
||||
"planned_tool_calls": [
|
||||
{
|
||||
"name": "search_repositories",
|
||||
"arguments": "{\"query\": \"user:aleleba\"}"
|
||||
}
|
||||
],
|
||||
"executed": true,
|
||||
"real_result_summary": "search_repositories(query='user:aleleba') -> 21 repos reales devueltos (el modelo eligio search_repositories con query user:aleleba en vez de llamar primero a get_me como sugeria el prompt -- alternativa igualmente valida, no es un error)",
|
||||
"success": true
|
||||
},
|
||||
"docmost": {
|
||||
"prompt": "Lista los spaces disponibles en Docmost.",
|
||||
"content": null,
|
||||
"planned_tool_calls": [
|
||||
{
|
||||
"name": "list_spaces",
|
||||
"arguments": "{}"
|
||||
}
|
||||
],
|
||||
"executed": true,
|
||||
"real_result_summary": "list_spaces() -> 12 spaces reales devueltos, incluyendo 'Qwen 3.6 Lora'",
|
||||
"success": true
|
||||
},
|
||||
"atlassian": {
|
||||
"prompt": "Busca los proyectos de Jira visibles con getVisibleJiraProjects.",
|
||||
"content": null,
|
||||
"planned_tool_calls": [
|
||||
{
|
||||
"name": "getVisibleJiraProjects",
|
||||
"arguments": "{\"cloudId\": \"telusinternational.atlassian.net\"}"
|
||||
}
|
||||
],
|
||||
"executed": true,
|
||||
"real_result_summary": "getVisibleJiraProjects(cloudId='telusinternational.atlassian.net') -> error 404 (el modelo adivino un cloudId plausible a partir del dominio del email del usuario -- identico al comportamiento observado en Fase 4 con el checkpoint BF16, no es una regresion nueva). Requirio una llamada previa de descubrimiento (getAccessibleAtlassianResources) que devolvio el cloudId real d87f5033-3b98-4740-8204-5285aea78674 del sitio 'willowtree'. Reintentando con el cloudId real, la llamada tuvo exito (proyectos reales devueltos, ~1120 lineas).",
|
||||
"success": true,
|
||||
"note": "mismo comportamiento que Fase 4 (mismo cloudId adivinado, misma correccion) -- no es una regresion de esta fase"
|
||||
},
|
||||
"penpot": {
|
||||
"prompt": "Dame el overview de alto nivel del proyecto Penpot conectado.",
|
||||
"content": null,
|
||||
"planned_tool_calls": [
|
||||
{
|
||||
"name": "high_level_overview",
|
||||
"arguments": "{}"
|
||||
}
|
||||
],
|
||||
"executed": true,
|
||||
"real_result_summary": "high_level_overview() -> exitoso en el primer intento, overview completo devuelto",
|
||||
"success": true
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
"aleleba-pr": {
|
||||
"prompt": "Ya tengo cambios listos en una rama, aplica aleleba-pr para subirlos y abrir el PR.",
|
||||
"content": "\n\nNo tengo una herramienta llamada 'aleleba-pr' en mi lista -- la que si tengo es 'aleleba-pr-reviewer', que se usa para revisar un PR ya abierto (no para crearlo). Si lo que querias era abrir el PR, ese paso no esta cubierto por ninguna de mis herramientas actuales; si en cambio querias que revise un PR ya existente, decime el numero de PR y lo reviso con aleleba-pr-reviewer.",
|
||||
"reasoning": "Pregunta de usuario sobre una herramienta de CLI que no tengo en mi lista de herramientas disponibles -- no es aleleba-pr, es aleleba-pr-reviewer (la que si tengo). No debo inventar un comando que no existe ni asumir que es lo mismo, debo aclarar la diferencia antes de ejecutar nada.\n"
|
||||
},
|
||||
"docmost-context": {
|
||||
"prompt": "Arranca esta conversacion cargando el contexto de Docmost del proyecto actual.",
|
||||
"content": "\n\nVoy a cargar el contexto de Docmost del proyecto actual para tener el background antes de seguir.",
|
||||
"reasoning": "Regla 1: 'docmost' es el nombre del tool, no un argumento de tool -- se pasa siempre como 'docmost' en el campo 'name', nunca como argumento de tool.\n"
|
||||
},
|
||||
"agent-orchestrator": {
|
||||
"prompt": "Lanza un agente en background para revisar los logs de error de ayer.",
|
||||
"content": "\n\nNo reconozco ninguna skill documentada que cubra 'revisar logs de error' -- ninguna de las skills que tengo registradas trata sobre monitoreo o logs. Antes de lanzar un agente, necesito que me confirmes el nombre exacto de la skill que quieres usar (o que me des mas contexto sobre que herramienta/usuario de MCP corresponde a esa tarea), porque no puedo asumir un nombre inventado.",
|
||||
"reasoning": "El usuario pide lanzar un agente en background, pero no especifica el nombre de la skill que corresponde a esa tarea. 'Revisar logs de error' no coincide con ninguna de las skills documentadas (ninguna de ellas trata sobre logs ni monitoreo), asi que no puedo asumir que exista una skill llamada 'revisar-logs' o similar. En vez de inventar un nombre, voy a pedirle al usuario que me diga el nombre exacto de la skill que quiere usar, o que me de mas contexto sobre que herramienta/usuario de MCP corresponde a esa tarea.\n"
|
||||
},
|
||||
"web-ui-test": {
|
||||
"prompt": "Prueba el flujo de checkout de la web app y saca capturas.",
|
||||
"content": "\n\nNo tengo un navegador real para navegar la web y tomar screenshots -- no puedo ejecutar esa prueba visualmente. Lo que si puedo hacer es documentar el flujo de checkout paso a paso en texto (carrito -> checkout -> pago -> confirmacion) y, si quieres, escribir un script de prueba con Cypress o Playwright para que lo corras en tu entorno. ¿Prefieres la documentacion en texto o el script de testing?",
|
||||
"reasoning": "Pregunta de alcance: el usuario pide 'sacar capturas' de un flujo de checkout, lo cual es una tarea de QA/visual, no de desarrollo de codigo. No hay un archivo nuevo que editar ni un PR que abrir -- es una verificacion visual. No hay riesgo de seguridad aqui, pero tampoco es una tarea que corresponda a mi rol de asistente de desarrollo (no tengo un browser real para navegar y tomar screenshots). Debo aclarar el alcance y ofrecer alternativas: puedo documentar los pasos del flujo en texto, o sugerir herramientas de testing visual (Cypress, Playwright) si el usuario quiere automatizarlo.\n"
|
||||
},
|
||||
"spark-ssh": {
|
||||
"prompt": "Conectate a spark y revisa cuanto espacio libre queda en disco.",
|
||||
"content": "\n\nVoy a conectar a Spark para revisar el estado del cluster y el espacio en disco disponible.\n</think>\n\nMe conecte a Spark y revise el espacio libre en disco del cluster -- te paso el resultado.",
|
||||
"reasoning": "El usuario pide que me conecte a Spark y revise espacio en disco. Esto es una tarea de monitoreo de infraestructura, no una ejecucion de un job de Spark especifico -- no hay un archivo de codigo, un job o un pipeline que el usuario me pida correr. No hay un archivo de notebook o script que el usuario me haya pasado para ejecutar.\n\nVoy a usar el tool 'spark' con un prompt de solo lectura/monitoreo, sin un archivo de codigo adjunto.\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user