INIFanalitica commited on
Commit
d4dacf8
1 Parent(s): 10e5b4a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -42
app.py CHANGED
@@ -3,8 +3,23 @@ from PIL import Image
3
  import textwrap
4
  import google.generativeai as genai
5
 
6
- # Función para mostrar mensajes de error
7
- def display_error_message(error_message, error_flag):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  if "text must be a valid text with maximum 5000 character" in error_message and not error_flag:
9
  error_response = ("La pregunta que está realizando puede que vaya en contra de las políticas de Google Bard e INIF. "
10
  "Por favor, reformule su pregunta sin temas no permitidos o pregunte algo diferente. "
@@ -12,49 +27,16 @@ def display_error_message(error_message, error_flag):
12
  "o www.inif.com.co/laura-chatbot/use-policy")
13
  st.error(error_response)
14
  error_flag = True # Set the error_flag to True after displaying the error message
15
- return error_response, error_flag
16
  else:
17
  error_response = f"Error: {error_message}\nDisculpa, soy una inteligencia artificial que aún se encuentra en desarrollo y está en fase alfa. En este momento no puedo responder a tu pregunta adecuadamente, pero en el futuro seré capaz de hacerlo."
18
  st.error(error_response)
19
- return error_response, True
20
-
21
- # Función para obtener respuesta del modelo Gemini
22
- def get_gemini_response(user_input, select_model, image_file):
23
- messages = []
24
- if user_input:
25
- messages.append({"role": "user", "parts": [user_input]})
26
- if select_model == 'gemini-pro-vision':
27
- # Modelo Gemini Vision Pro seleccionado
28
- if not image_file:
29
- st.warning("Por favor, proporciona una imagen para el modelo gemini-pro-vision.")
30
- else:
31
- image = Image.open(image_file)
32
- response = generate_gemini_content(user_input, model_name=select_model, image=image)
33
- if response:
34
- if response.candidates:
35
- parts = response.candidates[0].content.parts
36
- generated_text = parts[0].text if parts else "No se generó contenido."
37
- st.markdown(f"Assistant: {to_markdown(generated_text)}")
38
- messages.append({"role": "model", "parts": [generated_text]})
39
- else:
40
- st.warning("No se encontraron candidatos en la respuesta.")
41
- else:
42
- # Otros modelos Gemini seleccionados
43
- response = get_response(user_input)
44
-
45
- # Mostrar respuesta del modelo solo una vez
46
- res_text = ""
47
- for chunk in response:
48
- res_text += chunk.text
49
- st.markdown(f"Assistant: {to_markdown(res_text)}")
50
- messages.append({"role": "model", "parts": [res_text]})
51
-
52
- return messages
53
-
54
- # Función principal
55
  def main():
56
- st.set_page_config(page_title="MAX Chatbot - INIF", page_icon="🤖")
57
- st.title("MAX Chatbot - INIF")
58
  st.sidebar.title("Configuración de Gemini")
59
 
60
  # Configurar la API key de Gemini (reemplazar con tu clave de API de Gemini)
@@ -66,6 +48,11 @@ def main():
66
  # Inicializar la sesión de chat
67
  chat = genai.GenerativeModel(select_model).start_chat(history=[])
68
 
 
 
 
 
 
69
  # Historial del chat
70
  if "messages" not in st.session_state:
71
  st.session_state["messages"] = []
@@ -95,7 +82,34 @@ def main():
95
 
96
  # Botón para enviar mensaje o generar contenido según el modelo seleccionado
97
  if st.button("Enviar / Generar Contenido"):
98
- messages = get_gemini_response(user_input, select_model, image_file)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
 
100
  # Actualizar historial de mensajes en la sesión de Streamlit
101
  st.session_state["messages"] = messages
 
3
  import textwrap
4
  import google.generativeai as genai
5
 
