custom promtp no esstaba funcionando

This commit is contained in:
2025-11-26 00:13:32 -03:00
parent 98f0d94564
commit b867f11450
2 changed files with 64 additions and 25 deletions

View File

@@ -1591,13 +1591,25 @@ VALIDACIÓN DE IMAGEN:
- Si la imagen NO corresponde al contexto de la pregunta (por ejemplo, si piden luces pero muestran motor), indica en "recommendation" que deben cambiar la foto - Si la imagen NO corresponde al contexto de la pregunta (por ejemplo, si piden luces pero muestran motor), indica en "recommendation" que deben cambiar la foto
- Si la imagen es borrosa, oscura o no permite análisis, indica en "recommendation" que tomen otra foto más clara - Si la imagen es borrosa, oscura o no permite análisis, indica en "recommendation" que tomen otra foto más clara
Responde en formato JSON: Responde SOLO en formato JSON válido (sin markdown, sin ```json):
{{ {{
"status": "ok|minor|critical", "status": "ok",
"observations": "Análisis específico según el prompt personalizado, considerando el vehículo {inspection.vehicle_brand if inspection_id else ''}", "observations": "Análisis técnico específico según las instrucciones del prompt personalizado",
"recommendation": "Si la imagen no es apropiada, indica 'Por favor tome una foto de [componente correcto]'. Si es apropiada, da recomendación técnica.", "recommendation": "Acción recomendada basada en el análisis",
"confidence": 0.0-1.0 "confidence": 0.85
}}""" }}
NOTA IMPORTANTE sobre el campo "status":
- Usa "ok" si el componente está en buen estado y pasa la inspección
- Usa "minor" si hay problemas leves que requieren atención pero no son críticos
- Usa "critical" si hay problemas graves que requieren reparación inmediata
RECORDATORIO: En tus observaciones, menciona si el estado es apropiado para el kilometraje y marca/modelo del vehículo."""
if vehicle_context:
user_message = f"Inspecciona esta imagen del vehículo y responde específicamente: {question_obj.text}. Aplica las instrucciones personalizadas y considera el contexto del vehículo en tu análisis."
else:
user_message = f"Inspecciona la imagen y responde específicamente: {question_obj.text}"
else: else:
# Prompt altamente específico para la pregunta # Prompt altamente específico para la pregunta
question_text = question_obj.text question_text = question_obj.text
@@ -1619,21 +1631,27 @@ VALIDACIÓN DE IMAGEN:
- Si la imagen NO corresponde al contexto de la pregunta, indica en "recommendation" que deben cambiar la foto - Si la imagen NO corresponde al contexto de la pregunta, indica en "recommendation" que deben cambiar la foto
- Si la imagen es borrosa o no permite análisis, indica en "recommendation" que tomen otra foto más clara - Si la imagen es borrosa o no permite análisis, indica en "recommendation" que tomen otra foto más clara
Responde en formato JSON: Responde SOLO en formato JSON válido (sin markdown, sin ```json):
{{ {{
"status": "ok|minor|critical", "status": "ok",
"observations": "Respuesta específica a: {question_text}", "observations": "Respuesta técnica específica a: {question_text}",
"recommendation": "Si la imagen no es apropiada, indica 'Por favor tome una foto de [componente correcto]'. Si es apropiada, da acción técnica si aplica.", "recommendation": "Acción técnica recomendada o mensaje si la foto no es apropiada",
"confidence": 0.0-1.0 "confidence": 0.85
}} }}
IMPORTANTE: NOTA IMPORTANTE sobre el campo "status":
- Usa "ok" si el componente está en buen estado y pasa la inspección
- Usa "minor" si hay problemas leves que requieren atención pero no son críticos
- Usa "critical" si hay problemas graves que requieren reparación inmediata
RECUERDA:
- Responde SOLO lo que la pregunta pide - Responde SOLO lo que la pregunta pide
- No des información genérica del vehículo - No des información genérica del vehículo
- Sé específico y técnico - Sé específico y técnico"""
- Si la pregunta es pass/fail, indica claramente si pasa o falla
- Si la pregunta es bueno/regular/malo, indica el estado específico del componente"""
if vehicle_context:
user_message = f"Inspecciona esta imagen del vehículo y responde específicamente: {question_obj.text}. En tus observaciones, menciona si el estado es apropiado para el kilometraje y marca/modelo del vehículo."
else:
user_message = f"Inspecciona la imagen y responde específicamente: {question_obj.text}" user_message = f"Inspecciona la imagen y responde específicamente: {question_obj.text}"
else: else:
# Fallback para análisis general # Fallback para análisis general
@@ -1647,13 +1665,15 @@ Analiza la imagen y proporciona:
3. Observaciones técnicas breves 3. Observaciones técnicas breves
4. Recomendación de acción 4. Recomendación de acción
Responde en formato JSON: Responde SOLO en formato JSON válido (sin markdown, sin ```json):
{{ {{
"status": "ok|minor|critical", "status": "ok",
"observations": "descripción técnica", "observations": "descripción técnica del componente",
"recommendation": "acción sugerida", "recommendation": "acción sugerida",
"confidence": 0.0-1.0 "confidence": 0.85
}}""" }}
NOTA: "status" debe ser "ok" (bueno), "minor" (problemas leves) o "critical" (problemas graves)."""
user_message = "Analiza este componente del vehículo para la inspección general." user_message = "Analiza este componente del vehículo para la inspección general."
if ai_config.provider == "openai": if ai_config.provider == "openai":

View File

@@ -3032,13 +3032,13 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
const filesArray = Array.from(files) const filesArray = Array.from(files)
// Update photos immediately // Update photos immediately
setAnswers({ setAnswers(prev => ({
...answers, ...prev,
[questionId]: { [questionId]: {
...answers[questionId], ...(prev[questionId] || { value: '', observations: '', photos: [] }),
photos: filesArray photos: filesArray
} }
}) }))
// If AI mode is assisted or full, analyze the photos // If AI mode is assisted or full, analyze the photos
if ((checklist.ai_mode === 'assisted' || checklist.ai_mode === 'full') && filesArray.length > 0) { if ((checklist.ai_mode === 'assisted' || checklist.ai_mode === 'full') && filesArray.length > 0) {
@@ -3050,6 +3050,10 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
const question = questions.find(q => q.id === questionId) const question = questions.find(q => q.id === questionId)
if (!question) return if (!question) return
console.log('🔍 Iniciando análisis IA para pregunta:', questionId)
console.log('📸 Archivos a analizar:', files.length)
console.log('🎯 Modo IA del checklist:', checklist.ai_mode)
setAiAnalyzing(true) setAiAnalyzing(true)
try { try {
@@ -3106,9 +3110,11 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
} }
if (analyses.length > 0) { if (analyses.length > 0) {
console.log('✅ Análisis recibidos:', analyses.length)
// Process analysis results // Process analysis results
const firstResult = analyses[0] const firstResult = analyses[0]
const analysis = firstResult.analysis const analysis = firstResult.analysis
console.log('📊 Análisis completo:', analysis)
let suggestedAnswer = null let suggestedAnswer = null
let observationsText = '' let observationsText = ''
@@ -3193,6 +3199,19 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
console.log(`🤖 ASSISTED MODE: Sugerencia agregada a observaciones`) console.log(`🤖 ASSISTED MODE: Sugerencia agregada a observaciones`)
console.log(`📝 Observaciones guardadas:`, `${suggestedAnswer ? `[IA Sugiere: ${suggestedAnswer}]\n` : ''}${observationsText}`) console.log(`📝 Observaciones guardadas:`, `${suggestedAnswer ? `[IA Sugiere: ${suggestedAnswer}]\n` : ''}${observationsText}`)
} }
// Siempre guardar observaciones incluso si no hay modo específico o sugerencia
else if (observationsText) {
setAnswers(prev => ({
...prev,
[questionId]: {
...(prev[questionId] || { value: '', observations: '', photos: [] }),
observations: observationsText,
photos: files,
aiAnalysis: firstResult.analysis
}
}))
console.log(`🤖 Análisis IA guardado en observaciones:`, observationsText)
}
} }
} catch (error) { } catch (error) {
console.error('❌ Error al analizar fotos con IA:', error) console.error('❌ Error al analizar fotos con IA:', error)