Spaces:
Sleeping
Sleeping
File size: 47,529 Bytes
aab9921 400fb1d aab9921 118985c 0160120 cc568ab 118985c 0160120 118985c 400fb1d aab9921 0160120 cc568ab 0160120 cc568ab 0160120 cc568ab 0160120 cc568ab 0160120 cc568ab 0160120 aab9921 118985c 0160120 118985c aab9921 118985c aab9921 118985c aab9921 118985c aab9921 118985c aab9921 67ca94e aab9921 118985c aab9921 118985c aab9921 118985c aab9921 67ca94e aab9921 67ca94e aab9921 118985c aab9921 118985c aab9921 118985c aab9921 0160120 aab9921 118985c aab9921 118985c aab9921 118985c aab9921 118985c aab9921 118985c aab9921 118985c 0160120 118985c aab9921 118985c aab9921 118985c aab9921 0160120 aab9921 0160120 aab9921 0160120 aab9921 0160120 aab9921 0160120 118985c aab9921 0160120 aab9921 118985c 0160120 aab9921 0160120 | 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 | 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")
#
|