Spaces:
Running
Running
File size: 2,661 Bytes
12a7975 2be59fa 12a7975 f1602bc 12a7975 f1602bc 12a7975 f33e4aa 12a7975 f1602bc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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 || '';
}
|