feat: AI prompts personalizados por pregunta - backend v1.0.13, frontend v1.0.21
Backend: - Agregar campo ai_prompt a tabla questions - Endpoint analyze-image recibe custom_prompt - Validación de imagen apropiada (sugiere cambiar foto si no corresponde) - Script de migración migrate_ai_prompt.py Frontend: - Campo de texto para configurar prompt de IA en editor de preguntas - Envía custom_prompt al endpoint de análisis - UI con fondo morado para sección de IA La IA ahora analiza fotos según el contexto específico de cada pregunta y sugiere cambiar la imagen si no corresponde al componente solicitado.
This commit is contained in:
@@ -910,7 +910,8 @@ function QuestionsManagerModal({ checklist, onClose }) {
|
||||
max_photos: 3,
|
||||
requires_comment_on_fail: false,
|
||||
parent_question_id: null,
|
||||
show_if_answer: ''
|
||||
show_if_answer: '',
|
||||
ai_prompt: ''
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
@@ -967,7 +968,8 @@ function QuestionsManagerModal({ checklist, onClose }) {
|
||||
max_photos: 3,
|
||||
requires_comment_on_fail: false,
|
||||
parent_question_id: null,
|
||||
show_if_answer: ''
|
||||
show_if_answer: '',
|
||||
ai_prompt: ''
|
||||
})
|
||||
loadQuestions()
|
||||
} else {
|
||||
@@ -1158,6 +1160,26 @@ function QuestionsManagerModal({ checklist, onClose }) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* AI Prompt */}
|
||||
<div className="bg-purple-50 border border-purple-200 rounded-lg p-4">
|
||||
<h4 className="text-sm font-semibold text-purple-900 mb-3">🤖 Prompt de IA (opcional)</h4>
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-gray-700 mb-1">
|
||||
Prompt personalizado para análisis de fotos
|
||||
</label>
|
||||
<textarea
|
||||
value={formData.ai_prompt}
|
||||
onChange={(e) => setFormData({ ...formData, ai_prompt: e.target.value })}
|
||||
className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500"
|
||||
rows="3"
|
||||
placeholder="Ej: Analiza si las luces delanteras están encendidas y funcionando correctamente. Verifica que ambas luces tengan brillo uniforme y no presenten daños visibles."
|
||||
/>
|
||||
<p className="text-xs text-gray-500 mt-1">
|
||||
Este prompt guiará a la IA para analizar las fotos específicamente para esta pregunta. Si la foto no corresponde al contexto, la IA sugerirá cambiarla.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-3 gap-4">
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-gray-700 mb-1">
|
||||
@@ -2289,6 +2311,11 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
|
||||
const API_URL = import.meta.env.VITE_API_URL || ''
|
||||
|
||||
console.log(`🤖 Analizando ${files.length} foto(s) con IA para pregunta: ${question.text}`)
|
||||
|
||||
// Use custom AI prompt if available
|
||||
if (question.ai_prompt) {
|
||||
console.log(`📝 Usando prompt personalizado: ${question.ai_prompt.substring(0, 50)}...`)
|
||||
}
|
||||
|
||||
// Analyze each photo
|
||||
const analyses = []
|
||||
@@ -2296,6 +2323,11 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
formData.append('question_id', question.id.toString())
|
||||
|
||||
// Include custom prompt if available
|
||||
if (question.ai_prompt) {
|
||||
formData.append('custom_prompt', question.ai_prompt)
|
||||
}
|
||||
|
||||
const response = await fetch(`${API_URL}/api/analyze-image`, {
|
||||
method: 'POST',
|
||||
|
||||
Reference in New Issue
Block a user