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 || '';
}