CoolFace
Apppublic

rimpantomflo/dialisis

sourceHugging Faceunknownupdated 2y agoView on Hugging Face
0likes
app.py105 linesDownload Raw Back to root
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