lopezplidia commited on
Commit
7e39b21
·
verified ·
1 Parent(s): 1070086

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +62 -0
  2. bot.py +37 -0
  3. knowledge_base.py +7 -0
app.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from dotenv import load_dotenv
3
+ from bot import get_response
4
+
5
+ load_dotenv() # Carga variables de .env
6
+
7
+ # Configuración de la página
8
+
9
+ st.title("Bienvenid@, recruiter")
10
+ st.caption("Soy un bot que puede responder preguntas sobre el perfil "
11
+ "profesional de Lidia. ¡Pregúntame lo que quieras! "
12
+ "Y ve directo al grano: tengo los límites de frecuencia muy limitados😉. "
13
+ "Aunque si te quedas con más preguntas, Lidia te las responderá encantada. Recuerda: la IA puede cometer errores.")
14
+
15
+ # Inicializar historial en session_state
16
+ # session_state persiste entre rerenders de Streamlit
17
+ if "messages" not in st.session_state:
18
+ st.session_state.messages = []
19
+ # Mensaje de bienvenida
20
+ st.session_state.messages.append({
21
+ "role": "assistant",
22
+ "content": "Gracias por interesarte por Lidia. "
23
+ "Puedo hablarte sobre su experiencia en IA, "
24
+ "bases de datos, modelos predictivos y más "
25
+ "(es una chica muy interesante). "
26
+ "¿Qué te gustaría saber?"
27
+ })
28
+
29
+ # Renderizar historial de mensajes
30
+ for message in st.session_state.messages:
31
+ with st.chat_message(message["role"]):
32
+ st.markdown(message["content"])
33
+
34
+ # Input del usuario
35
+ if prompt := st.chat_input("Escribe tu pregunta aquí..."):
36
+
37
+ # Añadir mensaje del usuario al historial y mostrarlo
38
+ st.session_state.messages.append({
39
+ "role": "user",
40
+ "content": prompt
41
+ })
42
+ with st.chat_message("user"):
43
+ st.markdown(prompt)
44
+
45
+ # Obtener respuesta del bot
46
+ with st.chat_message("assistant"):
47
+ with st.spinner("Rebuscando en el baúl de los recuerdos..."):
48
+ # Pasamos todo el historial EXCEPTO el mensaje de bienvenida
49
+ # (que es nuestro, no del modelo)
50
+ history_for_api = [
51
+ m for m in st.session_state.messages
52
+ if not (m["role"] == "assistant" and
53
+ "Hola! Soy el asistente" in m["content"])
54
+ ]
55
+ response = get_response(history_for_api)
56
+ st.markdown(response)
57
+
58
+ # Guardar respuesta en historial
59
+ st.session_state.messages.append({
60
+ "role": "assistant",
61
+ "content": response
62
+ })
bot.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from google import genai
2
+ from dotenv import load_dotenv
3
+ import os
4
+ from knowledge_base import PROFILE, FEW_SHOT_EXAMPLES
5
+
6
+ load_dotenv()
7
+
8
+ client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
9
+
10
+ PROFILE = os.getenv("PROFILE")
11
+
12
+ SYSTEM_PROMPT = os.getenv("SYSTEM_PROMPT")
13
+
14
+ def get_response(conversation_history: list) -> str:
15
+ try:
16
+ contents = []
17
+ for msg in conversation_history:
18
+ contents.append({
19
+ "role": "user" if msg["role"] == "user" else "model",
20
+ "parts": [{"text": msg["content"]}]
21
+ })
22
+
23
+ response = client.models.generate_content(
24
+ model="gemini-2.5-flash",
25
+ contents=contents,
26
+ config={"system_instruction": SYSTEM_PROMPT}
27
+ )
28
+ return response.text
29
+
30
+ except Exception as e:
31
+ error = str(e)
32
+ if "503" in error or "UNAVAILABLE" in error:
33
+ return "Este bot utiliza uno de los modelos de Gemini. Actualmente, el modelo está experimentando alta demanda en este momento y no puede dar respuesta. Por favor, inténtalo de nuevo en unos minutos."
34
+ elif "429" in error or "RESOURCE_EXHAUSTED" in error:
35
+ return "¡Qué guay que os intereséis tanto por Lidia! Pero se ha alcanzado el límite de consultas por ahora. Por favor, sigue preguntando mañana o llama a Lidia :)"
36
+ else:
37
+ return "Ha ocurrido un error inesperado. Por favor, inténtalo de nuevo más tarde."
knowledge_base.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import os
2
+ from dotenv import load_dotenv
3
+
4
+ load_dotenv()
5
+
6
+ PROFILE = os.getenv("PROFILE")
7
+ FEW_SHOT_EXAMPLES = os.getenv("FEW_SHOT_EXAMPLES")