""" This code is adopted from the hugging face SantaCode source code https://huggingface.co/spaces/bigcode/santacoder-demo/blob/main/app.py """ import gradio as gr import os import sagemaker from sagemaker.base_predictor import Predictor from sagemaker.serializers import JSONSerializer from sagemaker.deserializers import JSONDeserializer import argparse description = """#

🎅 SantaCoder: Code Generation

This is a demo to generate code with SantaCoder, a 1.1B parameter model for code generation in Python, Java & JavaScript. Provide the endpoint name under the first text field of the Advanced settings""" FIM_PREFIX = "" FIM_MIDDLE = "" FIM_SUFFIX = "" FIM_PAD = "" EOD = "<|endoftext|>" GENERATION_TITLE= "

Generated code:

" def post_processing(prompt, completion): completion = "" + completion + "" prompt = "" + prompt + "" code_html = f"


{prompt}{completion}


" return GENERATION_TITLE + code_html def code_generation(prompt, endpoint_name, max_new_tokens, temperature=0.2, seed=42): #set_seed(seed) predictor = Predictor( endpoint_name=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=JSONSerializer(), deserializer=JSONDeserializer(), ) input_data = { "inputs": prompt, "parameters": { "do_sample": True, "max_new_tokens": max_new_tokens, "temperature": temperature, "top_p":0.95 } } completion = predictor.predict(input_data)[0]['generated_text'] completion = completion[len(prompt):] return post_processing(prompt, completion) def create_demo(endpoint_name="santacoder-sagemaker-endpoint"): demo = gr.Blocks( css=".gradio-container {background-color: #20233fff; color:white}" ) with demo: with gr.Row(): _, colum_2, _ = gr.Column(scale=1), gr.Column(scale=6), gr.Column(scale=1) with colum_2: gr.Markdown(value=description) code = gr.Code(lines=5, language="python", label="Input code", value="def all_odd_elements(sequence):\n \"\"\"Returns every odd element of the sequence.\"\"\"") with gr.Accordion("Advanced settings", open=True): inp = gr.Textbox(label="Endpoint Name", value=endpoint_name) max_new_tokens= gr.Slider( minimum=8, maximum=1024, step=1, value=48, label="Number of tokens to generate", ) temperature = gr.Slider( minimum=0.1, maximum=2.5, step=0.1, value=0.2, label="Temperature", ) seed = gr.Slider( minimum=0, maximum=1000, step=1, label="Random seed to use for the generation" ) run = gr.Button() output = gr.HTML(label="Generated code") event = run.click(code_generation, [code, inp, max_new_tokens, temperature, seed], output, api_name="predict") # gr.HTML(label="Contact", value="contact") # demo.launch(inline=True, debug=True) return demo