Antonio49 commited on
Commit
8622a65
1 Parent(s): ccedfec

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -42
app.py CHANGED
@@ -1,14 +1,11 @@
 
1
  from huggingface_hub import InferenceClient
2
  import gradio as gr
3
- import threading
4
 
 
5
  client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
6
 
7
- # Variables para controlar el estado de la conversación
8
- conversation_started = False
9
- conversation_ongoing = True
10
- system_prompt = "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/"
11
-
12
  def format_prompt(message, history, system_prompt):
13
  prompt = "<s>"
14
  for user_prompt, bot_response in history:
@@ -17,16 +14,16 @@ def format_prompt(message, history, system_prompt):
17
  prompt += f"[INST] {system_prompt}, {message} [/INST]"
18
  return prompt
19
 
 
20
  def generate(
21
- prompt, history, system_prompt, temperature=0.9, max_new_tokens=4096, top_p=0.95, repetition_penalty=1.0,
22
- ):
23
- global conversation_started, conversation_ongoing
24
-
25
  temperature = float(temperature)
26
  if temperature < 1e-2:
27
  temperature = 1e-2
28
  top_p = float(top_p)
29
 
 
30
  generate_kwargs = dict(
31
  temperature=temperature,
32
  max_new_tokens=max_new_tokens,
@@ -36,31 +33,27 @@ def generate(
36
  seed=42,
37
  )
38
 
 
39
  formatted_prompt = format_prompt(prompt, history, system_prompt)
40
  stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
41
  output = ""
42
 
 
43
  for response in stream:
44
  output += response.token.text
45
- if "¡Hasta luego!" in response.token.text: # Puedes ajustar este condicional según las respuestas de tu modelo
46
- conversation_ongoing = False
47
  yield output
 
48
 
49
- def start_conversation():
50
- global conversation_started
51
- conversation_started = True
52
-
53
- def end_conversation():
54
- global conversation_ongoing
55
- conversation_ongoing = False
56
-
57
  additional_inputs = [
 
58
  gr.Textbox(
59
  label="System Prompt",
60
- value=system_prompt,
61
  max_lines=1,
62
  interactive=True,
63
  ),
 
64
  gr.Slider(
65
  label="Temperature",
66
  value=0.9,
@@ -70,6 +63,8 @@ additional_inputs = [
70
  interactive=True,
71
  info="Valores más altos producen resultados más diversos",
72
  ),
 
 
73
  gr.Slider(
74
  label="Max new tokens",
75
  value=4096,
@@ -79,6 +74,7 @@ additional_inputs = [
79
  interactive=True,
80
  info="El máximo número de nuevos tokens",
81
  ),
 
82
  gr.Slider(
83
  label="Top-p (nucleus sampling)",
84
  value=0.90,
@@ -88,6 +84,7 @@ additional_inputs = [
88
  interactive=True,
89
  info="Valores más altos muestrean más tokens de baja probabilidad",
90
  ),
 
91
  gr.Slider(
92
  label="Repetition penalty",
93
  value=1.2,
@@ -99,17 +96,27 @@ additional_inputs = [
99
  )
100
  ]
101
 
 
102
  examples = [
103
- ["Quiero que me verifiquen el contador de agua de mi vivienda", system_prompt, 0.7, 1500, 0.80, 1.1],
104
- ["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],
105
- ["¿Qué es una acometida?", system_prompt, 0.7, 1800, 0.75, 1.2],
106
- ["¿Qué teléfono tiene para averías, información y página web?", system_prompt, 0.8, 2048, 0.80, 1.1],
107
  ]
108
 
109
  # Crear una interfaz de chat Gradio con el modelo generativo
110
- iface = gr.ChatInterface(
111
  fn=generate,
112
- 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),
 
 
 
 
 
 
 
 
 
113
  textbox=gr.Textbox(placeholder="¿Qué parámetros definen la calidad del agua?", container=False, scale=7),
114
  theme="soft",
115
  additional_inputs=additional_inputs,
@@ -117,20 +124,10 @@ iface = gr.ChatInterface(
117
  description='Autor: <a href=\"https://huggingface.co/Antonio49\">Antonio Fernández</a> de <a href=\"https://saturdays.ai/\">SaturdaysAI</a>. Formación: <a href=\"https://cursos.saturdays.ai/courses/\">Cursos Online AI</a> Aplicación desarrollada con fines docentes',
118
  examples=examples,
119
  cache_examples=True,
120
- retry_btn="Repetir",
121
- undo_btn="Deshacer",
122
- clear_btn="Borrar",
123
- submit_btn="Enviar",
124
  concurrency_limit=20,
125
- )
126
-
127
- # Iniciar un hilo de conversación inicial
128
- threading.Thread(target=start_conversation).start()
129
-
130
- # Actualizar la interfaz después de la conversación inicial
131
- while not conversation_started:
132
- iface.update()
133
-
134
- # Iniciar la interfaz principal
135
- iface.launch(show_api=False)
136
 
 
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
+ # Función para formatear el prompt con historial
 
 
 
 
9
  def format_prompt(message, history, system_prompt):
10
  prompt = "<s>"
11
  for user_prompt, bot_response in history:
 
14
  prompt += f"[INST] {system_prompt}, {message} [/INST]"
15
  return prompt
16
 
17
+ # Función para generar respuestas dada una serie de parámetros
18
  def generate(
19
+ prompt, history, system_prompt, temperature=0.9, max_new_tokens=4096, top_p=0.95, repetition_penalty=1.0,):
20
+ # Ajustar valores de temperatura y top_p para asegurar que estén en el rango adecuado
 
 
21
  temperature = float(temperature)
22
  if temperature < 1e-2:
23
  temperature = 1e-2
24
  top_p = float(top_p)
25
 
26
+ # Configurar los parámetros para la generación de texto
27
  generate_kwargs = dict(
28
  temperature=temperature,
29
  max_new_tokens=max_new_tokens,
 
33
  seed=42,
34
  )
35
 
36
+ # Formatear el prompt y obtener la respuesta del modelo de manera continua
37
  formatted_prompt = format_prompt(prompt, history, system_prompt)
38
  stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
39
  output = ""
40
 
41
+ # Iterar a través de las respuestas en el stream
42
  for response in stream:
43
  output += response.token.text
 
 
44
  yield output
45
+ return output
46
 
47
+ # Configurar inputs adicionales para la interfaz Gradio
 
 
 
 
 
 
 
48
  additional_inputs = [
49
+ # Entrada de texto para el System Prompt (puedes omitir esto si no lo necesitas)
50
  gr.Textbox(
51
  label="System Prompt",
52
+ value="Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/",
53
  max_lines=1,
54
  interactive=True,
55
  ),
56
+ # Control deslizante para la temperatura
57
  gr.Slider(
58
  label="Temperature",
59
  value=0.9,
 
63
  interactive=True,
64
  info="Valores más altos producen resultados más diversos",
65
  ),
66
+ # Control deslizante para el número máximo de nuevos tokens
67
+ # Tengo que comprobar el número máximo de nuevos tokens, por el momento lo fijo a 4096.
68
  gr.Slider(
69
  label="Max new tokens",
70
  value=4096,
 
74
  interactive=True,
75
  info="El máximo número de nuevos tokens",
76
  ),
77
+ # Control deslizante para top-p (nucleus sampling)
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
+ # Control deslizante para la penalización de repetición
88
  gr.Slider(
89
  label="Repetition penalty",
90
  value=1.2,
 
96
  )
97
  ]
98
 
99
+ # Ejemplos predefinidos para la interfaz Gradio
100
  examples = [
101
+ ["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],
102
+ ["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],
103
+ ["¿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],
104
+ ["¿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],
105
  ]
106
 
107
  # Crear una interfaz de chat Gradio con el modelo generativo
108
+ gr.ChatInterface(
109
  fn=generate,
110
+ chatbot=gr.Chatbot(
111
+ avatar_images=["./15f4b2d3-c4f4-4a29-93cd-e47214953bd9.png", "./botm.png"],
112
+ bubble_full_width=False,
113
+ show_label=False,
114
+ show_share_button=False,
115
+ show_copy_button=True,
116
+ likeable=True,
117
+ layout="panel",
118
+ height=500,
119
+ ),
120
  textbox=gr.Textbox(placeholder="¿Qué parámetros definen la calidad del agua?", container=False, scale=7),
121
  theme="soft",
122
  additional_inputs=additional_inputs,
 
124
  description='Autor: <a href=\"https://huggingface.co/Antonio49\">Antonio Fernández</a> de <a href=\"https://saturdays.ai/\">SaturdaysAI</a>. Formación: <a href=\"https://cursos.saturdays.ai/courses/\">Cursos Online AI</a> Aplicación desarrollada con fines docentes',
125
  examples=examples,
126
  cache_examples=True,
127
+ retry_btn="Repetir",
128
+ undo_btn="Deshacer",
129
+ clear_btn="Borrar",
130
+ submit_btn="Enviar",
131
  concurrency_limit=20,
132
+ ).launch(show_api=False)
 
 
 
 
 
 
 
 
 
 
133