🧠 Integración MedGemma 1.5 - cimad
Resumen
MedGemma 1.5 4B es un modelo médico multimodal de Google diseñado para análisis de imágenes médicas y texto clínico. Esta integración potencia las capacidades de IA de cimad.
Modelo: google/medgemma-1.5-4b-it
Versión: 1.5.0 (Enero 2026)
Licencia: Health AI Developer Foundations Terms of Use
🎯 Capacidades de MedGemma 1.5
Modalidades de Imagen Soportadas
| Modalidad |
Descripción |
Casos de Uso |
| Rayos X (2D) |
Tórax, extremidades, abdomen |
Detección de nódulos, fracturas, patologías |
| Mamografía |
Screening y diagnóstico |
Clasificación BI-RADS, detección de masas |
| TC/RM (3D) |
Volumétrico |
Lung-RADS, análisis de volumen |
| Ecografía |
Tiempo real |
Caracterización de lesiones |
| Patología WSI |
Whole-slide imaging |
Grado tumoral, clasificación |
| Dermatología |
Fotografía clínica |
Clasificación de lesiones cutáneas |
| Oftalmología |
Fondo de ojo |
Retinopatía diabética |
| Documentos |
Labs, informes |
Extracción de datos estructurados |
Tareas Principales
- Análisis de imagen - Identificación y descripción de hallazgos
- Clasificación - BI-RADS, Lung-RADS, TI-RADS, etc.
- Mediciones - Detección de dimensiones
- Localización - Bounding boxes anatómicos
- Comparación longitudinal - Evolución temporal
- Generación de texto - Borradores de informes
- Extracción de datos - PDFs de laboratorio a JSON
📁 Archivos de Integración
src/
├── services/
│ └── medgemmaService.ts # Servicio principal de MedGemma
├── components/
│ └── admin/
│ ├── MedGemmaPanel.tsx # Panel de UI para radiólogos
│ └── AIAssistant.tsx # Asistente IA (existente)
🔧 Configuración
Variables de Entorno
# Google Cloud Model Garden (Producción)
MEDGEMMA_PROVIDER=model-garden
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_REGION=us-central1
GOOGLE_CLOUD_API_KEY=your-api-key
# O Hugging Face (Alternativa)
MEDGEMMA_PROVIDER=huggingface
HUGGINGFACE_API_KEY=your-hf-token
# O Self-hosted (GPU local)
MEDGEMMA_PROVIDER=self-hosted
MEDGEMMA_ENDPOINT=http://localhost:8080/generate
Opciones de Despliegue
| Opción |
Pros |
Contras |
Costo Estimado |
| Google Model Garden |
Producción, escalable, HIPAA |
Requiere GCP |
~$0.01/imagen |
| Hugging Face Endpoints |
Fácil setup, serverless |
Latencia variable |
~$0.06/hora |
| Self-hosted GPU |
Control total, privacidad |
Infraestructura GPU |
Hardware + hosting |
| Demo mode |
Gratis, desarrollo |
Respuestas simuladas |
Gratis |
💻 Uso del Servicio
Análisis de Imagen
import medgemmaService from '../services/medgemmaService';
// Analizar mamografía
const result = await medgemmaService.generateStructuredAnalysis(
{
url: 'https://storage.example.com/mammo.dcm.jpg',
modality: 'MG',
description: 'Mamografía bilateral screening',
},
{
modality: 'MG',
bodyPart: 'Mama',
studyDescription: 'Mamografía Bilateral Digital',
clinicalIndication: 'Screening',
patientAge: 52,
patientGender: 'F',
}
);
if (result.success && result.analysis) {
console.log('Hallazgos:', result.analysis.findings);
console.log('Clasificación:', result.analysis.classification);
// BI-RADS 2 - Hallazgos benignos
}
Chat Conversacional
const chatResult = await medgemmaService.chatWithContext([
{ role: 'user', content: '¿Qué clasificación BI-RADS recomiendas?' }
], [
{ url: imageUrl, modality: 'MG' }
]);
console.log(chatResult.text);
// "Basándome en los hallazgos identificados, recomiendo BI-RADS 2..."
Generación de Texto para Informe
const reportResult = await medgemmaService.suggestReportText(
analysis.findings,
studyContext
);
// Devuelve texto estructurado con secciones:
// TÉCNICA, HALLAZGOS, CONCLUSIÓN, RECOMENDACIÓN
Comparación Longitudinal
const compareResult = await medgemmaService.compareLongitudinal(
{ url: currentStudyUrl, modality: 'XR' },
{ url: priorStudyUrl, modality: 'XR' },
studyContext
);
// Analiza cambios, progresión o regresión de hallazgos
Extracción de Documentos
const labResult = await medgemmaService.extractDocumentData({
url: labReportPdfUrl,
modality: 'DOC',
});
// Extrae valores, unidades y rangos de referencia en JSON
🖥️ Componente MedGemmaPanel
Uso en Worklist
import MedGemmaPanel from '@components/admin/MedGemmaPanel';
<MedGemmaPanel
studyContext={{
modality: 'MG',
bodyPart: 'Mama',
studyDescription: 'Mamografía Bilateral',
clinicalIndication: 'Screening',
patientAge: 52,
patientGender: 'F',
}}
currentImageUrl={selectedImageUrl}
onInsertReportText={(text) => {
// Insertar texto en el editor de informes
reportEditor.insertText(text);
}}
onSelectFinding={(finding) => {
// Mostrar hallazgo en el visor DICOM
dicomViewer.highlightRegion(finding.boundingBox);
}}
/>
Características del Panel
- 🔍 Tab Análisis - Botón para analizar, lista de hallazgos con severidad y confianza
- 💬 Tab Chat - Conversación con la IA sobre el estudio
- 📝 Tab Informe - Generación y inserción de texto
📊 Benchmarks de Rendimiento
Clasificación de Imágenes
| Dataset |
Métrica |
MedGemma 1.5 |
Gemma 3 Base |
| MIMIC CXR (top 5) |
Macro F1 |
89.5% |
81.2% |
| CheXpert |
Macro F1 |
48.2% |
32.6% |
| PathMCQA (patología) |
Accuracy |
70.0% |
37.1% |
| EyePACS (fundus) |
Accuracy |
76.8% |
14.4% |
Texto Médico
| Benchmark |
MedGemma 1.5 |
| MedQA (4-op) |
69.1% |
| MedMCQA |
59.8% |
| MMLU Med |
69.6% |
Documentos
| Tarea |
Métrica |
MedGemma 1.5 |
| PDF→JSON Labs |
Macro F1 |
91% |
| EHR Note QA |
Accuracy |
80.4% |
⚠️ Limitaciones y Consideraciones
Uso Responsable
- No es diagnóstico final - MedGemma es una herramienta de asistencia, no reemplaza al radiólogo
- Requiere validación - Todos los hallazgos deben ser verificados por un profesional
- Sesgo en datos - Entrenado principalmente en datos de EEUU/Europa
- Single-image optimizado - No optimizado para múltiples imágenes simultáneas
Requisitos Regulatorios
- ❌ No aprobado por FDA/CE como dispositivo médico independiente
- ✅ Uso permitido como herramienta de desarrollo y asistencia
- 📋 Documentación - Mantener logs de uso para auditoría
Privacidad
- Las imágenes NO se almacenan permanentemente por MedGemma
- Para HIPAA compliance, usar Google Model Garden en VPC
- Considerar anonimización de datos de paciente en prompts
🚀 Roadmap de Integración
Fase 1 - MVP ✅
Fase 2 - Producción ✅
Fase 3 - Avanzado ✅
📦 Componentes de Fase 3
DicomViewer con Bounding Boxes
// Archivo: src/components/admin/DicomViewer.tsx
// Nueva funcionalidad: overlay SVG para hallazgos IA
interface AIFindingOverlay {
id: string;
description: string;
location: string;
severity: 'normal' | 'benign' | 'indeterminate' | 'suspicious' | 'malignant';
confidence: number;
birads?: number;
boundingBox?: [number, number, number, number]; // [x, y, width, height] normalizado 0-1
visible: boolean;
}
// Uso: Botón "Analizar IA" en toolbar del visor
Comparación Longitudinal
// Archivo: src/components/admin/LongitudinalComparison.tsx
import LongitudinalComparison from './LongitudinalComparison';
<LongitudinalComparison
currentStudy={study}
priorStudies={priorStudies}
onClose={() => setShowComparison(false)}
onAddToReport={(text) => appendToReport(text)}
/>
Extracción de Laboratorios
// Archivo: src/components/admin/LabExtractor.tsx
import LabExtractor, { LabPanel, LabResult } from './LabExtractor';
<LabExtractor
patientId="PAT123"
patientName="García López, María"
onExtracted={(panels: LabPanel[]) => saveLabResults(panels)}
/>
Sistema de Alertas Críticas
// Archivo: src/components/admin/CriticalAlertSystem.tsx
import {
AlertProvider,
AlertToastContainer,
AlertBadge,
useImagingAlerts
} from './CriticalAlertSystem';
// En layout principal:
<AlertProvider enableSound={true}>
<App />
<AlertToastContainer />
</AlertProvider>
// En componentes que detectan hallazgos:
const { alertForFinding } = useImagingAlerts();
alertForFinding({
description: 'Nódulo irregular de 15mm',
location: 'CSE mama derecha',
severity: 'suspicious',
birads: 4,
confidence: 0.92,
patientName: 'García López, María',
});
🔗 Servicios Google Cloud Integrados
| Servicio |
Archivo |
Endpoint |
Descripción |
| MedGemma 1.5 |
medgemmaService.ts |
/api/medgemma |
Análisis de imágenes médicas |
| Gemini 2.0 Flash |
geminiService.ts |
/api/gemini |
Chat conversacional |
| Speech-to-Text |
googleSpeechService.ts |
/api/speech-to-text |
Dictado con Chirp 2 |
| Text-to-Speech |
googleTTSService.ts |
/api/text-to-speech |
Síntesis de voz Neural2 |
Secrets Configurados (Cloudflare Pages)
GOOGLE_CLOUD_PROJECT # ID del proyecto GCP
GOOGLE_CLOUD_REGION # Región (us-central1)
GOOGLE_CLOUD_CLIENT_EMAIL # Email del service account
GOOGLE_CLOUD_PRIVATE_KEY # Clave privada RSA (PEM)
📚 Referencias
Última actualización: Enero 2026