DHEIVER commited on
Commit
10f4f78
1 Parent(s): 9248299

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +96 -95
app.py CHANGED
@@ -1,105 +1,106 @@
1
  from huggingface_hub import InferenceClient
2
  import gradio as gr
3
 
4
- class MixtralChatInterface:
5
- def __init__(self, model_name):
6
- self.client = InferenceClient(model_name)
7
- self.additional_inputs=[
8
- gr.Textbox(
9
- label="System Prompt",
10
- max_lines=1,
11
- interactive=True,
12
- ),
13
- gr.Slider(
14
- label="Temperature",
15
- value=0.9,
16
- minimum=0.0,
17
- maximum=1.0,
18
- step=0.05,
19
- interactive=True,
20
- info="Higher values produce more diverse outputs",
21
- ),
22
- gr.Slider(
23
- label="Max new tokens",
24
- value=256,
25
- minimum=0,
26
- maximum=1048,
27
- step=64,
28
- interactive=True,
29
- info="The maximum numbers of new tokens",
30
- ),
31
- gr.Slider(
32
- label="Top-p (nucleus sampling)",
33
- value=0.90,
34
- minimum=0.0,
35
- maximum=1,
36
- step=0.05,
37
- interactive=True,
38
- info="Higher values sample more low-probability tokens",
39
- ),
40
- gr.Slider(
41
- label="Repetition penalty",
42
- value=1.2,
43
- minimum=1.0,
44
- maximum=2.0,
45
- step=0.05,
46
- interactive=True,
47
- info="Penalize repeated tokens",
48
- )
49
- ]
50
- self.examples=[
51
- ["I'm planning a vacation to Japan. Can you suggest a one-week itinerary including must-visit places and local cuisines to try?", None, None, None, None, None, ],
52
- ["Can you write a short story about a time-traveling detective who solves historical mysteries?", None, None, None, None, None,],
53
- ["I'm trying to learn French. Can you provide some common phrases that would be useful for a beginner, along with their pronunciations?", None, None, None, None, None,],
54
- ["I have chicken, rice, and bell peppers in my kitchen. Can you suggest an easy recipe I can make with these ingredients?", None, None, None, None, None,],
55
- ["Can you explain how the QuickSort algorithm works and provide a Python implementation?", None, None, None, None, None,],
56
- ["What are some unique features of Rust that make it stand out compared to other systems programming languages like C++?", None, None, None, None, None,],
57
- ]
58
 
59
- def format_prompt(self, message, history):
60
- prompt = "<s>"
61
- for user_prompt, bot_response in history:
62
- prompt += f"[INST] {user_prompt} [/INST]"
63
- prompt += f" {bot_response}</s> "
64
- prompt += f"[INST] {message} [/INST]"
65
- return prompt
 
66
 
67
- def generate(self, prompt, history, system_prompt, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0):
68
- temperature = float(temperature)
69
- if temperature < 1e-2:
70
- temperature = 1e-2
71
- top_p = float(top_p)
 
 
 
72
 
73
- generate_kwargs = dict(
74
- temperature=temperature,
75
- max_new_tokens=max_new_tokens,
76
- top_p=top_p,
77
- repetition_penalty=repetition_penalty,
78
- do_sample=True,
79
- seed=42,
80
- )
81
 
82
- formatted_prompt = self.format_prompt(f"{system_prompt}, {prompt}", history)
83
- stream = self.client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
84
- output = ""
85
 
86
- for response in stream:
87
- output += response.token.text
88
- yield output
89
- return output
90
 
