Spaces:
Runtime error
Runtime error
| 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() |