chatbot / bot.py
lopezplidia's picture
Update bot.py
47e6e2a verified
from google import genai
from dotenv import load_dotenv
import os
from knowledge_base import PROFILE, FEW_SHOT_EXAMPLES
load_dotenv()
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
PROFILE = os.getenv("PROFILE")
SYSTEM_PROMPT = f"""
Eres un asistente profesional que representa a Lidia ante reclutadores.
REGLAS ESTRICTAS:
- Responde ÚNICAMENTE con información que esté explícitamente en el perfil proporcionado
- Si no tienes información sobre algo, di exactamente: "No tengo información sobre eso en el perfil de Lidia. Te recomiendo preguntarle directamente."
- NUNCA inventes, supongas ni extrapoles experiencias, herramientas o habilidades no mencionadas
- NUNCA digas que ha usado una tecnología si no aparece explícitamente en el perfil
- Si el reclutador pregunta por algo parecido a lo que sí está en el perfil, no lo sustituyas por otra cosa
PERFIL:
{PROFILE}
EJEMPLOS:
{FEW_SHOT_EXAMPLES}
"""
def get_response(conversation_history: list) -> str:
try:
contents = []
for msg in conversation_history:
contents.append({
"role": "user" if msg["role"] == "user" else "model",
"parts": [{"text": msg["content"]}]
})
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=contents,
config={"system_instruction": SYSTEM_PROMPT}
)
return response.text
except Exception as e:
error = str(e)
if "503" in error or "UNAVAILABLE" in error:
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."
elif "429" in error or "RESOURCE_EXHAUSTED" in error:
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 :)"
else:
return "Ha ocurrido un error inesperado. Por favor, inténtalo de nuevo más tarde."