Antonio49 commited on
Commit
d180c5e
1 Parent(s): 0765bc5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -49
app.py CHANGED
@@ -1,17 +1,13 @@
1
- # Importar las bibliotecas necesarias
2
  from huggingface_hub import InferenceClient
3
  import gradio as gr
4
 
5
- # Crear un cliente de inferencia para el modelo preentrenado Mixtral-8x7B-Instruct-v0.1
6
  client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
7
 
8
- # Variable para controlar la conversación
 
9
  conversation_ongoing = True
10
-
11
  system_prompt = "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/"
12
 
13
-
14
- # Función para formatear el prompt con historial
15
  def format_prompt(message, history, system_prompt):
16
  prompt = "<s>"
17
  for user_prompt, bot_response in history:
@@ -20,16 +16,14 @@ def format_prompt(message, history, system_prompt):
20
  prompt += f"[INST] {system_prompt}, {message} [/INST]"
21
  return prompt
22
 
23
- # Función para generar respuestas dada una serie de parámetros
24
  def generate(
25
- prompt, history, system_prompt, temperature=0.9, max_new_tokens=4096, top_p=0.95, repetition_penalty=1.0,):
26
- # Ajustar valores de temperatura y top_p para asegurar que estén en el rango adecuado
27
  temperature = float(temperature)
28
  if temperature < 1e-2:
29
  temperature = 1e-2
30
  top_p = float(top_p)
31
 
