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")
#