File size: 3,738 Bytes
25aa566
 
 
 
 
 
 
 
 
 
 
 
 
c75c835
 
7ed5b83
25aa566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7ed5b83
25aa566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d994f87
25aa566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import spaces
import os
from llama_cpp import Llama
from llama_cpp_agent import LlamaCppAgent, MessagesFormatterType
from llama_cpp_agent.providers import LlamaCppPythonProvider
from llama_cpp_agent.chat_history import BasicChatHistory
from llama_cpp_agent.chat_history.messages import Roles
import gradio as gr
from huggingface_hub import hf_hub_download

token_huggingface = os.getenv("HUGGINGFACE_TOKEN")

hf_hub_download(
    repo_id="bartowski/gemma-2-2b-it-abliterated-GGUF",
    filename="gemma-2-2b-it-abliterated-Q4_K_M.gguf",
    local_dir="./models",
    token=token_huggingface
)

llm = None

@spaces.GPU(duration=120)
def responder(
    mensaje,
    historial: list[tuple[str, str]],
    mensaje_sistema,
    max_tokens,
    temperatura,
    top_p,
    top_k,
    penalizacion_repeticion,
):
    plantilla_chat = MessagesFormatterType.GEMMA_2

    global llm
    
    if llm is None:
        llm = Llama(
            model_path="models/gemma-2-2b-it-abliterated-Q4_K_M.gguf",
            flash_attn=True,
            n_gpu_layers=81,
            n_batch=1024,
            n_ctx=8192,
        )

    proveedor = LlamaCppPythonProvider(llm)

    agente = LlamaCppAgent(
        proveedor,
        system_prompt=f"{mensaje_sistema}",
        predefined_messages_formatter_type=plantilla_chat,
        debug_output=True
    )
    
    configuracion = proveedor.get_provider_default_settings()
    configuracion.temperature = temperatura
    configuracion.top_k = top_k
    configuracion.top_p = top_p
    configuracion.max_tokens = max_tokens
    configuracion.repeat_penalty = penalizacion_repeticion
    configuracion.stream = True

    mensajes = BasicChatHistory()

    for msj in historial:
        usuario = {
            'role': Roles.user,
            'content': msj[0]
        }
        asistente = {
            'role': Roles.assistant,
            'content': msj[1]
        }
        mensajes.add_message(usuario)
        mensajes.add_message(asistente)
    
    flujo = agente.get_chat_response(
        mensaje,
        llm_sampling_settings=configuracion,
        chat_history=mensajes,
        returns_streaming_generator=True,
        print_output=False
    )
    
    salida = ""
    for fragmento in flujo:
        salida += fragmento
        yield salida

descripcion = """<p align="center">Chat con Gemma 2B Abliterated usando llama.cpp</p>
<p><center>
<a href="https://huggingface.co/google/gemma-2-2b-it" target="_blank">[Modelo Gemma 2B it]</a>
<a href="https://huggingface.co/google/gemma-2-2b-it-GGUF" target="_blank">[Modelo Gemma 2B it GGUF]</a>
</center></p>
"""

demo = gr.ChatInterface(
    responder,
    additional_inputs=[
        gr.Textbox(value="Eres un asistente útil.", label="Mensaje del sistema"),
        gr.Slider(minimum=1, maximum=4096, value=2048, step=1, label="Tokens máximos"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperatura"),
        gr.Slider(
            minimum=0.1,
            maximum=1.0,
            value=0.95,
            step=0.05,
            label="Top-p",
        ),
        gr.Slider(
            minimum=0,
            maximum=100,
            value=40,
            step=1,
            label="Top-k",
        ),
        gr.Slider(
            minimum=0.0,
            maximum=2.0,
            value=1.1,
            step=0.1,
            label="Penalización por repetición",
        ),
    ],
    retry_btn="Reintentar",
    undo_btn="Deshacer",
    clear_btn="Limpiar",
    submit_btn="Enviar",
    title="Chat con Gemma 2B usando llama.cpp", 
    description=descripcion,
    chatbot=gr.Chatbot(
        scale=1, 
        likeable=False,
        show_copy_button=True
    )
)

if __name__ == "__main__":
    demo.launch()