Spaces:
Sleeping
Sleeping
File size: 3,992 Bytes
79adf4f 1812733 79adf4f 1812733 79adf4f c4ef265 79adf4f 1812733 8018226 1812733 8018226 c4ef265 1812733 c4ef265 1812733 8018226 1812733 8018226 79adf4f 8018226 79adf4f 8018226 79adf4f 8018226 79adf4f 8018226 79adf4f 8018226 79adf4f 1812733 8018226 1812733 79adf4f 8018226 1812733 8018226 1812733 79adf4f 1812733 79adf4f c4ef265 |
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 |
import gradio as gr
from huggingface_hub import InferenceClient
import os
import time
# Obt茅n el token de manera segura desde el entorno
hf_token = os.getenv("HF_API_TOKEN")
# Clase para manejar m煤ltiples modelos
class ModelHandler:
def __init__(self, model_names, token):
self.clients = {model_name: InferenceClient(model_name, token=token) for model_name in model_names}
self.current_model = model_names[0]
def switch_model(self, model_name):
if model_name in self.clients:
self.current_model = model_name
else:
raise ValueError(f"Modelo {model_name} no est谩 disponible.")
def generate_response(self, input_text):
prompt = f"Debes de responder a cualquier pregunta:\nPregunta: {input_text}"
try:
messages = [{"role": "user", "content": prompt}]
client = self.clients[self.current_model]
response = client.chat_completion(messages=messages, max_tokens=500)
if hasattr(response, 'choices') and response.choices:
return response.choices[0].message.content
else:
return str(response)
except Exception as e:
return f"Error al realizar la inferencia: {e}"
# Lista de modelos disponibles
model_names = [
"microsoft/Phi-3-mini-4k-instruct"
]
# Inicializa el manejador de modelos
model_handler = ModelHandler(model_names, hf_token)
# Define la funci贸n para generaci贸n de im谩genes con progreso
def generate_image_with_progress(prompt):
"""
Genera una imagen utilizando un modelo de generaci贸n de im谩genes y muestra un progreso.
"""
try:
client = InferenceClient("CompVis/stable-diffusion-v1-4", token=hf_token)
# Simular progreso
for progress in range(0, 101, 20):
time.sleep(0.5)
yield f"Generando imagen... {progress}% completado", None
image = client.text_to_image(prompt, width=512, height=512)
yield "Imagen generada con 茅xito", image
except Exception as e:
yield f"Error al generar la imagen: {e}", None
# Configura la interfaz en Gradio con selecci贸n de modelos y generaci贸n de im谩genes
with gr.Blocks(title="Multi-Model LLM Chatbot with Image Generation") as demo:
gr.Markdown(
"""
## Chatbot Multi-Modelo LLM con Generaci贸n de Im谩genes
Este chatbot permite elegir entre m煤ltiples modelos de lenguaje para responder preguntas o generar im谩genes
a partir de descripciones.
"""
)
with gr.Row():
model_dropdown = gr.Dropdown(
choices=model_names + ["Generaci贸n de Im谩genes"],
value=model_names[0],
label="Seleccionar Acci贸n/Modelo",
interactive=True
)
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
lines=5,
placeholder="Escribe tu consulta o descripci贸n para la imagen...",
label="Entrada"
)
with gr.Column():
output_display = gr.Textbox(
lines=5,
label="Estado",
interactive=False
)
output_image = gr.Image(
label="Imagen Generada",
interactive=False
)
submit_button = gr.Button("Enviar")
# Define la funci贸n de actualizaci贸n
def process_input(selected_action, user_input):
if selected_action == "Generaci贸n de Im谩genes":
return generate_image_with_progress(user_input)
else:
model_handler.switch_model(selected_action)
response = model_handler.generate_response(user_input)
return response, None
# Conecta la funci贸n a los componentes
submit_button.click(
fn=process_input,
inputs=[model_dropdown, input_text],
outputs=[output_display, output_image]
)
# Lanza la interfaz
demo.launch()
|