epigen-chatbot / app.py
Jesus del Carmen Valdiviezo
texto barra lateral a espanol
67ca94e
import os
from langchain_huggingface import HuggingFaceEndpoint
import streamlit as st
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
# Gemini
import google.generativeai as genai
from langchain_google_genai import ChatGoogleGenerativeAI
# Voice
import speech_recognition as sr
from gtts import gTTS
import tempfile, os
from audio_recorder_streamlit import audio_recorder
#from io import BytesIO
####
#import pyttsx3
#from io import BytesIO
#import tempfile
#import os
#from functools import lru_cache
import asyncio
import edge_tts
from io import BytesIO
#
import re
import emoji
# Define your knowledge content at the top level of your script
knowledge_content = """
# Datos de Epigen
- WhatsApp: 5544918977
- Direccion: Avenida de los Insurgentes 601, 03810 Col. Nápoles, CDMX, CP:03100
- Sitio Web: https://epigen.mx/
- Facebook: https://www.facebook.com/share/19twC6nMZH/?mibextid=LQQJ4d
- Instagram: https://www.instagram.com/epigen.mx?igsh=MTVkbXphaDI5dnl4ZA==
- Publico objetivo: Hombre o mujer que busque mejorar su salud y estilo de vida con pruebas químicas y de ADN preventivas. El cliente ya cuenta con tendencia sintomatica.
- Propuesta de valor:
1. Toma el control de tus hábitos
2. Domina tu cuerpo
3. Sé el dueño de tu propio cuerpo, domina tus padecimientos
4. Entender tu cuerpo y conocerlo
5. Modificar la expresión de tus genes
6. Prevenir enfermedades
7. Checar tu estado de salud
# Productos:
## Test de prevención diabetes e infartos al corazón.
Enlace a video explicativo: https://drive.google.com/file/d/18PZYmAfmWiG3U8uvSnvKC1xlTzqO6q9Z/view?usp=sharing
Que contiene:
1. Prueba rápida (HbA1c) hemoglobina glicosilada
Provistos:
- Instructivo de uso
- Prueba rápida en cartucho
- Gotero
- Vial con reactivo de corrimiento (Buffer)
- Tubo capilar
- Lanceta (punción capilar)
- Almohadilla con alcohol (punción capilar)
2. Prueba rápida de NT-proBNP:
Prueba rápida en cartucho
- Gotero
- Reactivo de corrimiento (Buffer)
- Instructivo de uso.
¿Qué es la prueba NT-proBNP?
Es un análisis de sangre que mide una proteína liberada por el corazón cuando está bajo estrés. Ayuda a detectar y monitorear problemas como insuficiencia cardíaca.
Beneficios de la prueba NT-proBNP:
- Detecta problemas temprano, incluso antes de síntomas.
- Aclara síntomas como falta de aire o cansancio, diferenciando problemas cardíacos de otros.
- Monitorea tratamientos para enfermedades cardíacas.
¿Qué es HbA1c?
Esta prueba es como un reporte trimestral de tus niveles de azúcar en sangre. No mide lo que comiste ayer, sino cómo ha estado tu azúcar en los últimos 2-3 meses.
¿Por qué es útil la prueba HbA1c?
- Detectar y controlar la diabetes: Si tienes diabetes o estás en riesgo, nos ayuda saber si tu estilo de vida está funcionando.
- Prevenir complicaciones: Conocer tu HbA1c puede ayudarte a evitar problemas en el corazón, los riñones y los ojos, ya que el azúcar elevado puede dañarlos con el tiempo.
Las 2 pruebas (HbA1c y NT-proBNP) no son invasivas y te dan tranquilidad sobre la salud de tu corazón y que tu glucosa está trabajando bien. ¡Una gran inversión para Si tienes antecedentes familiares de problemas cardíacos, diabetes síntomas como cansancio inexplicable, mucha sed, manchas oscuras en el cuello o axilas, o simplemente quieres asegurarte de que tu corazón y glucosa está en buen estado. ¡Invierte en tu tranquilidad y bienestar!
## Test antiinflamatorio-segundo cerebro - intestino.
Enlace a video explicativo: https://drive.google.com/file/d/1PzO3sOkxQ4hQOkpzs3BgD2eTDb2feDlR/view?usp=sharing
¿Qué contiene?
1. Prueba rápida de Calprotectina (heces) es un inmunoensayo cromatográfico de flujo lateral para la detección cualitativa de calprotectina en muestras de heces.
Contiene:
- Prueba rápida en cartucho
- Instructivo de uso
- Tubo colector con reactivo de corrimiento
- Gotero
2. Prueba rapida H. Pylori:
- Material para venopunción
- Centrifuga
- Lanceta (punción capilar)
- Almohadilla con alcohol
¿Qué es la calprotectina?
Es una prueba que mide la inflamación en tu intestino. Es como un detector de problemas que nos dice si hay algo fuera de lo normal en tu sistema digestivo, como enfermedades inflamatorias (por ejemplo, colitis o enfermedad de Crohn).
¿Qué es el H. pylori?
El H. pylori es una bacteria que puede vivir en tu estómago y causar molestias como gastritis, úlceras e incluso aumentar el riesgo de otros problemas más graves si no se trata. Esta prueba detecta si la bacteria está presente.
¿Qué tienen en común estas pruebas (calprotectina y H. pylori)?
Ambas nos ayudan a identificar por qué tienes síntomas como dolor abdominal, diarrea, hinchazón, o acidez. Juntas, nos dan un panorama completo:
Calprotectina: Indica si hay inflamación en el intestino.
H. pylori: Busca si la bacteria está afectando tu estómago.
¿Qué beneficios obtienes al hacerte ambas pruebas?
- Diagnóstico temprano: Detectamos problemas como inflamación o infecciones antes de que empeoren.
- Alivio de síntomas: Puedes mejorar tu calidad de vida al resolver molestias digestivas como dolor, acidez o diarrea.
- Prevención de complicaciones: Evitas que pequeñas molestias se conviertan en enfermedades más graves, como úlceras o problemas intestinales crónicos.
Si tienes molestias digestivas, estas pruebas son tu mejor aliado para entender qué pasa y solucionarlo antes de que sea más serio. ¡Con ellas, damos un paso firme hacia un sistema digestivo saludable y una mejor calidad de vida sin inflamación!
## Test perdida de peso (Mujer)
Enlace a video explicativo: https://drive.google.com/file/d/1lPxL9qlaZ-knZnTlSDPxBpXti1q_S8OB/view?usp=sharing
Que contiene?
1. La prueba TSH (sangre/suero/plasma) es un inmunoensayo cromatográfico rápido para la detección cualitativa de la hormona estimulante de la tiroides (TSH) en sangre, suero o plasma humano.
Contiene:
- Cartucho de prueba
- Gotero
- Buffer
- Manual de instrucciones.
2. Prueba rápida de Calprotectina (heces) es un inmunoensayo cromatográfico de flujo lateral para la detección cualitativa de calprotectina en muestras de heces.
Contiene:
- Prueba rápida en cartucho
- Instructivo de uso
- Tubo colector con reactivo de corrimiento
- Gotero
Estas dos pruebas son como detectives que nos ayudan a entender si hay algo detrás de la dificultad para bajar de peso o de otros síntomas que puedas estar sintiendo. Te explico cómo funcionan y cómo pueden ayudarte:
¿Qué es la prueba de calprotectina?
Esta prueba analiza una proteína en tus heces para detectar si hay inflamación en tu intestino. ¿Por qué importa para la pérdida de peso? Porque una inflamación intestinal puede dificultar la absorción de nutrientes, causar molestias digestivas como hinchazón o diarrea, y afectar tu metabolismo.
¿Qué es la prueba de TSH?
Es una prueba de sangre que mide cómo está funcionando tu tiroides, una glándula clave para el control del peso. Si tienes una tiroides lenta (hipotiroidismo), tu metabolismo puede estar más lento, lo que hace que perder peso sea más difícil, además de causar cansancio y retención de líquidos.
¿Cómo se complementan estas pruebas (calprotectina y TSH)?
Juntas nos dan un panorama completo de dos aspectos clave para tu salud y peso:
- Inflamación intestinal (calprotectina): Nos ayuda a detectar si hay problemas digestivos que están afectando tu bienestar y peso.
- Función metabólica (TSH): Nos dice si tu tiroides está funcionando correctamente para mantener tu metabolismo activo.
¿Qué beneficios obtienes al hacer estas pruebas?
- Descubrir la raíz del problema: Si estás batallando con el peso o sientes síntomas como hinchazón, fatiga o cambios en el apetito, estas pruebas nos dicen si el problema viene del intestino, la tiroides o ambos.
- Plan personalizado: Con los resultados, podemos ajustar tu alimentación.
- Optimizar tu metabolismo: Si tu tiroides no está funcionando bien, podemos corregirlo y activar tu metabolismo para que perder peso sea más fácil.
- Mejorar tu digestión: Resolver problemas intestinales no solo mejora tu bienestar general, sino que también ayuda a que tu cuerpo aproveche mejor los nutrientes y elimine toxinas de manera efectiva.
Estas pruebas son como un mapa que nos guía para identificar y resolver cualquier obstáculo que esté afectando tu peso y tu salud en general. ¡Con ellas, damos el primer paso hacia una vida más saludable y un peso equilibrado!
## Test perdida de peso (Hombre)
¿Qué contiene?
1. Prueba rápida de Calprotectina (heces) es un inmunoensayo cromatográfico de flujo lateral para la detección cualitativa de calprotectina en muestras de heces.
Contiene:
- Prueba rápida en cartucho
- Instructivo de uso
- Tubo colector con reactivo de corrimiento
- Gotero
2. La prueba rápida Micro albumina cualitativa (Orina) es un inmunoensayo cromatográfico de flujo lateral para la detección cualitativa de albúmina en muestras de orina.
Contiene:
- Prueba rápida en cartucho
- Instructivo de uso
- Gotero
Inflamacion en tus intestino. Esto es importante porque una inflamación puede causar problemas digestivos, como hinchazón, diarrea o mala absorción de nutrientes, lo que puede dificultar la pérdida de peso y afectar tu bienestar.
¿Qué es la prueba de albúmina en orina?
Esta prueba evalúa si hay presencia de albúmina, una proteína que normalmente no debería estar en la orina. Si aparece, puede ser una señal de que tus riñones están bajo estrés o no están funcionando al 100%. Los riñones sanos son esenciales para eliminar toxinas y líquidos, procesos importantes en el control del peso.
¿Cómo se complementan estas pruebas (calprotectina y albúmina en orina)?
Ambas trabajan juntas para darnos una visión de dos aspectos importantes:
- Digestión y absorción (calprotectina): Si hay inflamación intestinal, puede afectar cómo tu cuerpo procesa los alimentos y cómo se siente en general.
- Eliminación y función renal (albúmina en orina): Detectar problemas en los riñones asegura que tu cuerpo esté eliminando toxinas y líquidos de forma efectiva, algo fundamental para un metabolismo saludable.
¿Qué beneficios obtienes al realizarte estas pruebas?
- Identificar obstáculos invisibles: Si tienes problemas para perder peso, síntomas digestivos o hinchazón, estas pruebas nos ayudan a detectar si el problema viene del intestino o de los riñones.
- Prevenir complicaciones: Detectar problemas intestinales o renales a tiempo evita complicaciones más serias que puedan afectar tu salud.
- Plan de acción personalizado: Con los resultados, podemos ajustar tu dieta, tratamiento o hábitos para mejorar la salud intestinal y renal, ayudando a que pierdas peso de manera más efectiva.
- Mejor calidad de vida: Resolver estos problemas te hará sentir con más energía, menos hinchado y con un sistema que funcione mejor.
Resumen: Estas pruebas son como un chequeo profundo de tu sistema digestivo y renal, dos pilares fundamentales para una pérdida de peso saludable. ¡Son el primer paso para entender qué está pasando y ayudarte a alcanzar tus metas de manera segura y efectiva!
## Test Epigenetico
Enlace a video explicativo: https://drive.google.com/file/d/1PFxFPTXlYNpgLMWB_wFJMl78lS9YPloH/view?usp=sharing
Modifica la expresión de tus genes hasta en un 97% con nuestro test epigenético. Gracias a toda la información que nos da personalizada de ti. Es un traje a la medida para tus necesidades en base a:
- Vitaminas ideales para ti en las dosis correctas reforzando el sistema inmunológico-intestino y cardiaco.
- Renovación y ajuste de tu microbiota intestinal
- Desintoxicación de metales pesados- químicos hidrocarburos- Radiación
- Que alimentos no van contigo y cual si por 90 días.
# Como realizar las pruebas:
## Paso a paso del proceso del paciente durante su tratamiento solo kits:
- Prevención diabetes-Infartos
Video de como realizar la prueba: https://drive.google.com/file/d/18PZYmAfmWiG3U8uvSnvKC1xlTzqO6q9Z/view?usp=sharing
- Inflamación-Intestino
Video de como realizar la prueba: https://drive.google.com/file/d/11wlB1UtxLNy8m1DnT8tUUYuydf42ODXZ/view?usp=sharing
- Bajar de peso
Video de como realizar la prueba: https://drive.google.com/file/d/1jZWQHGNv90Xrm-fdAHo769bN1ORg7jRE/view?usp=sharing
Paso 1: Le llega el paquete - Realiza la prueba. Manda sus resultados en foto al whatsapp
Paso 2: Confirmamos de recibido y comentar que en 24 horas o menos estar recibiendo la interpretación de sus resultados así como la consulta grabada por una IA donde sera mi voz explicando los pasos a seguir. Así como trazar metas y objetivos a 2 meses. Ya que es un proyecto a 2 meses.
Paso 3: Recepción de documentos-Video. Que mandaremos?
- Plan de alimentos de acuerdo a su padecimiento.
- Suplementación natural así como adaptógenos adecuados a su padecimiento.
- Protocolos adecuados a su padecimiento y de acuerdo al cuestionario contestado previamente como: Mejorar el sueño, desintoxicacion y ayuno.
- Lo añadiremos a nuestra comunidad donde daremos conferencias e información valiosa de salud, alimentación entre otras.
Paso 4: Contacto por whatsapp en todo momento. Pero al mes nosotros contactaremos par ver avances y ajuste a sus planes si se requiere.
Paso 5: A los 2 meses de haber terminado su proyecto. Lo contactamos. Retroalimentación y resultados
Recomendamos un nuevo test para validar resultados así como tendrá beneficios de descuento por ser cliente
## Paso a paso del proceso del paciente durante su tratamiento solo kits:
- Epigenético
Video de como realizar la prueba: https://drive.google.com/file/d/1TQJlHe3_wnFCU-LxaWbQTGxiMr_dXDb1/view?usp=sharing
Paso 1: Le llega el paquete - Se quita el cabello y manda sus resultados. Nosotros estaremos mandando pinzas para quitar el cabello, bolsa para colocar el cabello y la guía para que mande de regreso el cabello a nuestra oficina.
Paso 2: Cuando tengamos el paquete de cabello Confirmamos de recibido y comentar que en 24 horas o menos estar recibiendo.
La Interpretación de sus resultados así como la consulta grabada por una IA donde sera mi voz explicando los pasos a seguir. Así como trazar metas y objetivos a 3 meses. Ya que es un proyecto a 3 meses ya que el ciclo celular dura 3 meses.
Paso 3: Recepción de documentos- Video. Que mandaremos?
- Plan de alimentos de acuerdo a su padecimiento.
- Suplementación de acuerdo al estudio de epigenetica.
- Protocolos de acuerdo al test como microbiota, desintoxicación, mejora el sueño.
- Lo añadiremos a nuestra comunidad donde daremos conferencias e información valiosa de salud, alimentación entre otras.
Paso 4: Contacto por whatsapp en todo momento. Pero al mes y medio nosotros lo contactaremos par ver avances y ajuste a sus planes si se requiere.
Paso 5: A los 3 meses de haber terminado su proyecto. Lo contactamos. Retroalimentación y resultados
Recomendamos un nuevo test para validar resultados así como tendrá beneficios de descuento por ser cliente
# Seguimiento para despues de hacerse los tests
Despues de que el paciente realiza un test epigenético inicial:
1. Se aplica un cuestionario de evaluación específico según el objetivo
2. Se implementa un régimen de ayuno intermitente
3. Se asignan suplementos según los resultados del test y preguntas del cuestionario
4. Se asigna un plan de alimentación específico (Fase 1, Fase 1.0, etc. o Fase 27 para intestino) - La duración del protocolo es de dos meses
5. Se recomienda un segundo test para validar resultados y ajustar el plan
## Cuestionario general para despues de un test
Preguntas para cualquier paciente haya salido positivo o negativo en el test.
- ¿Qué objetivo y metas tienes al realizar este test?
- ¿Tomas alguna medicina actualmente ?
- ¿Cuál tomás y en qué momento del día lo consumes?
- ¿Tienes buena calidad de sueño ?
- ¿Cuántas horas duermes?
- ¿Te cuesta trabajo generar sueño, estás despertando en la noche o ambas?
- ¿Tienes energía durante el día del 1 al 5 siendo el cinco mayor que tanta energía tienes?
- ¿Te despiertas cansado o la energía se va terminando en el día?
- ¿Te sientes irritable de mal humor en el día a día con poca tolerancia?
- ¿Tienes buen dinamismo mental, lucidez o se te están olvidando las cosas, te cuesta trabajo concentrarte, niebla mental?
- ¿Estrés laboral o personal del 1 al 5 cuánto tienes, siendo el 5 el mayor qué tanto estrés tienes?
- ¿A qué hora es tu último alimento del día ?
- ¿A qué hora es tu primer alimento del día?
- ¿Que seria mas facil para ti dejar de cenar o desayunar?
- ¿Con que te sentiras mas agusto, un menú con opciones o una lista de alimentos?
- ¿Que tan adicto estas a la azúcares del 1 al 5 siendo el cinco el mayor, carbohidratos(pan, pasta, tortilla, arroz, avena, frijoles, harinas, frutas, dulces, papitas, refrescos?
- ¿Tienes buena digestión?
- ¿Te inflamas de tu estómago regularmente?
- ¿Cómo son tus heces fecales? (tiritas delgadas, bolitas, pedaceria, líquido, troncos grueso normales como una salchicha)
- ¿Cuántas veces comes en el día contando snack o entrecomidas?
- ¿Consideras que masticas bien la comida?
- ¿Qué más has intentado para bajar de peso?
- ¿Por qué abandonan las dietas?
- ¿Cómo podríamos hacer este proceso más facil para ti?
- ¿Descríbeme un desayuno, comida, snack o entre comidas y cena típico en ti?
- ¿Practicas alguna actividad física regularmente?
- ¿Notas que se está oscureciendo alguna parte de tu cuerpo como cuello, entrepiernas, axilas?
- ¿Fumas?
- ¿Si fumas, cuántos cigarros al día?
- ¿Consumes alcohol?
- ¿Realizas alguna actividad física?
- ¿Algún dato o tema que consideres relevante que yo sepa y quieras comentarme?
## Ayuno (indicar siempre a todos)
- Ayuno mínimo de 14 horas máximo 16 horas.
- Es mejor dejar de cenar que desayunar pero adaptamos al paciente a su estilo de vida y sensaciones.
- Se tiene que hacer minimo 6 dias a la semana
- Siempre se debe romper el ayuno con lo que está marcado en tu plan de nutrición.
- Durante el ayuno solo se puede tomar, te verde, cafe negro y agua, cualquier de los 3 sin leche, ningun tipo de azucar, splenda etc.
- Los suplementos indicados no rompen el ayuno.
## Suplementos
## Test de prevención diabetes e infartos al corazón.
Indicaciones solo para cuando el paciente se haya hecho el Test de prevención diabetes e infartos al corazón.
Suplementos de prevencion de diabetes o para diabeticos
- Berberina 500 mg por la noche
- Inositol 500 mg por la noche
- L- Taurina 500 mg en ayunas
- Cromo 200 mcg en ayunas
Suplementos de prevencion de infartos al corazón
- L-Arginina 1000 mg
- Coenzima Q10 200 mg
- Omega 3 mayor concentración de EPA Y DHA 1000 mg
Proyecto de nutricion
- El plan de alimentación que va es: Fase 1 (menú) o Fase 1.000 (lista de alimentos)
Enlace a Fase 1: https://drive.google.com/file/d/19GsDV1AQ0eX7MnM9qsQ69d1r9QX5yWcj/view?usp=sharing
Enlace a Fase 1.000: https://drive.google.com/file/d/1mvisfBqF2_D01ZAHFzu1ToHpBbTwm5OB/view?usp=sharing
- El plan Fase 1.0 (menú) o Fase 1.00 (lista de alimentos) va si los veo muy adictos al azúcar y carbohidratos.
Enlace a Fase 1.0: https://drive.google.com/file/d/1Rh_Feo1n95nbJZFRy2Tnz9W4inUaEzmK/view?usp=sharing
Enlace a Fase 1.00: https://drive.google.com/file/d/1ffQhwQ-APqrVZjlC1IAORyk-AWafm_0v/view?usp=sharing
Detox general
- Jugos de desintoxicación:
1. Tomar un vaso con jugo de apio realizado en extractor con poquita curcuma en polvo, un diente de jengibre molido y el jugo de un limón. Te lo tomas para romper tu ayuno. A los 30 min tomar en vaso con dos cucharadas soperas de aceite de oliva con el jugo de un limón. Esto por un mes
2. Un manojo de cilantro (hacer presión para que quepa bastante) • 5 cm de jengibre fresco • 4 limones (sin cáscara) • Un pepino grandes (sin cáscara ) • 1 manzana verde, retirar las semillas. Todo en la licuadora con agua al gusto. Esto en ayunas por un mes
- Glutation 500 mg en la noche
- Complejo b en ayunas
Suplementos solo si menciona en el cuestionario que duerme mal:
- Magnesio tipo glicinato 400 mg por la noche
- Ashwagandha 500 mg por la noche
## Test antiinflamatorio-segundo cerebro - intestino.
Indicaciones solo para cuando el paciente se haya hecho el Test antiinflamatorio-segundo cerebro - intestino.
Suplementos de prevencion
- L-Glutamina 500 mg en ayunas
- Probiótico con la cepa Saccharomyce Boulardii en la noche
- Probiótico con la cepa Bifidobacterium en la noche
- Betaína 600 mg en ayunas
Suplementos solo si sale positivo en alguna o todas las pruebas (calprotectina y H. pylori)
- Desparasitante (oxal, Loxe, vermox, una sola toma)
- Cucharada de vinagre de manzana en ayunas (bacterias)
- Curcuma en capsulas 300 mg (bacterias)
- Suplementos de ajo negro 500mg (parásitos, esporas, señales viales, señales post virales)
- Suplemento capsulas jengibre 500 mg (señales virales y post virales)
- Semillas de calabaza (parásitos) comer un puño.
- Cucharada de aceite de coco (parásitos)
- Orégano 500 mg
Proyecto de nutricion
- Primer mes: Fase 27
Enlace a Fase 27: https://drive.google.com/file/d/1ZFIrn0U-oWk45UxAyV44tD2SnPhzISqe/view?usp=sharing
- Segundo mes: Fase 1 (menú) o Fase 1.000 (lista de alimentos)
Enlace a Fase 1: https://drive.google.com/file/d/19GsDV1AQ0eX7MnM9qsQ69d1r9QX5yWcj/view?usp=sharing
Enlace a fase 1.000: https://drive.google.com/file/d/1mvisfBqF2_D01ZAHFzu1ToHpBbTwm5OB/view?usp=sharing
Detox general
- Jugos de desintoxicación:
1. Tomar un vaso con jugo de apio realizado en extractor con poquita curcuma en polvo, un diente de jengibre molido y el jugo de un limón. Te lo tomas para romper tu ayuno. A los 30 min tomar en vaso con dos cucharadas soperas de aceite de oliva con el jugo de un limón. Esto por un mes
2. Un manojo de cilantro (hacer presión para que quepa bastante) • 5 cm de jengibre fresco • 4 limones (sin cáscara) • Un pepino grandes (sin cáscara ) • 1 manzana verde, retirar las semillas. Todo en la licuadora con agua al gusto. Esto en ayunas por un mes
- Glutation 500 mg en la noche
- Complejo b en ayunas
Suplementos solo si menciona en el cuestionario que duerme mal:
- Magnesio tipo glicinato 400 mg por la noche
- Ashwagandha 500 mg por la noche
### Test perdida de peso (Mujer)
Indicaciones solo para cuando el paciente se haya hecho el Test perdida de peso (Mujer)
Suplementos de prevencion
- BCAA, sin azúcar después de tu primer alimento.
- Cromo 200 mcg en ayunas
- Acido alfa lipoico 500 mg
Proyecto de nutricion
- El plan de alimentación que va es: Fase 1 (menú) o Fase 1.000 (lista de alimentos)
Enlace a Fase 1: https://drive.google.com/file/d/19GsDV1AQ0eX7MnM9qsQ69d1r9QX5yWcj/view?usp=sharing
Enlace a Fase 1.000: https://drive.google.com/file/d/1mvisfBqF2_D01ZAHFzu1ToHpBbTwm5OB/view?usp=sharing
- El plan Fase 1.0 (menú) o Fase 1.00 (lista de alimentos) va si los veo muy adictos al azúcar y carbohidratos.
Enlace a Fase 1.0: https://drive.google.com/file/d/1Rh_Feo1n95nbJZFRy2Tnz9W4inUaEzmK/view?usp=sharing
Enlace a Fase 1.00: https://drive.google.com/file/d/1ffQhwQ-APqrVZjlC1IAORyk-AWafm_0v/view?usp=sharing
Detox general
- Jugos de desintoxicación:
1. Tomar un vaso con jugo de apio realizado en extractor con poquita curcuma en polvo, un diente de jengibre molido y el jugo de un limón. Te lo tomas para romper tu ayuno. A los 30 min tomar en vaso con dos cucharadas soperas de aceite de oliva con el jugo de un limón. Esto por un mes
2. Un manojo de cilantro (hacer presión para que quepa bastante) • 5 cm de jengibre fresco • 4 limones (sin cáscara) • Un pepino grandes (sin cáscara ) • 1 manzana verde, retirar las semillas. Todo en la licuadora con agua al gusto. Esto en ayunas por un mes
- Glutation 500 mg en la noche
- Complejo b en ayunas
Sumplementos solo si sale positivo en la prueba de TSH:
- Yodo liquido 3 gotas
- Selenio 200 mcg
- L-Tirosina 500 mg
- Vitamina d 5000 IU
Suplementos solo si menciona en el cuestionario que duerme mal:
- Magnesio tipo glicinato 400 mg por la noche
- Ashwagandha 500 mg por la noche
## Test perdida de peso (Hombre)
Indicaciones solo para cuando el paciente se haya hecho el Test perdida de peso (Hombre)
Suplementos de prevencion
- BCAA, sin azúcar después de tu primer alimento.
- Cromo 200 mcg en ayunas
- Acido alfa lipoico 500 mg
Proyecto de nutricion
- El plan de alimentación que va es: Fase 1 (menú) o Fase 1.000 (lista de alimentos)
Enlace a Fase 1: https://drive.google.com/file/d/19GsDV1AQ0eX7MnM9qsQ69d1r9QX5yWcj/view?usp=sharing
Enlace a Fase 1.000: https://drive.google.com/file/d/1mvisfBqF2_D01ZAHFzu1ToHpBbTwm5OB/view?usp=sharing
- El plan Fase 1.0 (menú) o Fase 1.00 (lista de alimentos) va si los veo muy adictos al azúcar y carbohidratos.
Enlace a Fase 1.0: https://drive.google.com/file/d/1Rh_Feo1n95nbJZFRy2Tnz9W4inUaEzmK/view?usp=sharing
Enlace a Fase 1.00: https://drive.google.com/file/d/1ffQhwQ-APqrVZjlC1IAORyk-AWafm_0v/view?usp=sharing
Detox general
- Jugos de desintoxicación:
1. Tomar un vaso con jugo de apio realizado en extractor con poquita curcuma en polvo, un diente de jengibre molido y el jugo de un limón. Te lo tomas para romper tu ayuno. A los 30 min tomar en vaso con dos cucharadas soperas de aceite de oliva con el jugo de un limón. Esto por un mes
2. Un manojo de cilantro (hacer presión para que quepa bastante) • 5 cm de jengibre fresco • 4 limones (sin cáscara) • Un pepino grandes (sin cáscara ) • 1 manzana verde, retirar las semillas. Todo en la licuadora con agua al gusto. Esto en ayunas por un mes
- Glutation 500 mg en la noche
- Complejo b en ayunas
Sumplementos solo si sale positivo en la prueba albúmina
- Liverheal de Adapto Heal
Suplementos solo si menciona en el cuestionario que duerme mal:
- Magnesio tipo glicinato 400 mg por la noche
- Ashwagandha 500 mg por la noche
## Test Epigenetico
Indicaciones solo para cuando el paciente se haya hecho el Test Epigenetico
Suplementos recomendados
Revisar el documento y consumir los recomendados por el test: https://drive.google.com/file/d/1iAQZPe7HlLnuXQiRkUoRYHXPSfm9Tmt-/view?usp=sharing
Proyecto de nutricion
- El plan de alimentación que va es: Fase 1 (menú) o Fase 1.000 (lista de alimentos)
Enlace a Fase 1: https://drive.google.com/file/d/19GsDV1AQ0eX7MnM9qsQ69d1r9QX5yWcj/view?usp=sharing
Enlace a Fase 1.000: https://drive.google.com/file/d/1mvisfBqF2_D01ZAHFzu1ToHpBbTwm5OB/view?usp=sharing
- El plan Fase 1.0 (menú) o Fase 1.00 (lista de alimentos) va si los veo muy adictos al azúcar y carbohidratos.
Enlace a Fase 1.0: https://drive.google.com/file/d/1Rh_Feo1n95nbJZFRy2Tnz9W4inUaEzmK/view?usp=sharing
Enlace a Fase 1.00: https://drive.google.com/file/d/1ffQhwQ-APqrVZjlC1IAORyk-AWafm_0v/view?usp=sharing
Detox general
- Jugos de desintoxicación:
1. Tomar un vaso con jugo de apio realizado en extractor con poquita curcuma en polvo, un diente de jengibre molido y el jugo de un limón. Te lo tomas para romper tu ayuno. A los 30 min tomar en vaso con dos cucharadas soperas de aceite de oliva con el jugo de un limón. Esto por un mes
2. Un manojo de cilantro (hacer presión para que quepa bastante) • 5 cm de jengibre fresco • 4 limones (sin cáscara) • Un pepino grandes (sin cáscara ) • 1 manzana verde, retirar las semillas. Todo en la licuadora con agua al gusto. Esto en ayunas por un mes
- Glutation 500 mg en la noche
Suplementos solo si menciona en el cuestionario que duerme mal:
- Magnesio tipo glicinato 400 mg por la noche
- Ashwagandha 500 mg por la noche
"""
### API Keys
os.environ["GOOGLE_API_KEY"] = "AIzaSyA2kagts-qbRio2SxFZ_BdRa_J_eYvkA4Q" # Set your API key here or use environment variables
model_id="mistralai/Mistral-7B-Instruct-v0.3"
### VOICE
def convert_audio_to_text(path):
r = sr.Recognizer()
with sr.AudioFile(path) as src:
audio = r.record(src)
try:
return r.recognize_google(audio, language="es-ES")
except sr.UnknownValueError:
return "No entendí tu voz"
except sr.RequestError:
return "Servicio de voz no disponible"
#@st.cache_data(show_spinner=False)
#def convert_text_to_audio(text, lang="es"):
# tts = gTTS(text=text, lang=lang)
# tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
# tts.save(tmp.name)
# st.audio(tmp.name, format="audio/mp3")
# os.remove(tmp.name)
def remove_emojis(text: str) -> str:
# usa emoji.replace_emoji para borrar cualquier icono
return emoji.replace_emoji(text, replace="")
#def remove_emojis(text: str) -> str:
# """
# Elimina emojis basándose en rangos Unicode.
# """
# emoji_pattern = re.compile(
# "["
# "\U0001F600-\U0001F64F" # emoticons
# "\U0001F300-\U0001F5FF" # symbols & pictographs
# "\U0001F680-\U0001F6FF" # transport & map symbols
# "\U0001F1E0-\U0001F1FF" # flags
# "]",
# flags=re.UNICODE
# )
# return emoji_pattern.sub("", text)
def remove_urls(text: str) -> str:
"""
Elimina cualquier substring que empiece con http:// o https://
"""
return re.sub(r"https?://\S+", "", text)
def remove_bullets(text: str) -> str:
# elimina los marcadores de lista (•, –, *, etc.) al inicio de cada línea
text = re.sub(r'(?m)^[\s]*[•\-\*]\s*', '', text)
# quita cualquier • suelto en el resto del texto
return text.replace('•', '')
def remove_markdown(text: str) -> str:
"""
Quita **bold**, *italic*, `code`, y enlaces [texto](url).
"""
# Bold: **algo** → algo
text = re.sub(r'\*\*(.*?)\*\*', r'\1', text)
# Italic or single *: *algo* → algo
text = re.sub(r'\*(.*?)\*', r'\1', text)
# Inline code: `algo` → algo
text = re.sub(r'`([^`]*)`', r'\1', text)
# Links: [texto](url) → texto
text = re.sub(r'\[([^\]]+)\]\([^\)]+\)', r'\1', text)
return text
#def convert_text_to_audio(text: str) -> bytes:
# """
# Usa edge-tts para generar MP3 en memoria.
# """
# #voice = "es-MX-JorgeNeural"
# voice = "es-MX-DaliaNeural"
# communicate = edge_tts.Communicate(text, voice)
#
# # Guardar en disco y luego leer, porque save() no admite BytesIO directo
# tmp_path = "temp_edge.mp3"
# loop = asyncio.new_event_loop()
# loop.run_until_complete(communicate.save(tmp_path))
#
# with open(tmp_path, "rb") as f:
# data = f.read()
# # cleanup
# try:
# import os; os.remove(tmp_path)
# except:
# pass
#
# return data
def convert_text_to_audio(text: str) -> bytes:
"""
Usa edge-tts para generar MP3 en memoria, tras sanear emojis y URLs.
"""
# 1) Limpieza en serie
clean = remove_urls(text)
clean = remove_emojis(clean)
clean = remove_markdown(clean)
clean = remove_bullets(clean)
# 2) Selección de voz y síntesis
voice = "es-MX-DaliaNeural"
communicate = edge_tts.Communicate(clean, voice)
# 3) Guardar y leer en memoria
tmp_path = "temp_edge.mp3"
loop = asyncio.new_event_loop()
loop.run_until_complete(communicate.save(tmp_path))
with open(tmp_path, "rb") as f:
data = f.read()
os.remove(tmp_path)
return data
def get_llm_hf_inference(model_id=model_id, max_new_tokens=128, temperature=0.1):
"""
Returns a language model for HuggingFace inference.
Parameters:
- model_id (str): The ID of the HuggingFace model repository.
- max_new_tokens (int): The maximum number of new tokens to generate.
- temperature (float): The temperature for sampling from the model.
Returns:
- llm (HuggingFaceEndpoint): The language model for HuggingFace inference.
"""
llm = HuggingFaceEndpoint(
repo_id=model_id,
max_new_tokens=max_new_tokens,
temperature=temperature,
token = os.getenv("HF_TOKEN"),
task="text-generation" # JV
)
return llm
def get_llm_gemini_inference(model_name="gemini-2.0-flash", max_output_tokens=256, temperature=0.1):
"""
Returns a language model for Gemini inference.
Parameters:
- model_name (str): The name of the Gemini model to use.
- max_output_tokens (int): The maximum number of output tokens to generate.
- temperature (float): The temperature for sampling from the model.
Returns:
- llm (ChatGoogleGenerativeAI): The language model for Gemini inference.
"""
llm = ChatGoogleGenerativeAI(
model=model_name,
temperature=temperature,
max_output_tokens=max_output_tokens,
token = os.getenv("GOOGLE_API_KEY")
# convert_system_message_to_human=True # This helps with system messages
)
return llm
# Configure the Streamlit app
st.set_page_config(page_title="Epigen ChatBot", page_icon="🧬")
st.title("Epigen ChatBot 🧬")
#st.markdown(f"*This is a simple chatbot that uses the HuggingFace transformers library to generate responses to your text input. It uses the {model_id}.*")
st.markdown(f"*Bienvenido al ChatBot de Epigen (https://epigen.mx/). Aquí podrás consultar sobre consejos de salud, productos y recomendaciones para sentirte mejor.*")
# Initialize session state for avatars
if "avatars" not in st.session_state:
st.session_state.avatars = {'user': None, 'assistant': None}
# Initialize session state for user text input
if 'user_text' not in st.session_state:
st.session_state.user_text = None
# Initialize session state for model parameters
if "max_response_length" not in st.session_state:
st.session_state.max_response_length = 256
if "system_message" not in st.session_state:
st.session_state.system_message = "Eres un agente conversacional de IA interaccionando con un usuario humano"
if "starter_message" not in st.session_state:
st.session_state.starter_message = "¡Hola! Cómo te puedo ayudar hoy?"
if "model_choice" not in st.session_state:
st.session_state.model_choice = "Gemini" # Default model choice
# Sidebar for settings
with st.sidebar:
st.header("Configuración")
## AI Settings
st.session_state.system_message = st.text_area(
"Mensaje del sistema", value="Eres un agente conversacional de IA experto en epigenética y en los productos de Epigen."
)
st.session_state.starter_message = st.text_area(
'Primer mensaje de la IA', value="¡Hola! Cómo puedo ayudarte hoy? 🤗"
)
####
# Model Selection
st.session_state.model_choice = st.radio(
"Seleccionar Modelo",
options=["Gemini", "HuggingFace"],
index=0
)
###
# Model Settings
st.session_state.max_response_length = st.number_input(
"Longitud máxima de respuesta", value=1000
)
# Avatar Selection
st.markdown("*Seleccionar Avatars:*")
col1, col2 = st.columns(2)
with col1:
st.session_state.avatars['assistant'] = st.selectbox(
"Avatar de la IA", options=["🧬", "🤗", "💬", "🤖"], index=0
)
with col2:
st.session_state.avatars['user'] = st.selectbox(
"Avatar del usuario", options=["😃", "👤", "👱‍♂️", "👨🏾", "👩", "👧🏾"], index=0
)
# Reset Chat History
reset_history = st.button("Reiniciar historial del chat")
# Initialize or reset chat history
if "chat_history" not in st.session_state or reset_history:
st.session_state.chat_history = [{"role": "assistant", "content": st.session_state.starter_message}]
##
# if "last_audio_path" not in st.session_state:
# st.session_state["last_audio_path"] = None
# def get_response(system_message, chat_history, user_text,
# eos_token_id=['User'], max_new_tokens=256, get_llm_hf_kws={}):
# """
# Generates a response from the chatbot model.
#
# Args:
# system_message (str): The system message for the conversation.
# chat_history (list): The list of previous chat messages.
# user_text (str): The user's input text.
# model_id (str, optional): The ID of the HuggingFace model to use.
# eos_token_id (list, optional): The list of end-of-sentence token IDs.
# max_new_tokens (int, optional): The maximum number of new tokens to generate.
# get_llm_hf_kws (dict, optional): Additional keyword arguments for the get_llm_hf function.
#
# Returns:
# tuple: A tuple containing the generated response and the updated chat history.
# """
# # Set up the model
# hf = get_llm_hf_inference(max_new_tokens=max_new_tokens, temperature=0.1)
#
# # Create the prompt template
# prompt = PromptTemplate.from_template(
# (
# "[INST] {system_message}"
# "\nCurrent Conversation:\n{chat_history}\n\n"
# "\nUser: {user_text}.\n [/INST]"
# "\nAI:"
# )
# )
# # Make the chain and bind the prompt
# chat = prompt | hf.bind(skip_prompt=True) | StrOutputParser(output_key='content')
#
# # Generate the response
# response = chat.invoke(input=dict(system_message=system_message, user_text=user_text, chat_history=chat_history))
# response = response.split("AI:")[-1]
#
# # Update the chat history
# chat_history.append({'role': 'user', 'content': user_text})
# chat_history.append({'role': 'assistant', 'content': response})
# return response, chat_history
def get_response(system_message, chat_history, user_text,
max_new_tokens=256, model_choice="Gemini",
knowledge=""):
"""
Generates a response from the chatbot model.
Args:
system_message (str): The system message for the conversation.
chat_history (list): The list of previous chat messages.
user_text (str): The user's input text.
max_new_tokens (int, optional): The maximum number of new tokens to generate.
model_choice (str, optional): The model to use for inference ("HuggingFace" or "Gemini").
Returns:
tuple: A tuple containing the generated response and the updated chat history.
"""
if model_choice == "HuggingFace":
# Set up the HuggingFace model
llm = get_llm_hf_inference(max_new_tokens=max_new_tokens, temperature=0.1)
# Create the prompt template for HuggingFace
prompt = PromptTemplate.from_template(
(
"[INST] {system_message}\n"
"Conocimiento: {knowledge}\n"
"\nConversacion:\n{chat_history}\n\n"
"\nUsuario: {user_text}.\n [/INST]"
"\nAI:"
)
)
# Make the chain and bind the prompt
chat = prompt | llm.bind(skip_prompt=True) | StrOutputParser(output_key='content')
# Generate the response
response = chat.invoke(input=dict(system_message=system_message, knowledge=knowledge, user_text=user_text, chat_history=chat_history))
response = response.split("AI:")[-1]
elif model_choice == "Gemini":
# Set up the Gemini model
llm = get_llm_gemini_inference(max_output_tokens=max_new_tokens, temperature=0.1)
# Format chat history for Gemini
formatted_history = []
for message in chat_history:
if message['role'] == 'user':
formatted_history.append(f"User: {message['content']}")
elif message['role'] == 'assistant':
formatted_history.append(f"AI: {message['content']}")
history_text = "\n".join(formatted_history)
# Create the prompt template for Gemini
# prompt = PromptTemplate.from_template(
# (
# "{system_message}\n"
# "Conocimiento: {knowledge}\n"
# "Conversacion:\n{chat_history}\n\n"
# "IMPORTANTE: Si el usuario esta interesado en comprar un producto, colectar los siguientes datos: Nombre, Edad, Peso, Estatura, Telefono, Mail, y las siguientes preguntas: ¿Tienes algún padecimiento (enfermedad) declarada ? ¿Tomas algún fármaco o medicina? Del 1 siendo el menor al 5 como mayor que tal duermes ? Del 1 siendo el menor al 5 como mayor que tal te sientes de energía? Cual es tu objetivo principal al comprar este test?\n"
# "Usuario: {user_text}"
# )
# )
prompt = PromptTemplate.from_template(
(
"{system_message}\n"
"Conocimiento: {knowledge}\n"
"Conversacion:\n{chat_history}\n\n"
"IMPORTANTE: Si el usuario esta interesado en un test específico, brindar los enlaces a drive con información sobre el test."
"IMPORTANTE: Si el usuario menciona que ya se ha hecho un test, preguntar si tiene los resultados. Si ya tiene los resultados, hacer las preguntas del 'Cuestionario general para despues de un test' a modo de conversacion hasta que conteste todas las preguntas de forma individual. No te detengas a menos que el usuario lo indique. Una vez que has terminado o el usuario ya no quiere contestar las preguntas, ofrecele los suplementos correspondientes a su test."
"Usuario: {user_text}"
)
)
# Make the chain
chat = prompt | llm | StrOutputParser()
# Generate the response
response = chat.invoke(input=dict(
system_message=system_message,
knowledge=knowledge,
user_text=user_text,
chat_history=history_text
))
else:
raise ValueError(f"Unsupported model choice: {model_choice}")
# Update the chat history
chat_history.append({'role': 'user', 'content': user_text})
chat_history.append({'role': 'assistant', 'content': response})
return response, chat_history
# Chat interface
#chat_interface = st.container(border=True)
#with chat_interface:
# output_container = st.container()
# st.session_state.user_text = st.chat_input(placeholder="Escribe tu consulta aquí.")
# Chat interface with text or voice
#### VOICE
chat_interface = st.container(border=True)
with chat_interface:
output_container = st.container()
mode = st.radio("Modo de entrada:", ["Texto", "Voz"], horizontal=True)
if mode == "Texto":
user_input = st.chat_input(placeholder="Escribe tu consulta aquí.")
audio_data = None
else:
audio_data = audio_recorder(text="Habla", key="voice_in")
if audio_data:
st.audio(audio_data, format="audio/wav")
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
f.write(audio_data)
wav_path = f.name
user_input = convert_audio_to_text(wav_path)
os.remove(wav_path)
else:
user_input = None
st.session_state.user_text = user_input
# Display chat messages
with output_container:
# For every message in the history
for message in st.session_state.chat_history:
# Skip the system message
if message['role'] == 'system':
continue
# Display the chat message using the correct avatar
with st.chat_message(message['role'],
avatar=st.session_state['avatars'][message['role']]):
st.markdown(message['content'])
# When the user enter new text:
# if st.session_state.user_text:
#
# # Display the user's new message immediately
# with st.chat_message("user",
# avatar=st.session_state.avatars['user']):
# st.markdown(st.session_state.user_text)
#
# # Display a spinner status bar while waiting for the response
# with st.chat_message("assistant",
# avatar=st.session_state.avatars['assistant']):
# with st.spinner("Generando respuesta..."):
# # Call the Inference API with the system_prompt, user text, and history
# response, st.session_state.chat_history = get_response(
# system_message=st.session_state.system_message,
# user_text=st.session_state.user_text,
# chat_history=st.session_state.chat_history,
# max_new_tokens=st.session_state.max_response_length,
# model_choice=st.session_state.model_choice,
# knowledge=knowledge_content # For context window
# )
# st.markdown(response)
# When the user enters text or voice
if st.session_state.user_text:
####
# st.session_state["last_audio_path"] = None
# Display user message
with st.chat_message("user", avatar=st.session_state.avatars['user']):
st.markdown(st.session_state.user_text)
# # Generate AI reply
# with st.chat_message("assistant", avatar=st.session_state.avatars['assistant']):
# # 1) Generate text only once
# with st.spinner("Generando respuesta..."):
# response, st.session_state.chat_history = get_response(
# system_message=st.session_state.system_message,
# user_text=st.session_state.user_text,
# chat_history=st.session_state.chat_history,
# max_new_tokens=st.session_state.max_response_length,
# model_choice=st.session_state.model_choice,
# knowledge=knowledge_content
# )
# st.markdown(response)
# Generate AI reply
with st.chat_message("assistant", avatar=st.session_state.avatars['assistant']):
# 1) Generate text only once
with st.spinner("Generando respuesta..."):
response, st.session_state.chat_history = get_response(
system_message=st.session_state.system_message,
user_text=st.session_state.user_text,
chat_history=st.session_state.chat_history,
max_new_tokens=st.session_state.max_response_length,
model_choice=st.session_state.model_choice,
knowledge=knowledge_content
)
st.markdown(response)
#convert_text_to_audio(response)
# In your Streamlit flow:
audio_bytes = convert_text_to_audio(response)
st.audio(audio_bytes, format="audio/mp3")
# # — right here, NOT inside st.chat_message —
# col1, col2 = st.columns([1,5])
# with col1:
# play = st.button("🔊 Escuchar audio", key="play_button")
# if play:
# # 1) generate & stash file
# with st.spinner("Generando audio..."):
# tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
# gTTS(text=response, lang="es").save(tmp.name)
# st.session_state["last_audio_path"] = tmp.name
#
# with col2:
# # 2) show the player if we have it
# if st.session_state["last_audio_path"]:
# st.audio(st.session_state["last_audio_path"], format="audio/mp3")
#