File size: 2,116 Bytes
7e39b21
 
 
 
 
 
 
 
 
 
 
47e6e2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7e39b21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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."