Spaces:
Sleeping
Sleeping
Add application file
Browse files
app.py
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from openai import OpenAI
|
3 |
+
import google.generativeai as genai
|
4 |
+
import os
|
5 |
+
|
6 |
+
client = OpenAI(api_key = os.environ["openai"])
|
7 |
+
def chatgpt_response(text):
|
8 |
+
response = client.chat.completions.create(
|
9 |
+
model="gpt-4o",
|
10 |
+
messages=[
|
11 |
+
{"role": "system", "content": """Eres un asistente médico que ayuda en el proceso asistencial a un médico facilitando la escritura de la historia clínica.
|
12 |
+
Para responder exclusivamente utilizaras la información que se te brinda delimitada entre ``` ```
|
13 |
+
NO AGREGARÁS NI INVENTARÁS INFORMACIÓN EXTRA
|
14 |
+
Basandote en la consulta médica proporciona un resumen conciso y preciso ORGANIZADO en los siguientes campos de una historia clinica:
|
15 |
+
1-motivo de consulta con terminologia medica. Usa terminologia médica CIE-10 (En forma de string)
|
16 |
+
2-enfermedad actual. Detallada como si fuera un profesional de salud (En forma de string)
|
17 |
+
3-antecedentes (En forma de lista)
|
18 |
+
4-medicación (En forma de lista)
|
19 |
+
|
20 |
+
La respuesta debe ser un json y los nombres de las keys deben ser: motivo de consulta, enfermedad actual, antecedentes y medicación
|
21 |
+
"""},
|
22 |
+
{"role": "user", "content": f"""```{text}```"""}
|
23 |
+
],
|
24 |
+
temperature=0
|
25 |
+
)
|
26 |
+
return response.choices[0].message.content.replace('```json','').replace('```','')
|
27 |
+
|
28 |
+
|
29 |
+
|
30 |
+
# Configure key
|
31 |
+
genai.configure(api_key=os.environ["gemini"])
|
32 |
+
conf = genai.types.GenerationConfig(
|
33 |
+
temperature= 0.0,
|
34 |
+
)
|
35 |
+
safety_settings = [
|
36 |
+
{
|
37 |
+
"category": "HARM_CATEGORY_DANGEROUS",
|
38 |
+
"threshold": "BLOCK_NONE",
|
39 |
+
},
|
40 |
+
{
|
41 |
+
"category": "HARM_CATEGORY_HARASSMENT",
|
42 |
+
"threshold": "BLOCK_NONE",
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"category": "HARM_CATEGORY_HATE_SPEECH",
|
46 |
+
"threshold": "BLOCK_NONE",
|
47 |
+
},
|
48 |
+
{
|
49 |
+
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
|
50 |
+
"threshold": "BLOCK_NONE",
|
51 |
+
},
|
52 |
+
{
|
53 |
+
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
|
54 |
+
"threshold": "BLOCK_NONE",
|
55 |
+
},
|
56 |
+
]
|
57 |
+
model = genai.GenerativeModel('gemini-1.0-pro', generation_config=conf,safety_settings=safety_settings)
|
58 |
+
|
59 |
+
def gemini_response(text):
|
60 |
+
response = model.generate_content(f"""Eres un asistente médico que ayuda en el proceso asistencial a un médico facilitando la escritura de la historia clínica.
|
61 |
+
Para responder exclusivamente utilizaras la información que se te brinda delimitada entre ``` ```
|
62 |
+
NO AGREGARÁS NI INVENTARÁS INFORMACIÓN EXTRA
|
63 |
+
Basandote en la consulta médica proporciona un resumen conciso y preciso ORGANIZADO en los siguientes campos de una historia clinica:
|
64 |
+
1-motivo de consulta con terminologia medica. Usa terminologia médica CIE-10 (En forma de string)
|
65 |
+
2-enfermedad actual. Detallada como si fuera un profesional de salud (En forma de string)
|
66 |
+
3-antecedentes (En forma de lista)
|
67 |
+
4-medicación (En forma de lista)
|
68 |
+
|
69 |
+
La respuesta debe ser un json y los nombres de las keys deben ser: motivo de consulta, enfermedad actual, antecedentes y medicación
|
70 |
+
por ej:
|
71 |
+
|
72 |
+
```{{
|
73 |
+
"motivo de consulta": "string",
|
74 |
+
"enfermedad actual": "string",
|
75 |
+
"antecedentes": [
|
76 |
+
"string"
|
77 |
+
],
|
78 |
+
"medicación": [
|
79 |
+
"string"
|
80 |
+
]
|
81 |
+
}}```
|
82 |
+
```{text}```""")
|
83 |
+
return response.text.replace('```json','').replace('```','')
|
84 |
+
|
85 |
+
def process_selection(text, model):
|
86 |
+
if model == "GPT-4o":
|
87 |
+
resumen = chatgpt_response(text)
|
88 |
+
elif model == "Gemini Pro":
|
89 |
+
resumen = gemini_response(text)
|
90 |
+
#print(resumen)
|
91 |
+
resumen = eval(resumen)
|
92 |
+
antecedentes = resumen['antecedentes']
|
93 |
+
antecedentes = ', '.join(antecedentes)
|
94 |
+
resumen['antecedentes'] = antecedentes
|
95 |
+
medicacion = resumen['medicación']
|
96 |
+
medicacion = ', '.join(medicacion)
|
97 |
+
resumen['medicación'] = medicacion
|
98 |
+
return f"""## Motivo de consulta:
|
99 |
+
|
100 |
+
{resumen['motivo de consulta']}
|
101 |
+
|
102 |
+
## Enfermedad actual:
|
103 |
+
|
104 |
+
{resumen['enfermedad actual']}
|
105 |
+
|
106 |
+
## Antecedentes:
|
107 |
+
|
108 |
+
{resumen['antecedentes']}
|
109 |
+
|
110 |
+
## Medicación:
|
111 |
+
|
112 |
+
{resumen['medicación']}
|
113 |
+
|
114 |
+
"""
|
115 |
+
|
116 |
+
examples = [
|
117 |
+
["""Consulta por anemia. Antecedentes de obesidad, HTA, inicio anticonceptivos y a los pocos días las dejo de tomar por hemorragia. Reinicio y volvió a tener sangrado abundante. Tuvo síntomas de taquicardia. Tiene control con medico de cabecera la semana entrante. Refiere palpitaciones y sensación de cansancio. Trae laboratorio HTo 27 Hb 8.9 Hb medicación habitual enalapril 10 mg . Niega signos de sangrado activo. impresiona cuadro de ansiedad de base en contexto de prequirurgico de cx bariatrica.. Anemia. reposo. explico síntomas de anemia, sugiero seguimiento por nutrición y psicología, reevaluar método anticonceptivo. Control ambulatorio de TA. en caso de persistencia de síntomas consultar a guardia .""", "Uma Model"],
|
118 |
+
["""Paciente refiere histórico de hipertensión, refiere estar en un cambio de medicación (tomaba 40mg de telmisartán por dia y ahora losartan 80 mg dos veces al día) hace un mes. Presentó hoy 160/110, refiere haber tomado la pastilla y que bajo para 110/60. Refiere por el aumento de la presion estar sentiendose mal, con un malestar generel, pesadez en la cabeza. No refiere signos de alarma. Consulta para pedir constancia por el dia de hoy para presentar al trabajo. Refiere tener cita con su cardiologo de cabecera el jueves. Refiere estar con situaciones que le ocosionan estres. Como antecedentes refiere historico familiar de HTA.. Trastorno hipertensivo arterial sistémico. Se indican pautas de alarma, que haga control con su cardiologo de cabecera, medidas hieginicas dietarias y que siga con su medicacion habitual.""", "ChatGPT"],
|
119 |
+
["""paciente refiere vomitos y diarrea de 12 horas de evolucion. Gastroenteritis. Reposo en domicilio, crema de bismuto: una cucharada sopera despues de cada deposicion diarreica, reliveran 20 gotas cada 8 horas, tafirol cada 8 horas. DIETA: arroz, fideos y verduras hervidas o al vapor, carne o pollo a la plancha, beber abundante agua, te o mate cocido; colacion con galletas de agua o tostadas y queso untable o mermelada ligth, manzana (pelada) banana o pera EVITAR comida con grasas, salsas, frituras, cremas, encurtidos, embutidos, mate y cafe. Abundante hidratacion con agua, te y mate cocido.""", "Gemini"]
|
120 |
+
]
|
121 |
+
|
122 |
+
iface = gr.Interface(
|
123 |
+
fn=process_selection,
|
124 |
+
inputs=[gr.Textbox(label="Descripción de la consulta"),gr.Dropdown(choices=['GPT-4o','Gemini Pro'], label="Modelo")],
|
125 |
+
outputs="markdown",
|
126 |
+
examples=examples
|
127 |
+
)
|