Update app.py
Browse files
app.py
CHANGED
|
@@ -36,10 +36,11 @@ def env_list(name: str) -> list[str]:
|
|
| 36 |
|
| 37 |
|
| 38 |
# ------------------ Config ------------------
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
#
|
| 42 |
-
MODEL_PATTERN
|
|
|
|
| 43 |
|
| 44 |
# Carpeta de modelos en /data (escribible en Docker Spaces)
|
| 45 |
MODELS_DIR = Path(os.getenv("MODELS_DIR", "/data/models"))
|
|
@@ -48,12 +49,12 @@ MODELS_DIR.mkdir(parents=True, exist_ok=True)
|
|
| 48 |
# Rendimiento (overrides por variables de entorno)
|
| 49 |
CPU_COUNT = os.cpu_count() or 2
|
| 50 |
N_THREADS = env_int("N_THREADS", max(1, CPU_COUNT - 1))
|
| 51 |
-
N_BATCH = env_int("N_BATCH", 64) # bajar si vas
|
| 52 |
-
N_CTX = env_int("N_CTX",
|
| 53 |
|
| 54 |
# Decodificación / longitud por defecto
|
| 55 |
-
DEF_TEMPERATURE = env_float("LLM_TEMPERATURE", 0.
|
| 56 |
-
DEF_TOP_P = env_float("LLM_TOP_P", 0.
|
| 57 |
DEF_MAX_TOKENS = env_int("LLM_MAX_TOKENS", 160) # longitud típica
|
| 58 |
MAX_TOKENS_CAP = env_int("LLM_MAX_TOKENS_CAP", 320) # tope duro
|
| 59 |
|
|
@@ -64,6 +65,7 @@ Eres Astrohunters-Guide, un asistente en español.
|
|
| 64 |
- Si te paso una URL, lees su contenido y lo usas como contexto.
|
| 65 |
""")
|
| 66 |
|
|
|
|
| 67 |
# CORS
|
| 68 |
# Opciones:
|
| 69 |
# - ALLOW_ALL_ORIGINS=1 (menos seguro, útil en pruebas)
|
|
@@ -138,7 +140,11 @@ def run_llm(
|
|
| 138 |
max_tokens=clamp_tokens(max_tokens),
|
| 139 |
stream=False,
|
| 140 |
)
|
| 141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
|
| 143 |
|
| 144 |
# ------------------ FastAPI ------------------
|
|
|
|
| 36 |
|
| 37 |
|
| 38 |
# ------------------ Config ------------------
|
| 39 |
+
# ⇩⇩ Cambiado a Qwen 2.5 3B (mejor para CPU Basic gratuito)
|
| 40 |
+
MODEL_REPO = os.getenv("MODEL_REPO", "Qwen/Qwen2.5-3B-Instruct-GGUF")
|
| 41 |
+
# Opción rápida/ligera: q3_k_m si vas muy justo de RAM:
|
| 42 |
+
# MODEL_PATTERN=qwen2.5-3b-instruct-q3_k_m-*.gguf
|
| 43 |
+
MODEL_PATTERN = os.getenv("MODEL_PATTERN", "qwen2.5-3b-instruct-q4_k_m-*.gguf")
|
| 44 |
|
| 45 |
# Carpeta de modelos en /data (escribible en Docker Spaces)
|
| 46 |
MODELS_DIR = Path(os.getenv("MODELS_DIR", "/data/models"))
|
|
|
|
| 49 |
# Rendimiento (overrides por variables de entorno)
|
| 50 |
CPU_COUNT = os.cpu_count() or 2
|
| 51 |
N_THREADS = env_int("N_THREADS", max(1, CPU_COUNT - 1))
|
| 52 |
+
N_BATCH = env_int("N_BATCH", 64) # bajar si vas justo de RAM
|
| 53 |
+
N_CTX = env_int("N_CTX", 1536) # 1536-2048 ok; menos = más rápido
|
| 54 |
|
| 55 |
# Decodificación / longitud por defecto
|
| 56 |
+
DEF_TEMPERATURE = env_float("LLM_TEMPERATURE", 0.4) # un poco más bajo para menos alucinación
|
| 57 |
+
DEF_TOP_P = env_float("LLM_TOP_P", 0.9)
|
| 58 |
DEF_MAX_TOKENS = env_int("LLM_MAX_TOKENS", 160) # longitud típica
|
| 59 |
MAX_TOKENS_CAP = env_int("LLM_MAX_TOKENS_CAP", 320) # tope duro
|
| 60 |
|
|
|
|
| 65 |
- Si te paso una URL, lees su contenido y lo usas como contexto.
|
| 66 |
""")
|
| 67 |
|
| 68 |
+
|
| 69 |
# CORS
|
| 70 |
# Opciones:
|
| 71 |
# - ALLOW_ALL_ORIGINS=1 (menos seguro, útil en pruebas)
|
|
|
|
| 140 |
max_tokens=clamp_tokens(max_tokens),
|
| 141 |
stream=False,
|
| 142 |
)
|
| 143 |
+
try:
|
| 144 |
+
return out["choices"][0]["message"]["content"].strip()
|
| 145 |
+
except Exception:
|
| 146 |
+
# fallback defensivo
|
| 147 |
+
return str(out)[:1000]
|
| 148 |
|
| 149 |
|
| 150 |
# ------------------ FastAPI ------------------
|