import { llmProviders } from './iaConfigModule.js'; // Módulo de análisis médico con LLM configurado (llamadas front-end) export async function analyzeMedical(text) { if (!text) return ''; const cfg = JSON.parse(localStorage.getItem('iaConfig')) || {}; const provider = cfg.llm.provider; const provObj = llmProviders.find(p => p.value === provider) || {}; // Obtener API key adecuada del proveedor const apiKey = cfg.llm.apiKeys?.[provider] ?? cfg.llm.apiKey; const model = cfg.llm.model; // Determinar endpoint según proveedor let url; if (provider === 'openai') { url = 'https://api.openai.com/v1/chat/completions'; } else if (provider === 'deepseek') { url = 'https://api.deepseek.com/v1/chat/completions'; } else { throw new Error('Proveedor no soportado'); } const systemMessage = 'Eres un médico experto especializado en generar informes clínicos concisos y estructurados.'; const userPrompt = `Te daré la transcripción detallada de mi conversación con la paciente y tú escribe una descripción detallada de la enfermedad actual y la exploración física de un paciente en contexto clínico, siguiendo estas características:\n Enfermedad actual:\n- Incluye la edad, el género y el motivo de consulta del paciente. (si no te doy el dato, omite).\n- Detalla evolución de síntomas y su progresión.\n- Describe signos y antecedentes relevantes con lenguaje técnico comprensible.\n Exploración física:\n- Describe hallazgos objetivos observados en la exploración.\n- Usa términos médicos precisos, sin juicios diagnósticos.\n Tareas del modelo:\n- Responde en dos párrafos, sin títulos 'Enfermedad actual:' ni 'Exploración física:'.\n- El primero para la enfermedad actual.\n- El segundo para la exploración.\n Transcripción: ${text}`; let messages; if (provider === 'openai') { // Some OpenAI models don't support 'system' role messages = [ { role: 'user', content: `${systemMessage}\n\n${userPrompt}` } ]; } else { messages = [ { role: 'system', content: systemMessage }, { role: 'user', content: userPrompt } ]; } // Enviar solicitud directa al proveedor const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` }; const payload = { model, messages, temperature: 0.5 }; const res = await fetch(url, { method: 'POST', headers, body: JSON.stringify(payload) }); if (!res.ok) { const err = await res.text(); throw new Error(`Error en análisis médico: ${res.status} ${err}`); } const data = await res.json(); return data.choices?.[0]?.message?.content || ''; }