91
- def launch(self):
92
- gr.ChatInterface(
93
- fn=self.generate,
94
- chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
95
- additional_inputs=self.additional_inputs,
96
- title="Mixtral 46.7B",
97
- examples=self.examples,
98
- concurrency_limit=20,
99
- ).launch(show_api=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
 
101
- # Usage
102
- if __name__ == "__main__":
103
- model_name = "mistralai/Mixtral-8x7B-Instruct-v0.1"
104
- chat_interface = MixtralChatInterface(model_name)
105
- chat_interface.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from huggingface_hub import InferenceClient
2
  import gradio as gr
3
 
4
+ client = InferenceClient(
5
+ "mistralai/Mixtral-8x7B-Instruct-v0.1"
6
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ # Função para formatar a prompt de entrada com o histórico de diálogo
9
+ def formatar_prompt(mensagem, historico):
10
+ prompt = "<s>"
11
+ for prompt_usuario, resposta_bot in historico:
12
+ prompt += f"[INST] {prompt_usuario} [/INST]"
13
+ prompt += f" {resposta_bot}</s> "
14
+ prompt += f"[INST] {mensagem} [/INST]"
15
+ return prompt
16
 
17
+ # Função para gerar resposta do modelo
18
+ def gerar(
19
+ prompt, historico, prompt_sistema, temperatura=0.9, max_tokens_novos=256, top_p=0.95, penalidade_repeticao=1.0,
20
+ ):
21
+ temperatura = float(temperatura)
22
+ if temperatura < 1e-2:
23
+ temperatura = 1e-2
24
+ top_p = float(top_p)
25
 
26
+ kwargs_geracao = dict(
27
+ temperature=temperatura,
28
+ max_new_tokens=max_tokens_novos,
29
+ top_p=top_p,
30
+ repetition_penalty=penalidade_repeticao,
31
+ do_sample=True,
32
+ seed=42,
33
+ )
34
 
35
+ prompt_formatada = formatar_prompt(f"{prompt_sistema}, {prompt}", historico)
36
+ stream = client.text_generation(prompt_formatada, **kwargs_geracao, stream=True, details=True, return_full_text=False)
37
+ output = ""
38
 
39
+ for resposta in stream:
40
+ output += resposta.token.text
41
+ yield output
42
+ return output
43
 
44
+ # Inputs adicionais para o modelo
45
+ inputs_adicionais=[
46
+ gr.Textbox(
47
+ label="Prompt do Sistema",
48
+ max_lines=1,
49
+ interactive=True,
50
+ ),
51
+ gr.Slider(
52
+ label="Temperatura",
53
+ value=0.9,
54
+ minimum=0.0,
55
+ maximum=1.0,
56
+ step=0.05,
57
+ interactive=True,
58
+ info="Valores mais altos produzem saídas mais diversas",
59
+ ),
60
+ gr.Slider(
61
+ label="Máximo de Novos Tokens",
62
+ value=256,
63
+ minimum=0,
64
+ maximum=1048,
65
+ step=64,
66
+ interactive=True,
67
+ info="O número máximo de novos tokens",
68
+ ),
69
+ gr.Slider(
70
+ label="Top-p (amostragem de núcleo)",
71
+ value=0.90,
72
+ minimum=0.0,
73
+ maximum=1,
74
+ step=0.05,
75
+ interactive=True,
76
+ info="Valores mais altos amostram mais tokens de baixa probabilidade",
77
+ ),
78
+ gr.Slider(
79
+ label="Penalidade de Repetição",
80
+ value=1.2,
81
+ minimum=1.0,
82
+ maximum=2.0,
83
+ step=0.05,
84
+ interactive=True,
85
+ info="Penalize tokens repetidos",
86
+ )
87
+ ]
88
 
89
+ # Exemplos de prompts
90
+ exemplos=[["Estou planejando férias no Japão. Você pode sugerir um itinerário de uma semana incluindo lugares imperdíveis e culinárias locais para experimentar?", None, None, None, None, None, ],
91
+ ["Você pode escrever uma história curta sobre um detetive viajante do tempo que resolve mistérios históricos?", None, None, None, None, None,],
92
+ ["Estou tentando aprender francês. Você pode fornecer algumas frases comuns que seriam úteis para um iniciante, juntamente com suas pronúncias?", None, None, None, None, None,],
93
+ ["Eu tenho frango, arroz e pimentões na minha cozinha. Você pode sugerir uma receita fácil que eu possa fazer com esses ingredientes?", None, None, None, None, None,],
94
+ ["Você pode explicar como o algoritmo QuickSort funciona e fornecer uma implementação em Python?", None, None, None, None, None,],
95
+ ["Quais são algumas características únicas do Rust que o destacam em comparação com outras linguagens de programação de sistemas como C ++?", None, None, None, None, None,],
96
+ ]
97
+
98
+ # Interface do Chat
99
+ gr.ChatInterface(
100
+ fn=gerar,
101
+ chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
102
+ additional_inputs=inputs_adicionais,
103
+ title="Mixtral 46.7B",
104
+ examples=exemplos,
105
+ concurrency_limit=20,
106
+ ).launch(show_api=False)