import gradio as gr from llama_cpp import Llama from huggingface_hub import hf_hub_download import os # CONFIGURACIÓN OPTIMIZADA REPO_ID = "Qwen/Qwen2.5-3B-Instruct-GGUF" FILENAME = "qwen2.5-3b-instruct-q4_k_m.gguf" # Sugerencia: Q4_K_M es un 20% más rápido que Q5 print(f"Descargando {FILENAME}...") model_path = hf_hub_download(repo_id=REPO_ID, filename=FILENAME) print("Cargando modelo con optimizaciones de CPU...") llm = Llama( model_path=model_path, n_ctx=1024, # Reducido de 4096 a 1024. Esto acelera drásticamente el inicio. n_threads=4, # Mantenemos 4 para aprovechar el Space n_batch=128, # Reducido de 512 a 128 para procesar bloques más ligeros use_mlock=True, # Intenta mantener el modelo en RAM física low_vram=True # Optimiza el uso de memoria ) def predict(message, system_prompt="Responde en español de forma breve."): # ChatML format prompt = f"<|im_start|>system\n{system_prompt}<|im_end|>\n<|im_start|>user\n{message}<|im_end|>\n<|im_start|>assistant\n" # max_tokens=512 es suficiente para la mayoría de respuestas y termina antes output = llm(prompt, max_tokens=512, stop=["<|im_end|>", "<|im_start|>"], echo=False) return output['choices'][0]['text'] with gr.Blocks() as demo: gr.Markdown(f"# Nodo API Optimizado: {REPO_ID}") with gr.Row(): msg = gr.Textbox(label="Input") sys = gr.Textbox(label="System Prompt", value="Responde de forma concisa.") out = gr.Textbox(label="Output") btn = gr.Button("Generar") btn.click(predict, [msg, sys], out, api_name="query") if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)