Update app.py
Browse files
app.py
CHANGED
|
@@ -19,17 +19,30 @@ def predecir(pregunta):
|
|
| 19 |
device_map="cpu"
|
| 20 |
)
|
| 21 |
|
| 22 |
-
# 1.
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
|
|
|
|
|
|
| 26 |
prompt = generador.tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
|
| 28 |
-
#
|
| 29 |
resultados = generador(
|
| 30 |
prompt,
|
| 31 |
-
max_new_tokens=
|
| 32 |
-
temperature=
|
| 33 |
do_sample=True,
|
| 34 |
pad_token_id=generador.tokenizer.eos_token_id,
|
| 35 |
eos_token_id=generador.tokenizer.eos_token_id,
|
|
|
|
| 19 |
device_map="cpu"
|
| 20 |
)
|
| 21 |
|
| 22 |
+
# 1. Definir los límites de la arquitectura
|
| 23 |
+
CONTEXT_WINDOW = 8192
|
| 24 |
+
RESERVED_FOR_RESPONSE = 2048 # Espacio garantizado para la respuesta
|
| 25 |
+
|
| 26 |
+
# 2. Calcular tokens del prompt actual
|
| 27 |
+
chat = [{"role": "user", "content": pregunta}]
|
| 28 |
prompt = generador.tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
|
| 29 |
+
tokens_prompt = len(generador.tokenizer.encode(prompt))
|
| 30 |
+
|
| 31 |
+
# 3. Calcular tokens disponibles dinámicamente
|
| 32 |
+
# Si el prompt es enorme, reducimos el límite de respuesta,
|
| 33 |
+
# pero nunca dejamos menos de 512 tokens para responder.
|
| 34 |
+
max_tokens_permitidos = max(512, CONTEXT_WINDOW - tokens_prompt)
|
| 35 |
+
|
| 36 |
+
# Nos aseguramos de no superar nuestro límite máximo de seguridad
|
| 37 |
+
final_max_new_tokens = min(max_tokens_permitidos, RESERVED_FOR_RESPONSE)
|
| 38 |
+
|
| 39 |
+
print(f"Tokens prompt: {tokens_prompt} | Límite respuesta: {final_max_new_tokens}")
|
| 40 |
|
| 41 |
+
# 4. Inferencia con límite dinámico
|
| 42 |
resultados = generador(
|
| 43 |
prompt,
|
| 44 |
+
max_new_tokens=final_max_new_tokens,
|
| 45 |
+
temperature=0.7,
|
| 46 |
do_sample=True,
|
| 47 |
pad_token_id=generador.tokenizer.eos_token_id,
|
| 48 |
eos_token_id=generador.tokenizer.eos_token_id,
|