File size: 4,945 Bytes
43ab10a
 
 
 
 
 
 
 
 
 
5b715cc
43ab10a
 
c3c998f
43ab10a
 
 
 
 
 
5b715cc
 
 
43ab10a
 
 
5b715cc
43ab10a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Configuración del modelo a usar para el agente GAIA.
Cambia aquí para elegir entre modelo local o API externa.
"""

# ==================================================
# CONFIGURACIÓN DEL MODELO
# ==================================================

# Opción 1: MODELO LOCAL (ejecuta en memoria del Space)
USE_LOCAL_MODEL = False  # � Desactivado - Requiere más RAM de la disponible

LOCAL_MODEL_CONFIG = {
    "model_id": "HuggingFaceH4/zephyr-7b-beta",  # Zephyr (no requiere aprobación)
    "load_in_8bit": True,  # True = ~7GB RAM, False = ~14GB RAM
    "max_new_tokens": 256,
    "temperature": 0.0,  # 0.0 = determinístico
}

# Alternativas para modelo local (16GB RAM disponibles):
# - "HuggingFaceH4/zephyr-7b-beta" (7B, ~7GB en 8-bit) ⚠️ Puede ser mucho para Space gratuito
# - "meta-llama/Llama-2-7b-chat-hf" (7B, ~7GB en 8-bit) ⚠️ Requiere aprobación + mucha RAM
# - "meta-llama/Llama-2-13b-chat-hf" (13B, ~13GB en 8-bit) ❌ Demasiado para Space


# Opción 2: MODELO VIA API (Gemini u otros via LiteLLM)
USE_API_MODEL = True  # � ACTIVO - Recomendado para Spaces gratuitos

API_MODEL_CONFIG = {
    "model_id": "gemini/gemini-2.0-flash-exp",  # Gemini por defecto
    "max_tokens": 256,
    "temperature": 0.0,
}

# Alternativas para API (requiere API keys respectivas):
# - "gemini/gemini-2.0-flash-exp" (requiere GEMINI_API_KEY)
# - "gpt-4o-mini" (requiere OPENAI_API_KEY)
# - "claude-3-5-sonnet-20241022" (requiere ANTHROPIC_API_KEY)


# ==================================================
# FUNCIONES HELPER
# ==================================================

def get_active_model_config():
    """
    Retorna configuración del modelo activo.
    
    Returns:
        tuple: (model_type, config_dict)
        - model_type: "local" o "api"
        - config_dict: Configuración del modelo
    """
    if USE_LOCAL_MODEL and USE_API_MODEL:
        raise ValueError("Solo puedes activar USE_LOCAL_MODEL O USE_API_MODEL, no ambos.")
    
    if USE_LOCAL_MODEL:
        return ("local", LOCAL_MODEL_CONFIG)
    elif USE_API_MODEL:
        return ("api", API_MODEL_CONFIG)
    else:
        raise ValueError("Debes activar USE_LOCAL_MODEL o USE_API_MODEL en config.py")


def get_model_display_name():
    """Retorna nombre amigable para mostrar en UI."""
    model_type, config = get_active_model_config()
    
    if model_type == "local":
        model_id = config["model_id"]
        quantization = "8-bit" if config.get("load_in_8bit") else "float16"
        
        if "Llama-2-7b" in model_id:
            return f"Llama 2 7B LOCAL ({quantization})"
        elif "Llama-2-13b" in model_id:
            return f"Llama 2 13B LOCAL ({quantization})"
        elif "zephyr" in model_id:
            return f"Zephyr 7B LOCAL ({quantization})"
        else:
            return f"{model_id.split('/')[-1]} LOCAL ({quantization})"
    
    else:  # api
        model_id = config["model_id"]
        if "gemini" in model_id.lower():
            return "Google Gemini (API)"
        elif "gpt" in model_id.lower():
            return "OpenAI GPT (API)"
        elif "claude" in model_id.lower():
            return "Anthropic Claude (API)"
        else:
            return f"{model_id} (API)"


def get_required_env_var():
    """Retorna variable de entorno requerida según modelo activo."""
    model_type, config = get_active_model_config()
    
    if model_type == "local":
        return "HF_TOKEN"  # Para descargar modelos de HuggingFace
    
    else:  # api
        model_id = config["model_id"].lower()
        if "gemini" in model_id:
            return "GEMINI_API_KEY"
        elif "gpt" in model_id or "openai" in model_id:
            return "OPENAI_API_KEY"
        elif "claude" in model_id or "anthropic" in model_id:
            return "ANTHROPIC_API_KEY"
        else:
            return "API_KEY"


def get_estimated_ram_usage():
    """Retorna uso estimado de RAM según modelo activo."""
    model_type, config = get_active_model_config()
    
    if model_type == "local":
        model_id = config["model_id"]
        is_8bit = config.get("load_in_8bit", False)
        
        if "7b" in model_id.lower():
            return "~7GB RAM" if is_8bit else "~14GB RAM"
        elif "13b" in model_id.lower():
            return "~13GB RAM" if is_8bit else "~26GB RAM (NO CABE)"
        else:
            return "~7-14GB RAM"
    
    else:  # api
        return "~1-2GB RAM (solo cliente)"


# ==================================================
# INFORMACIÓN PARA DEBUG
# ==================================================

if __name__ == "__main__":
    print("=== Configuración del Modelo ===")
    print(f"Modelo activo: {get_model_display_name()}")
    print(f"Tipo: {get_active_model_config()[0]}")
    print(f"Variable requerida: {get_required_env_var()}")
    print(f"RAM estimada: {get_estimated_ram_usage()}")
    print(f"\nConfig completa: {get_active_model_config()[1]}")