Spaces:
Sleeping
Sleeping
from transformers import AutoTokenizer | |
import transformers | |
import os | |
import sys | |
import fire | |
import torch | |
import gradio as gr | |
MAGICODER_PROMPT = """You are an exceptionally intelligent coding assistant that consistently delivers accurate and reliable responses to user instructions. | |
@@ Instruction | |
{instruction} | |
@@ Response | |
""" | |
css = """ | |
#q-output { | |
max-height: 60vh; | |
overflow: auto; | |
} | |
""" | |
title = "<h1 style='text-align: center; margin-bottom: 1rem'>π© Magicoder</h1>" | |
description = """This is a playground for Magicoder-S-DS-6.7B! Follow us on Github: https://github.com/ise-uiuc/magicoder and Huggingface: https://huggingface.co/ise-uiuc. | |
π‘ Tips: You can include more details in your instruction for Magicoder to write better code for you! Details can be, but not limited to, as follows: | |
1. Specify your programming language (e.g., "... in Python" and "... in Java") | |
2. Specify the external libraries/packages that are necessary in your task (e.g., "... using the turtle library" and "Write a gradio application to ...") | |
3. Demonstrate your requirements as clear and comprehensive as possible (e.g., "use CNN as the model structure" and "draw a chart of the training loss")""" | |
def main( | |
base_model="ise-uiuc/Magicoder-S-DS-6.7B" | |
): | |
pipeline = transformers.pipeline( | |
"text-generation", model=base_model, torch_dtype=torch.bfloat16, device_map="auto" | |
) | |
def evaluate_magicoder( | |
instruction, | |
temperature=1, | |
max_length=2048, | |
): | |
prompt = MAGICODER_PROMPT.format(instruction=instruction) | |
if temperature > 0: | |
sequences = pipeline( | |
prompt, | |
do_sample=True, | |
temperature=temperature, | |
max_length=max_length, | |
) | |
else: | |
sequences = pipeline( | |
prompt, | |
max_length=max_length, | |
) | |
for seq in sequences: | |
generated_text = seq["generated_text"].replace(prompt, "") | |
return generated_text | |
with gr.Blocks(css=css) as demo: | |
gr.Markdown(title) | |
gr.Markdown(description) | |
with gr.Row(equal_height=True): | |
with gr.Column(variant="default"): | |
interface_input = gr.Textbox( | |
lines=3, | |
label="Instruction", | |
placeholder="Anything you want to ask Magicoder ?", | |
value="Write a snake game in Python using the turtle library (the game is created by Magicoder).", | |
) | |
temperature = gr.Slider(minimum=0, maximum=1, value=0, label="Temperature") | |
max_new_tokens = gr.Slider( | |
minimum=1, maximum=2048, step=1, value=2048, label="Max tokens" | |
) | |
submit = gr.Button(value="Generate") | |
gr.Examples( | |
examples=[ | |
["Write a snake game in Python using the turtle library (the game is created by Magicoder)."], | |
["Build a console-based Othello game in Java with row and column numbers shown on the board. The game should end when there are no more valid moves for either player."], | |
["Write a gradio (3.48.0) application for the following use case: Take an input image and return a 45 degree clockwise rotated image. You should also add text description under the output showing the rotation degree."], | |
["Build a simple neural network in Python using Pytorch to classify handwritten digits from the MNIST dataset. You should use CNN as the model structure, train the model for 5 epochs, draw a chart of the training loss, and show the final result."], | |
], | |
inputs = [interface_input] | |
) | |
with gr.Column(variant="default"): | |
with gr.Tab("Output", elem_id="q-output"): | |
output = gr.Markdown( | |
label="Output" | |
) | |
submit.click( | |
evaluate_magicoder, | |
inputs=[interface_input, temperature, max_new_tokens], | |
outputs=[output], | |
) | |
demo.queue().launch() | |
if __name__ == "__main__": | |
fire.Fire(main) | |