Kukedlc commited on
Commit
b6b5858
1 Parent(s): 67a297b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -55
app.py CHANGED
@@ -3,77 +3,69 @@ import torch
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import spaces
5
 
6
- title = """# 🙋🏻‍♂️Welcome to 🌟Tonic's ☯️🧑‍💻Yi-Coder-9B-Chat Demo!"""
7
- description = """Yi-Coder-9B-Chat is a 9B parameter model fine-tuned for coding tasks. This demo showcases its ability to generate code based on your prompts. Yi-Coder is a series of open-source code language models that delivers state-of-the-art coding performance with fewer than 10 billion parameters. Excelling in long-context understanding with a maximum context length of 128K tokens. - Supporting 52 major programming languages:
8
- ```bash
9
- 'java', 'markdown', 'python', 'php', 'javascript', 'c++', 'c#', 'c', 'typescript', 'html', 'go', 'java_server_pages', 'dart', 'objective-c', 'kotlin', 'tex', 'swift', 'ruby', 'sql', 'rust', 'css', 'yaml', 'matlab', 'lua', 'json', 'shell', 'visual_basic', 'scala', 'rmarkdown', 'pascal', 'fortran', 'haskell', 'assembly', 'perl', 'julia', 'cmake', 'groovy', 'ocaml', 'powershell', 'elixir', 'clojure', 'makefile', 'coffeescript', 'erlang', 'lisp', 'toml', 'batchfile', 'cobol', 'dockerfile', 'r', 'prolog', 'verilog'
10
- ```
11
- ### Join us :
12
- 🌟TeamTonic🌟 is always making cool demos! Join our active builder's 🛠️community 👻 [![Join us on Discord](https://img.shields.io/discord/1109943800132010065?label=Discord&logo=discord&style=flat-square)](https://discord.gg/qdfnvSPcqP) On 🤗Huggingface:[MultiTransformer](https://huggingface.co/MultiTransformer) On 🌐Github: [Tonic-AI](https://github.com/tonic-ai) & contribute to🌟 [Build Tonic](https://git.tonic-ai.com/contribute)🤗Big thanks to Yuvi Sharma and all the folks at huggingface for the community grant 🤗
13
- """
14
 
15
- # Define the device and model path
16
- device = "cuda" if torch.cuda.is_available() else "cpu"
17
- model_path = "01-ai/Yi-Coder-9B-Chat"
18
 
19
- # Load the tokenizer and model
20
- tokenizer = AutoTokenizer.from_pretrained(model_path)
21
- model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto").eval()
22
 
23
  @spaces.GPU(duration=130)
24
- def generate_code(system_prompt, user_prompt, max_length):
25
- messages = [
26
- {"role": "system", "content": system_prompt},
27
- {"role": "user", "content": user_prompt}
28
  ]
29
- text = tokenizer.apply_chat_template(
30
- messages,
31
  tokenize=False,
32
  add_generation_prompt=True
33
  )
34
- model_inputs = tokenizer([text], return_tensors="pt").to(device)
35
-
36
- generated_ids = model.generate(
37
- model_inputs.input_ids,
38
- max_new_tokens=max_length,
39
- eos_token_id=tokenizer.eos_token_id
40
  )
41
- generated_ids = [
42
- output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
43
  ]
 
 
44
 
45
- response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
46
- return response
47
-
48
- def gradio_interface():
49
- with gr.Blocks() as interface:
50
- gr.Markdown(title)
51
- gr.Markdown(description)
52
-
53
- system_prompt_input = gr.Textbox(
54
- label="☯️Yinstruction:",
55
- value="You are a helpful coding assistant. Provide clear and concise code examples.",
56
  lines=2
57
  )
58
- user_prompt_input = gr.Code(
59
- label="🤔Coding Question",
60
- value="Write a quick sort algorithm in Python.",
61
  language="python",
62
  lines=15
63
  )
