import gradio as gr from transformers import AutoModelForCausalLM, AutoTokenizer import torch MODEL_ID = "arinbalyan/qwen-coder-python" theme = ( gr.themes.Soft(primary_hue="indigo", neutral_hue="slate") .set(button_primary_background_fill_hover="#4f46e5") ) tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) model = AutoModelForCausalLM.from_pretrained( MODEL_ID, dtype=torch.float16, device_map="auto", ) def generate(instruction: str): if not instruction.strip(): return "// Describe what you want to code, then hit Generate." prompt = f"### Instruction:\n{instruction.strip()}\n\n### Python Code:\n" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=256, temperature=0.7, do_sample=True, pad_token_id=tokenizer.eos_token_id, ) text = tokenizer.decode(outputs[0], skip_special_tokens=True) return text.split("### Python Code:\n")[-1].strip() with gr.Blocks(theme=theme, title="CodeLM") as demo: gr.Markdown( """ # 🐍 CodeLM Fine-tuned code model that writes Python from plain English. """ ) with gr.Row(): with gr.Column(scale=1): instruction = gr.Textbox( label="What should it code?", placeholder="e.g., merge two sorted lists", lines=3, ) run = gr.Button("Generate", variant="primary", size="lg") gr.Examples( examples=[ "Write a function to reverse a string", "Check if a number is prime", "Flatten a nested list recursively", "Merge two sorted lists", "Compute factorial of a number", ], inputs=instruction, label="Try one of these", ) with gr.Column(scale=1): code = gr.Code( label="Python", language="python", lines=20, ) run.click(generate, inputs=instruction, outputs=code) gr.Markdown( """
Base: StarCoder2-1B  •  Fine-tune: LoRA (r=8)  •  Trained on Kaggle P100
""" ) if __name__ == "__main__": demo.launch(theme=theme)