File size: 2,873 Bytes
721ea4b
8afea45
721ea4b
 
 
 
 
 
8afea45
721ea4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8afea45
721ea4b
 
 
 
 
 
 
 
8afea45
721ea4b
50ba7dc
02da40e
721ea4b
02da40e
 
721ea4b
 
 
 
 
 
 
 
 
 
 
dfe5f78
721ea4b
 
 
 
 
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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.7, 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="Pregunta de prueba",
            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="HaleyCH/HaleyCH_Theme",
    description="Apoyo y consulta acerca de leyes y protección a asiliados y refugiados",
    article="Escribe tu duda o cuestión y trataremos de darte una respuesta y ayuda que te facilite resolver tu situación actual",
    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)