32
- # Configurar los parámetros para la generación de texto
33
  generate_kwargs = dict(
34
  temperature=temperature,
35
  max_new_tokens=max_new_tokens,
@@ -39,40 +33,30 @@ def generate(
39
  seed=42,
40
  )
41
 
42
- # Formatear el prompt y obtener la respuesta del modelo de manera continua
43
  formatted_prompt = format_prompt(prompt, history, system_prompt)
44
  stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
45
  output = ""
46
 
47
- # Iterar a través de las respuestas en el stream
48
  for response in stream:
49
  output += response.token.text
50
  yield output
51
  return output
52
 
53
- # Función para la conversación inicial en un hilo separado
54
- def initial_conversation():
55
- global conversation_ongoing
56
- user_input = gr.textbox("Por favor, preséntate:")
57
- gr.button("Terminar conversación", onclick=lambda: end_conversation())
58
 
59
- # Función para finalizar la conversación
60
  def end_conversation():
61
  global conversation_ongoing
62
  conversation_ongoing = False
63
 
64
-
65
-
66
- # Configurar inputs adicionales para la interfaz Gradio
67
  additional_inputs = [
68
- # Entrada de texto para el System Prompt (puedes omitir esto si no lo necesitas)
69
  gr.Textbox(
70
  label="System Prompt",
71
- value="Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/",
72
  max_lines=1,
73
  interactive=True,
74
  ),
75
- # Control deslizante para la temperatura
76
  gr.Slider(
77
  label="Temperature",
78
  value=0.9,
@@ -82,8 +66,6 @@ additional_inputs = [
82
  interactive=True,
83
  info="Valores más altos producen resultados más diversos",
84
  ),
85
- # Control deslizante para el número máximo de nuevos tokens
86
- # Tengo que comprobar el número máximo de nuevos tokens, por el momento lo fijo a 4096.
87
  gr.Slider(
88
  label="Max new tokens",
89
  value=4096,
@@ -93,7 +75,6 @@ additional_inputs = [
93
  interactive=True,
94
  info="El máximo número de nuevos tokens",
95
  ),
96
- # Control deslizante para top-p (nucleus sampling)
97
  gr.Slider(
98
  label="Top-p (nucleus sampling)",
99
  value=0.90,
@@ -103,7 +84,6 @@ additional_inputs = [
103
  interactive=True,
104
  info="Valores más altos muestrean más tokens de baja probabilidad",
105
  ),
106
- # Control deslizante para la penalización de repetición
107
  gr.Slider(
108
  label="Repetition penalty",
109
  value=1.2,
@@ -115,27 +95,17 @@ additional_inputs = [
115
  )
116
  ]
117
 
118
- # Ejemplos predefinidos para la interfaz Gradio
119
  examples = [
120
- ["Quiero que me verifiquen el contador de agua de mi vivienda", "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/", 0.7, 1500, 0.80, 1.1],
121
- ["Muestrame un cuadro con las tarifas que se aplican en el abastecimiento, depuración y alcantarillado ", "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/, https://www.canaldeisabelsegunda.es/clientes/", 0.8, 4096, 0.85, 1.2],
122
- ["¿Qué es una acometida?", "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/", 0.7, 1800, 0.75, 1.2],
123
- ["¿Qué teléfono tiene para averías, información y página web?", "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/", 0.8, 2048, 0.80, 1.1],
124
  ]
125
 
126
  # Crear una interfaz de chat Gradio con el modelo generativo
127
- gr.ChatInterface(
128
  fn=generate,
129
- chatbot=gr.Chatbot(
130
- avatar_images=["./15f4b2d3-c4f4-4a29-93cd-e47214953bd9.png", "./botm.png"],
131
- bubble_full_width=False,
132
- show_label=False,
133
- show_share_button=False,
134
- show_copy_button=True,
135
- likeable=True,
136
- layout="panel",
137
- height=500,
138
- ),
139
  textbox=gr.Textbox(placeholder="¿Qué parámetros definen la calidad del agua?", container=False, scale=7),
140
  theme="soft",
141
  additional_inputs=additional_inputs,
@@ -148,10 +118,15 @@ gr.ChatInterface(
148
  clear_btn="Borrar",
149
  submit_btn="Enviar",
150
  on_submit=end_conversation, # Llama a la función end_conversation al hacer clic en "Enviar"
151
- concurrency_limit=20,
152
- ).launch(show_api=False)
 
 
 
153
 
154
- while conversation_ongoing:
155
- time.sleep(1)
 
156
 
157
- print("Conversación finalizada.")
 
 
 
1
  from huggingface_hub import InferenceClient
2
  import gradio as gr
3
 
 
4
  client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
5
 
6
+ # Variables para controlar el estado de la conversación
7
+ conversation_started = False
8
  conversation_ongoing = True
 
9
  system_prompt = "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/"
10
 
 
 
11
  def format_prompt(message, history, system_prompt):
12
  prompt = "<s>"
13
  for user_prompt, bot_response in history:
 
16
  prompt += f"[INST] {system_prompt}, {message} [/INST]"
17
  return prompt
18
 
 
19
  def generate(
20
+ prompt, history, system_prompt, temperature=0.9, max_new_tokens=4096, top_p=0.95, repetition_penalty=1.0,
21
+ ):
22
  temperature = float(temperature)
23
  if temperature < 1e-2:
24
  temperature = 1e-2
25
  top_p = float(top_p)
26
 
 
27
  generate_kwargs = dict(
28
  temperature=temperature,
29
  max_new_tokens=max_new_tokens,
 
33
  seed=42,
34
  )
35
 
 
36
  formatted_prompt = format_prompt(prompt, history, system_prompt)
37
  stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
38
  output = ""
39
 
 
40
  for response in stream:
41
  output += response.token.text
42
  yield output
43
  return output
44
 
45
+ def start_conversation():
46
+ global conversation_started
47
+ conversation_started = True
 
 
48
 
 
49
  def end_conversation():
50
  global conversation_ongoing
51
  conversation_ongoing = False
52
 
 
 
 
53
  additional_inputs = [
 
54
  gr.Textbox(
55
  label="System Prompt",
56
+ value=system_prompt,
57
  max_lines=1,
58
  interactive=True,
59
  ),
 
60
  gr.Slider(
61
  label="Temperature",
62
  value=0.9,
 
66
  interactive=True,
67
  info="Valores más altos producen resultados más diversos",
68
  ),
 
 
69
  gr.Slider(
70
  label="Max new tokens",
71
  value=4096,
 
75
  interactive=True,
76
  info="El máximo número de nuevos tokens",
77
  ),
 
78
  gr.Slider(
79
  label="Top-p (nucleus sampling)",
80
  value=0.90,
 
84
  interactive=True,
85
  info="Valores más altos muestrean más tokens de baja probabilidad",
86
  ),
 
87
  gr.Slider(
88
  label="Repetition penalty",
89
  value=1.2,
 
95
  )
96
  ]
97
 
 
98
  examples = [
99
+ ["Quiero que me verifiquen el contador de agua de mi vivienda", system_prompt, 0.7, 1500, 0.80, 1.1],
100
+ ["Muestrame un cuadro con las tarifas que se aplican en el abastecimiento, depuración y alcantarillado ", system_prompt, 0.8, 4096, 0.85, 1.2],
101
+ ["¿Qué es una acometida?", system_prompt, 0.7, 1800, 0.75, 1.2],
102
+ ["¿Qué teléfono tiene para averías, información y página web?", system_prompt, 0.8, 2048, 0.80, 1.1],
103
  ]
104
 
105
  # Crear una interfaz de chat Gradio con el modelo generativo
106
+ iface = gr.ChatInterface(
107
  fn=generate,
108
+ chatbot=gr.Chatbot(avatar_images=["./15f4b2d3-c4f4-4a29-93cd-e47214953bd9.png", "./botm.png"], bubble_full_width=False, show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel", height=500),
 
 
 
 
 
 
 
 
 
109
  textbox=gr.Textbox(placeholder="¿Qué parámetros definen la calidad del agua?", container=False, scale=7),
110
  theme="soft",
111
  additional_inputs=additional_inputs,
 
118
  clear_btn="Borrar",
119
  submit_btn="Enviar",
120
  on_submit=end_conversation, # Llama a la función end_conversation al hacer clic en "Enviar"
121
+ interface_height=550,
122
+ )
123
+
124
+ # Iniciar un hilo de conversación inicial
125
+ gr.Thread(target=start_conversation).start()
126
 
127
+ # Actualizar la interfaz después de la conversación inicial
128
+ while not conversation_started:
129
+ iface.update()
130
 
131
+ # Iniciar la interfaz principal
132
+ iface.launch(show_api=False)