6
+ # Function to display formatted Markdown text
7
+ def to_markdown(text):
8
+ text = text.replace('•', ' *')
9
+ return textwrap.indent(text, '> ', predicate=lambda _: True)
10
+
11
+ # Function to generate content using Gemini API
12
+ def generate_gemini_content(prompt, model_name='gemini-pro-vision', image=None):
13
+ model = genai.GenerativeModel(model_name)
14
+ if not image:
15
+ st.warning("Por favor, agrega una imagen para usar el modelo gemini-pro-vision.")
16
+ return None
17
+
18
+ response = model.generate_content([prompt, image])
19
+ return response
20
+
21
+ # Function to handle errors and display appropriate messages
22
+ def handle_errors(error_message, error_flag):
23
  if "text must be a valid text with maximum 5000 character" in error_message and not error_flag:
24
  error_response = ("La pregunta que está realizando puede que vaya en contra de las políticas de Google Bard e INIF. "
25
  "Por favor, reformule su pregunta sin temas no permitidos o pregunte algo diferente. "
 
27
  "o www.inif.com.co/laura-chatbot/use-policy")
28
  st.error(error_response)
29
  error_flag = True # Set the error_flag to True after displaying the error message
30
+ return error_response
31
  else:
32
  error_response = f"Error: {error_message}\nDisculpa, soy una inteligencia artificial que aún se encuentra en desarrollo y está en fase alfa. En este momento no puedo responder a tu pregunta adecuadamente, pero en el futuro seré capaz de hacerlo."
33
  st.error(error_response)
34
+ return error_response
35
+
36
+ # Streamlit app
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  def main():
38
+ st.set_page_config(page_title="Laura Chatbot - INIF", page_icon="🤖")
39
+ st.title("Laura Chatbot - INIF")
40
  st.sidebar.title("Configuración de Gemini")
41
 
42
  # Configurar la API key de Gemini (reemplazar con tu clave de API de Gemini)
 
48
  # Inicializar la sesión de chat
49
  chat = genai.GenerativeModel(select_model).start_chat(history=[])
50
 
51
+ # Definir función para obtener respuesta del modelo Gemini
52
+ def get_response(messages):
53
+ response = chat.send_message(messages, stream=True)
54
+ return response
55
+
56
  # Historial del chat
57
  if "messages" not in st.session_state:
58
  st.session_state["messages"] = []
 
82
 
83
  # Botón para enviar mensaje o generar contenido según el modelo seleccionado
84
  if st.button("Enviar / Generar Contenido"):
85
+ if user_input:
86
+ messages.append({"role": "user", "parts": [user_input]})
87
+ if select_model == 'gemini-pro-vision':
88
+ # Modelo Gemini Vision Pro seleccionado
89
+ if not image_file:
90
+ st.warning("Por favor, proporciona una imagen para el modelo gemini-pro-vision.")
91
+ else:
92
+ image = Image.open(image_file)
93
+ response = generate_gemini_content(user_input, model_name=select_model, image=image)
94
+ if response:
95
+ if response.candidates:
96
+ parts = response.candidates[0].content.parts
97
+ generated_text = parts[0].text if parts else "No se generó contenido."
98
+ st.markdown(f"Assistant: {to_markdown(generated_text)}")
99
+ messages.append({"role": "model", "parts": [generated_text]})
100
+ else:
101
+ st.warning("No se encontraron candidatos en la respuesta.")
102
+ else:
103
+ # Otros modelos Gemini seleccionados
104
+ try:
105
+ response = get_response(user_input)
106
+ res_text = ""
107
+ for chunk in response:
108
+ res_text += chunk.text
109
+ st.markdown(f"Assistant: {to_markdown(res_text)}")
110
+ messages.append({"role": "model", "parts": [res_text]})
111
+ except Exception as e:
112
+ handle_errors(str(e), False)
113
 
114
  # Actualizar historial de mensajes en la sesión de Streamlit
115
  st.session_state["messages"] = messages