|
import torch |
|
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer |
|
from threading import Thread |
|
import gradio as gr |
|
|
|
|
|
MODEL_NAME = "microsoft/phi-2" |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True) |
|
model = AutoModelForCausalLM.from_pretrained( |
|
MODEL_NAME, |
|
torch_dtype=torch.float16, |
|
device_map="auto" |
|
) |
|
|
|
def generate_response(message, history, system_prompt="Eres un asistente útil llamado Gerardo."): |
|
|
|
messages = [{"role": "system", "content": system_prompt}] |
|
for user_msg, bot_msg in history: |
|
messages.extend([ |
|
{"role": "user", "content": user_msg}, |
|
{"role": "assistant", "content": bot_msg} |
|
]) |
|
messages.append({"role": "user", "content": message}) |
|
|
|
|
|
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device) |
|
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True) |
|
|
|
Thread( |
|
target=model.generate, |
|
kwargs=dict( |
|
inputs, |
|
streamer=streamer, |
|
max_new_tokens=512, |
|
temperature=0.7, |
|
do_sample=True |
|
) |
|
).start() |
|
|
|
|
|
response = "" |
|
for token in streamer: |
|
response += token |
|
yield response |
|
|
|
|
|
demo = gr.ChatInterface( |
|
fn=generate_response, |
|
title="🤖 Chatbot Gerardo", |
|
description="Un asistente IA creado por Gerardo. ¡Pregúntame lo que quieras!", |
|
examples=["Hola", "¿Cómo funciona la inteligencia artificial?"], |
|
additional_inputs=[ |
|
gr.Textbox( |
|
"Eres un asistente útil llamado Gerardo .", |
|
label="Personalidad del bot" |
|
) |
|
], |
|
theme="soft" |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |