import gradio as gr import torch from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, pipeline ) model_id = "somosnlp/gemma-7b-it-legal-refugee-v0.1.1" tokenizer_id = "philschmid/gemma-tokenizer-chatml" tokenizer = AutoTokenizer.from_pretrained(tokenizer_id) # Cargamos el modelo en 4 bits para agilizar la inferencia quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16, bnb_4bit_use_double_quant=True, ) model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype=torch.float16, device_map="auto", quantization_config=quantization_config, ) print(f"Model loaded in {model.device}") # Generamos el pipeline de generaci贸n de texto pipe = pipeline("text-generation", model=model, tokenizer=tokenizer) # Definimos el eos token eos_token = tokenizer("<|im_end|>",add_special_tokens=False)["input_ids"][0] def generate_inference(prompt): prompt = pipe.tokenizer.apply_chat_template([{"role": "user", "content": prompt}], tokenize=False, add_generation_prompt=True) outputs = pipe(prompt, max_new_tokens=128, do_sample=True, num_beams=1, temperature=0.3, top_k=50, top_p=0.95, max_time= 180, eos_token_id=eos_token) return outputs[0]['generated_text'][len(prompt):].strip() demo = gr.Interface( generate_inference, inputs=[ gr.Textbox( label="馃寪 Pregunta a resolver", info="Introduce la duda o pregunta que la que deseas obtener informaci贸n.", value="驴Qui茅n es un solicitante de asilo/ protecci贸n internacional?", interactive=True, ) ], outputs=[ gr.Textbox( label="馃摪 Respuesta e informaci贸n", interactive=False, placeholder="Aqu铆 aparecer谩 la respuesta o informaci贸n solicitada", ) ], title="Question Answering - Legal Refugiados v1.0", theme="ParityError/LimeFace", description="Apoyo y consulta acerca de leyes y procedimientos de protecci贸n a asiliados y refugiados", article="Escribe tu duda o cuesti贸n y trataremos de darte una respuesta y ayuda que te permita resolver tu cuesti贸n", thumbnail="markus-winkler-Je1MDuITTF4-unsplash.jpg", #cache_examples=False, concurrency_limit=1, examples=[ "驴Qui茅n es un solicitante de asilo/ protecci贸n internacional?", "驴Cu谩les son los derechos y obligaciones de un solicitante de protecci贸n internacional?", "驴D贸nde se puede solicitar asilo/ protecci贸n internacional?", "una vez declarada la protecci贸n temporal por el Consejo de la Uni贸n Europea, que responsabilidades del Gobierno espa帽ol?", ], submit_btn="Generar respuesta", stop_btn="Detener respuesta", clear_btn="Limpiar", allow_flagging="never", ) #demo.queue(max_size=None) demo.launch(debug=True, share=False)