64
- code_output = gr.Code(label="☯️Yi-Coder-7B", language='python', lines=20, interactive=True)
65
- max_length_slider = gr.Slider(minimum=1, maximum=1800, value=650, label="Max Token Length")
66
-
67
- generate_button = gr.Button("Generate Code")
68
- generate_button.click(
69
- generate_code,
70
- inputs=[system_prompt_input, user_prompt_input, max_length_slider],
71
- outputs=code_output
72
  )
73
-
74
- return interface
75
 
76
  if __name__ == "__main__":
77
- interface = gradio_interface()
78
- interface.queue()
79
- interface.launch()
 
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import spaces
5
 
6
+ titulo = """# 🙋🏻‍♂️Bienvenido al Demo de 🌟Yi-Coder-9B-Chat!"""
7
+ descripcion = """Yi-Coder-9B-Chat es un modelo de 9B parámetros ajustado para tareas de codificación. Esta demo muestra su capacidad para generar código basado en tus prompts. Yi-Coder es una serie de modelos de lenguaje de código abierto que ofrece un rendimiento de codificación de vanguardia con menos de 10 mil millones de parámetros. Sobresale en la comprensión de contextos largos con una longitud máxima de contexto de 128K tokens. - Soporta 52 lenguajes de programación principales."""
 
 
 
 
 
 
8
 
9
+ # Definir el dispositivo y la ruta del modelo
10
+ dispositivo = "cuda" if torch.cuda.is_available() else "cpu"
11
+ ruta_modelo = "01-ai/Yi-Coder-9B-Chat"
12
 
13
+ # Cargar el tokenizador y el modelo
14
+ tokenizador = AutoTokenizer.from_pretrained(ruta_modelo)
15
+ modelo = AutoModelForCausalLM.from_pretrained(ruta_modelo, device_map="auto").eval()
16
 
17
  @spaces.GPU(duration=130)
18
+ def generar_codigo(prompt_sistema, prompt_usuario, max_longitud):
19
+ mensajes = [
20
+ {"role": "system", "content": prompt_sistema},
21
+ {"role": "user", "content": prompt_usuario}
22
  ]
23
+ texto = tokenizador.apply_chat_template(
24
+ mensajes,
25
  tokenize=False,
26
  add_generation_prompt=True
27
  )
28
+ entradas_modelo = tokenizador([texto], return_tensors="pt").to(dispositivo)
29
+ ids_generados = modelo.generate(
30
+ entradas_modelo.input_ids,
31
+ max_new_tokens=max_longitud,
32
+ eos_token_id=tokenizador.eos_token_id
 
33
  )
34
+ ids_generados = [
35
+ output_ids[len(input_ids):] for input_ids, output_ids in zip(entradas_modelo.input_ids, ids_generados)
36
  ]
37
+ respuesta = tokenizador.batch_decode(ids_generados, skip_special_tokens=True)[0]
38
+ return respuesta
39
 
40
+ def interfaz_gradio():
41
+ with gr.Blocks() as interfaz:
42
+ gr.Markdown(titulo)
43
+ gr.Markdown(descripcion)
44
+
45
+ prompt_sistema = gr.Textbox(
46
+ label="☯️Instrucción Yi:",
47
+ value="Eres un asistente de codificación útil. Proporciona ejemplos de código claros y concisos.",
 
 
 
48
  lines=2
49
  )
50
+ prompt_usuario = gr.Code(
51
+ label="🤔Pregunta de Codificación",
52
+ value="Escribe un algoritmo de quicksort en Python.",
53
  language="python",
54
  lines=15
55
  )
56
+ codigo_salida = gr.Code(label="☯️Yi-Coder-9B", language='python', lines=20, interactive=True)
57
+ max_longitud_slider = gr.Slider(minimum=1, maximum=1800, value=650, label="Longitud Máxima de Tokens")
58
+
59
+ boton_generar = gr.Button("Generar Código")
60
+ boton_generar.click(
61
+ generar_codigo,
62
+ inputs=[prompt_sistema, prompt_usuario, max_longitud_slider],
63
+ outputs=codigo_salida
64
  )
65
+
66
+ return interfaz
67
 
68
  if __name__ == "__main__":
69
+ interfaz = interfaz_gradio()
70
+ interfaz.queue()
71
+ interfaz.launch()