rimpantomflo/dialisis
0
1import os2import streamlit as st3import openai4from audiorecorder import audiorecorder5 6# Aplicar estilo personalizado con CSS7st.markdown("""8 <style>9 .stApp {10 background-color: #ffe6e6; /* Fondo rojo suave */11 }12 .stButton button {13 color: red; /* Texto en rojo */14 background-color: white; /* Fondo blanco */15 border: 2px solid red; /* Borde rojo */16 }17 </style>18 """, unsafe_allow_html=True)19 20# Leer la clave API desde la variable de entorno21api_key = os.getenv('OPENAI_API_KEY')22if not api_key:23 st.error("No se ha encontrado la clave API de OpenAI. Por favor, configúrala como una variable de entorno.")24 st.stop()25 26openai.api_key = api_key27 28# Formato del título29st.image("Hospital_Universitari_de_Bellvitge.png", use_container_width=True)30 31# Texto del prompt predeterminado para guiar al usuario32texto_predeterminado = """33Sóc el teu assistent per a preguntes de dieta i la tècnica de la diàlisi a domicili, així com expert en el monitor de diàlisi.34Pots fer les preguntes que vulguis en català o castellà.35Per exemple: Quins aliments haig d'evitar estic en peritoneal?, o com es realitza la diàlisi peritoneal?36"""37prompt = st.text_area("Introdueix la teva pregunta:", value=texto_predeterminado, height=200)38 39# Entrada de audio40st.write("També pots gravar la teva pregunta:")41audio = audiorecorder("Feu clic per gravar", "Feu clic per aturar la gravació")42 43if len(audio) > 0:44 st.audio(audio.export().read(), format="audio/wav")45 with open("audio.wav", "wb") as f:46 f.write(audio.export().read())47 st.success("Gravació completada i desada com a 'audio.wav'.")48 49 # Transcripción del audio utilizando la API de OpenAI50 audio_file = open("audio.wav", "rb")51 transcript = openai.Audio.transcribe("whisper-1", audio_file)52 prompt = transcript["text"]53 st.text_area("Text transcrit de l'àudio:", prompt, height=100)54 55# Definir el mensaje del sistema con instrucciones específicas para el modelo56contexto_prompt = """57Eres un experto en nefrología y nutrición para pacientes con enfermedad renal crónica. Solo responderás preguntas sobre dieta para enfermedad renal crónica y sobre el funcionamiento de la diálisis peritoneal, proporcionando información en un lenguaje accesible y comprensible para pacientes.58"""59 60# Crear botones en la misma fila usando columnas61col1, col2 = st.columns([1, 1])62with col1:63 if st.button("Fer Pregunta"):64 if prompt:65 # Área de texto en Streamlit para mostrar la respuesta en tiempo real66 respuesta_area = st.empty() # Crear un área vacía para actualizar el texto progresivamente67 respuesta_completa = ""68 69 # Llamada a la API en modo de streaming70 for idx, response in enumerate(openai.ChatCompletion.create(71 model="gpt-4o-mini", # Cambia "gpt-4" según el modelo que tienes acceso72 messages=[73 {"role": "system", "content": contexto_prompt},74 {"role": "user", "content": prompt}75 ],76 temperature=0.7,77 max_tokens=1000,78 top_p=1,79 frequency_penalty=0,80 presence_penalty=0,81 stream=True # Activar el modo de transmisión82 )):83 # Concatenar el texto recibido y actualizar el área de texto84 respuesta_completa += response.choices[0].delta.get("content", "")85 respuesta_area.text_area("Resposta:", respuesta_completa, height=700, key=f"respuesta_{idx}")86 87 # Mostrar la respuesta final completa88 respuesta_area.text_area("Resposta:", respuesta_completa, height=700)89 else:90 st.error("Por favor, introduce una pregunta válida.")91 92with col2:93 # Botón que dirige al primer enlace de consejos dietéticos94 if st.button("Consell dietètics 1"):95 st.markdown(96 '<a href="https://www.niddk.nih.gov/health-information/informacion-de-la-salud/enfermedades-rinones/insuficiencia-renal/hemodialisis/alimentacion-saludable-durante" target="_blank">Consells dieta 1</a>',97 unsafe_allow_html=True98 )99 # Botón que dirige al segundo enlace de consejos dietéticos100 if st.button("Consell dietètics 2"):101 st.markdown(102 '<a href="https://medlineplus.gov/spanish/ency/article/002442.htm" target="_blank">Consells dieta 2</a>',103 unsafe_allow_html=True104 )105 