Spaces:
Running
Running
File size: 3,782 Bytes
35c17ae 12a7975 35c17ae ea0bd00 35c17ae 4f1aa6b 12a7975 35c17ae 12a7975 35c17ae 2be59fa 35c17ae 12a7975 ea0bd00 35c17ae c62149d 4f1aa6b f1602bc 35c17ae f1602bc 35c17ae 12a7975 35c17ae 12a7975 ea0bd00 35c17ae 9003a55 35c17ae 12a7975 4f1aa6b ea0bd00 35c17ae ea0bd00 35c17ae ea0bd00 35c17ae ea0bd00 |
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
// js/analysisModule.js (Revisado y corregido)
export async function analyzeMedical(text) {
if (!text || text.trim() === '') {
console.log("No text provided to analyze.");
return '';
}
// Cargar configuraci贸n de forma segura
const configString = localStorage.getItem('iaConfig');
if (!configString) {
throw new Error('Configuraci贸n IA no encontrada en localStorage. Por favor, configure los proveedores primero.');
}
let cfg;
try {
cfg = JSON.parse(configString);
} catch (e) {
throw new Error('Error al parsear la configuraci贸n IA desde localStorage.');
}
// Validar que la configuraci贸n necesaria existe para evitar errores
if (!cfg || !cfg.llm || !cfg.llm.provider || !cfg.llm.model || !cfg.llm.apiKeys) {
throw new Error('La configuraci贸n del LLM est谩 incompleta o corrupta. Por favor, guarde la configuraci贸n de nuevo.');
}
const provider = cfg.llm.provider;
const model = cfg.llm.model;
const apiKey = cfg.llm.apiKeys[provider];
if (!apiKey) {
throw new Error(`No se encontr贸 la API Key para el proveedor LLM seleccionado: ${provider}.`);
}
// 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 LLM no soportado: ${provider}`);
}
const systemMessage = 'Eres un m茅dico experto especializado en generar informes cl铆nicos breves concisos y estructurados.';
const userPrompt = `Te dar茅 la transcripci贸n detallada de mi conversaci贸n con la paciente y t煤 escribe una descripci贸n breve de la enfermedad actual y la exploraci贸n f铆sica de un paciente en contexto cl铆nico, siguiendo estas caracter铆sticas:\nEnfermedad actual:\n- Incluye la edad, el g茅nero y el motivo de consulta del paciente. (si no te doy alg煤n dato, omite mencionarlo).\n- Detalla brevemente la evoluci贸n de s铆ntomas y su progresi贸n.\n- Describe brevemente los signos y antecedentes relevantes con lenguaje t茅cnico comprensible.\nExploraci贸n f铆sica:\n- Describe brevemente los hallazgos objetivos observados en la exploraci贸n.\n- Usa t茅rminos m茅dicos precisos, sin juicios diagn贸sticos.\nTareas del modelo:\n- Responde de forma concreta 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.\nTranscripci贸n: ${text}`;
let messages;
if (provider === 'openai') {
// Para OpenAI, es com煤n enviar el system prompt como parte del primer mensaje de usuario
messages = [{ role: 'user', content: `${systemMessage}\n\n${userPrompt}` }];
} else {
// Para otros como DeepSeek, el rol 'system' est谩 bien soportado
messages = [
{ role: 'system', content: systemMessage },
{ role: 'user', content: userPrompt }
];
}
const payload = {
model: model,
messages: messages,
temperature: 1
};
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
};
try {
const res = await fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(payload)
});
if (!res.ok) {
const errorBody = await res.text();
console.error("Error response from API:", errorBody);
throw new Error(`Error en la llamada a la API de an谩lisis: ${res.status} - ${res.statusText}`);
}
const data = await res.json();
return data.choices?.[0]?.message?.content || '';
} catch (error) {
console.error("Fallo al ejecutar la solicitud de an谩lisis:", error);
throw error; // Re-lanza el error para que el c贸digo que llama pueda manejarlo
}
} |