File size: 2,110 Bytes
555c698 14932b3 a0d522c 555c698 e7f818a a78a5ba 555c698 f6b7ca6 a78a5ba 14932b3 bdbadf2 a78a5ba 14932b3 a78a5ba bdbadf2 a78a5ba 34340f6 e7f818a 34340f6 e7f818a 34340f6 e7f818a 34340f6 bdbadf2 d46c49c e7f818a d46c49c fa1c8fb f6b7ca6 a0d522c 555c698 f6b7ca6 e7f818a a0d522c fa1c8fb e7f818a f6b7ca6 | 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 | import gradio as gr
from transformers import pipeline, AutoTokenizer
import torch
# Variable global
generador = None
def predecir(pregunta):
global generador
if generador is None:
model_id = "edusc182/Gemma_2B"
tokenizer = AutoTokenizer.from_pretrained(model_id, clean_up_tokenization_spaces=False)
generador = pipeline(
"text-generation",
model=model_id,
tokenizer=tokenizer,
torch_dtype=torch.bfloat16,
device_map="cpu"
)
# 1. Definir los límites de la arquitectura
CONTEXT_WINDOW = 8192
RESERVED_FOR_RESPONSE = 2048 # Espacio garantizado para la respuesta
# 2. Calcular tokens del prompt actual
chat = [{"role": "user", "content": pregunta}]
prompt = generador.tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
tokens_prompt = len(generador.tokenizer.encode(prompt))
# 3. Calcular tokens disponibles dinámicamente
# Si el prompt es enorme, reducimos el límite de respuesta,
# pero nunca dejamos menos de 512 tokens para responder.
max_tokens_permitidos = max(512, CONTEXT_WINDOW - tokens_prompt)
# Nos aseguramos de no superar nuestro límite máximo de seguridad
final_max_new_tokens = min(max_tokens_permitidos, RESERVED_FOR_RESPONSE)
print(f"Tokens prompt: {tokens_prompt} | Límite respuesta: {final_max_new_tokens}")
# 4. Inferencia con límite dinámico
resultados = generador(
prompt,
max_new_tokens=final_max_new_tokens,
temperature=0.7,
do_sample=True,
pad_token_id=generador.tokenizer.eos_token_id,
eos_token_id=generador.tokenizer.eos_token_id,
return_full_text=False
)
return resultados[0]['generated_text'].strip()
iface = gr.Interface(
fn=predecir,
inputs=gr.Textbox(lines=2, placeholder="Hola Gemma, ¿cómo estás?"),
outputs=gr.Textbox(label="Respuesta"),
title="Asistente Gemma 2B",
description="Asistente optimizado con plantillas de chat."
)
iface.launch() |