File size: 6,262 Bytes
7500954 4e5dbac c0e85a0 4e5dbac c0e85a0 7500954 4e5dbac 7500954 4e5dbac 7500954 4e5dbac a508c6b 4e5dbac a508c6b 4e5dbac a508c6b 46979da 4e5dbac 46979da a508c6b 46979da a508c6b 46979da 4e5dbac 7500954 46979da a508c6b 7500954 a508c6b 46979da a508c6b 7500954 a508c6b 7500954 46979da a508c6b 46979da 4e5dbac 46979da 4e5dbac 46979da 4e5dbac 46979da 4e5dbac 46979da 4e5dbac 46979da 4e5dbac a508c6b 46979da a508c6b 46979da a508c6b 7500954 a508c6b 46979da a508c6b 46979da 4e5dbac 46979da 4e5dbac 46979da a508c6b 46979da 4e5dbac 46979da a508c6b 4e5dbac a508c6b 7500954 a508c6b 4e5dbac a508c6b 7500954 a508c6b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
import gradio as gr
from transformers import pipeline
import os
HF_TOKEN = os.environ["HF_TOKEN"]
# Initialize the text generation pipelines
pipe = pipeline("text-generation", model="akhaliq/MyGemmaGradioCoder")
pipe2 = pipeline("text-generation", model="google/gemma-3-270m-it", token=HF_TOKEN)
def generate_code(user_input, model_choice="Model 1"):
"""
Generate code based on user input using the selected Gemma model
"""
messages = [
{"role": "user", "content": user_input},
]
# Select pipeline based on model choice
selected_pipe = pipe if model_choice == "Model 1 (MyGemmaGradioCoder)" else pipe2
# Generate response from the model
response = selected_pipe(messages, max_new_tokens=512, temperature=0.7, do_sample=True)
# Extract the generated text from the response
generated_text = response[0]['generated_text']
# If the response contains the full conversation, extract just the assistant's response
if isinstance(generated_text, list):
# Handle conversation format
for msg in generated_text:
if msg.get('role') == 'assistant':
return msg.get('content', '')
# If no assistant message found, return the last message content
return generated_text[-1].get('content', '') if generated_text else ""
else:
# Handle string format - try to extract the code after the user input
if user_input in generated_text:
return generated_text.split(user_input)[-1].strip()
return generated_text
def generate_both(user_input):
"""
Generate code from both models for comparison
"""
output1 = generate_code(user_input, "Model 1 (MyGemmaGradioCoder)")
output2 = generate_code(user_input, "Model 2 (gemma-3-270m-it)")
return output1, output2
# Create the Gradio interface
with gr.Blocks(title="Text to Code Generator - Model Comparison", theme=gr.themes.Soft()) as demo:
gr.Markdown(
"""
# π Text to Code Generator - Model Comparison
Compare code generation from two different Gemma models:
- **Model 1**: akhaliq/MyGemmaGradioCoder
- **Model 2**: google/gemma-3-270m-it
Simply describe what you want to build, and see how each model responds!
"""
)
with gr.Row():
with gr.Column(scale=1):
# Input section
input_text = gr.Textbox(
label="Describe what you want to code",
placeholder="e.g., Create a Python function that calculates the factorial of a number",
lines=5,
max_lines=10
)
with gr.Row():
generate_btn = gr.Button("Generate from Both Models", variant="primary", scale=2)
clear_btn = gr.ClearButton([input_text], value="Clear", scale=1)
# Examples section
gr.Examples(
examples=[
["Create a Python function to check if a number is prime"],
["Write a JavaScript function to reverse a string"],
["Create a React component for a todo list item"],
["Write a SQL query to find the top 5 customers by total purchase amount"],
["Create a Python class for a bank account with deposit and withdraw methods"],
],
inputs=input_text,
label="Example Prompts"
)
with gr.Column(scale=2):
# Output section - Two columns for comparison
with gr.Row():
with gr.Column():
gr.Markdown("### Model 1: MyGemmaGradioCoder")
output_code1 = gr.Code(
label="Generated Code (Model 1)",
language="python",
lines=15,
interactive=True,
show_line_numbers=True,
wrap_lines=True,
autocomplete=True
)
copy_btn1 = gr.Button("π Copy Code", scale=1)
with gr.Column():
gr.Markdown("### Model 2: gemma-3-270m-it")
output_code2 = gr.Code(
label="Generated Code (Model 2)",
language="python",
lines=15,
interactive=True,
show_line_numbers=True,
wrap_lines=True,
autocomplete=True
)
copy_btn2 = gr.Button("π Copy Code", scale=1)
# Add event handlers
generate_btn.click(
fn=generate_both,
inputs=input_text,
outputs=[output_code1, output_code2],
api_name="generate"
)
input_text.submit(
fn=generate_both,
inputs=input_text,
outputs=[output_code1, output_code2]
)
# Copy functionality for both outputs
copy_btn1.click(
fn=None,
inputs=output_code1,
outputs=None,
js="""
(code) => {
navigator.clipboard.writeText(code);
alert('Code from Model 1 copied to clipboard!');
return null;
}
"""
)
copy_btn2.click(
fn=None,
inputs=output_code2,
outputs=None,
js="""
(code) => {
navigator.clipboard.writeText(code);
alert('Code from Model 2 copied to clipboard!');
return null;
}
"""
)
# Footer
gr.Markdown(
"""
---
π‘ **Tips:**
- Be specific about the programming language you want
- Include details about inputs, outputs, and edge cases
- You can edit the generated code directly in the output box
**Models:**
- [akhaliq/MyGemmaGradioCoder](https://huggingface.co/akhaliq/MyGemmaGradioCoder)
- [google/gemma-3-270m-it](https://huggingface.co/google/gemma-3-270m-it)
"""
)
# Launch the app
if __name__ == "__main__":
demo.launch() |