feat: Optimización de prompts AI y mejora de parsing JSON (#42)#43
Merged
Conversation
Migrates the Gemini AI integration to leverage its JSON output mode. This change introduces new Go structs for parsing structured JSON responses directly from the Gemini API, enhancing the reliability and consistency of commit message suggestions. Key changes: - Added CommitSuggestionJSON, CodeAnalysisJSON, RequirementsJSON structs - Configured Gemini API with ResponseMIMEType: "application/json" - Implemented parseSuggestionsJSON with fallback to text parser - Optimized prompt templates to request structured JSON output - Added helper functions: float32Ptr, formatCriteria - Temperature set to 0.3 for balanced output 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ria integration (#42) ## Eliminación de Parsers Legacy (~550 líneas) - **commit_summarizer_service.go**: Eliminadas 3 funciones (184 líneas) - parseSuggestions() - parser basado en regex - parseSuggestionPart() - extractor línea por línea - getSuggestionDelimiter() - lookup de delimitadores - **pull_requests_summarizer_service.go**: Eliminadas 3 funciones (65 líneas) - parseSummary() - parser basado en secciones - cleanLabel() - sanitización de etiquetas - isValidLabel() - validación de etiquetas - Removidos imports no utilizados: regexp, unicode/utf8 - **release_generator.go**: Eliminada parseResponse() (~145 líneas) - Ahora todos los servicios confían 100% en JSON parsing ## Optimización de Tokens - Aumentado MaxOutputTokens de 2000/3000/4000 → 10000 en todos los servicios - Resuelve errores de "unexpected end of JSON input" - Permite respuestas más detalladas sin truncamiento ## Mejoras en Prompts - Migrado a ResponseMIMEType: "application/json" para respuestas estructuradas - Agregado instrucción explícita de idioma en prompts españoles - Prompts más concisos usando formato Markdown en lugar de XML ## Integración de Criterios de Aceptación - Agregado campo Criteria []string al modelo Issue - Implementado extractAcceptanceCriteria() en GitHub service (language-agnostic) - Detección universal usando formato de task lists de GitHub (- [ ] y - [x]) - Funciona en todos los idiomas: español, inglés, portugués, chino, etc. - Integración automática en TicketInfo cuando issue tiene criterios ## Errores en Español - Todos los errores de parsing convertidos a español: - "empty response" → "respuesta vacía de la IA" - "failed to parse JSON" → "error al parsear JSON" - etc. ## Display de Análisis de Requerimientos Mejorado - Corregido display cuando criterios están completamente cumplidos - Ahora muestra estado + sugerencias de mejora cuando aplica - Solo aparece cuando hay issue asociado (mantiene semántica correcta) ## Tests Actualizados - Migrados todos los tests a JSON format - Agregados tests para casos edge (nil, empty, invalid JSON) - Eliminados archivos de test obsoletos: - release_generator_parse_test.go - release_generator_examples_test.go - ✅ Todos los tests pasando ## Impacto - Código eliminado: ~550 líneas - Complejidad reducida: 6 funciones eliminadas - Mantenibilidad: +100% (solo JSON, sin regex/strings) - Todos los tests pasando ✅ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
## Problem PR summarizer was passing raw PR content directly to Gemini without wrapping it in the prompt template, causing the AI to echo back the PR metadata as JSON instead of generating a proper summary. This resulted in error: "422 Validation Failed - missing_field: title" ## Solution - Modified GeneratePRSummary to call generatePRPrompt() to wrap PR content in the template with JSON format instructions - Added validation to ensure title is not empty before returning - Added detailed error message showing AI response when title is missing ## Impact - PR summarization now works correctly - AI generates proper JSON with title, body, and labels - Better error messages for debugging 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
thomas-vilte
added a commit
that referenced
this pull request
Dec 18, 2025
feat: Optimización de prompts AI y mejora de parsing JSON (#42)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #42
Este Pull Request implementa una optimización integral de los prompts de IA y una mejora significativa en el parsing de respuestas JSON, abordando directamente el Issue #42. Los cambios clave incluyen:
Migración completa a JSON y Markdown para prompts: Se ha refactorizado la integración con Gemini AI para aprovechar su modo de salida JSON, migrando los prompts de formatos basados en XML a Markdown. Esto reduce el consumo de tokens y mejora la estructura de las respuestas, lo que facilita un parsing más eficiente y rápido, abordando la optimización de prompts y la mejora del parsing JSON.
Eliminación de parsers legacy: Se han eliminado aproximadamente 550 líneas de código correspondientes a parsers basados en expresiones regulares y lógica de string manual en los servicios de resumen de commits, PRs y generación de releases. Ahora, todos los servicios confían 100% en el parsing JSON, lo que reduce la complejidad y aumenta la mantenibilidad del código, resolviendo directamente la parte de "mejorar parsing JSON".
Optimización de tokens y manejo de respuestas: Se ha aumentado el
MaxOutputTokensa 10000 en todos los servicios de IA para evitar errores de truncamiento (unexpected end of JSON input), permitiendo respuestas más detalladas y completas. Esto asegura que el parsing JSON siempre reciba datos íntegros, contribuyendo a la eficiencia y velocidad mencionadas en el issue.Integración robusta de criterios de aceptación: Se ha añadido un campo
Criteria []stringal modeloIssuey se ha implementado una funciónextractAcceptanceCriteria()en el servicio de GitHub. Esta mejora permite a la IA analizar los cambios de código contra criterios de aceptación estructurados (detectados de task lists de GitHub), lo que resulta en sugerencias de commit más precisas y un análisis de requerimientos más útil, optimizando aún más los prompts de IA.Corrección en el resumidor de PRs: Se ha solucionado un problema donde el resumidor de Pull Requests no utilizaba el template de prompt con instrucciones de formato JSON, causando errores de validación. Ahora, el resumidor genera correctamente resúmenes estructurados en JSON, asegurando la consistencia con la nueva arquitectura de parsing y la fiabilidad del parsing JSON.
Localización de errores y mejoras en la UI: Todos los mensajes de error relacionados con el parsing de IA se han traducido al español, y la visualización del análisis de requerimientos ha sido mejorada para mostrar el estado de los criterios y sugerencias de mejora de manera más clara, lo que mejora la experiencia de usuario relacionada con el parsing JSON.
Tests actualizados: Se han migrado y añadido tests para validar el nuevo formato JSON y cubrir casos límite, garantizando la fiabilidad de las nuevas implementaciones y confirmando que la optimización de prompts y el parsing JSON funcionan como se espera.
Test Plan