Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import pipeline, AutoTokenizer | |
| # Load the StarChat beta model | |
| MODEL_NAME = "HuggingFaceH4/starchat-beta" | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) | |
| generator = pipeline( | |
| "text-generation", | |
| model=MODEL_NAME, | |
| tokenizer=tokenizer, | |
| device="cpu", # Free tier uses CPU | |
| ) | |
| def generate_code(natural_language_input): | |
| try: | |
| # Create a proper prompt for the model | |
| chat_prompt = [ | |
| {"role": "system", "content": "You are a helpful AI assistant that generates Python code based on natural language descriptions."}, | |
| {"role": "user", "content": f"Write Python code that: {natural_language_input}"} | |
| ] | |
| # Generate the prompt for the model | |
| prompt = tokenizer.apply_chat_template(chat_prompt, tokenize=False, add_generation_prompt=True) | |
| # Generate code with appropriate parameters for code generation | |
| generated = generator( | |
| prompt, | |
| max_new_tokens=256, | |
| temperature=0.2, | |
| top_p=0.95, | |
| do_sample=True, | |
| pad_token_id=tokenizer.eos_token_id, | |
| eos_token_id=tokenizer.eos_token_id, | |
| ) | |
| # Extract and clean the generated code | |
| full_response = generated[0]['generated_text'] | |
| code_response = full_response.replace(prompt, "").strip() | |
| # Sometimes the model adds non-code text - we'll try to extract just the code blocks | |
| if "```python" in code_response: | |
| code_response = code_response.split("```python")[1].split("```")[0] | |
| elif "```" in code_response: | |
| code_response = code_response.split("```")[1].split("```")[0] | |
| return code_response | |
| except Exception as e: | |
| return f"Error generating code: {str(e)}" | |
| # Gradio interface | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown(""" | |
| # 🚀 Text to Python Code Generator | |
| ### Powered by StarChat Beta | |
| Describe what you want the code to do in natural language, and get Python code! | |
| """) | |
| with gr.Row(): | |
| with gr.Column(scale=3): | |
| input_text = gr.Textbox( | |
| label="Describe your code task", | |
| placeholder="e.g., 'create a Flask web server with two routes'", | |
| lines=3, | |
| max_lines=6 | |
| ) | |
| with gr.Row(): | |
| generate_btn = gr.Button("Generate Code", variant="primary") | |
| clear_btn = gr.Button("Clear") | |
| gr.Markdown("**Tips:** Be specific in your description for better results.") | |
| with gr.Column(scale=4): | |
| output_code = gr.Code( | |
| label="Generated Python Code", | |
| language="python", | |
| interactive=True, | |
| lines=10 | |
| ) | |
| with gr.Row(): | |
| copy_btn = gr.Button("Copy to Clipboard") | |
| refresh_btn = gr.Button("Try Again") | |
| # Examples | |
| examples = gr.Examples( | |
| examples=[ | |
| ["create a function to calculate factorial recursively"], | |
| ["write code to download a file from URL and save it locally"], | |
| ["create a pandas DataFrame from a dictionary and plot a bar chart"], | |
| ["implement a simple REST API using FastAPI with GET and POST endpoints"] | |
| ], | |
| inputs=input_text, | |
| label="Click any example to try it" | |
| ) | |
| # Button actions | |
| generate_btn.click( | |
| fn=generate_code, | |
| inputs=input_text, | |
| outputs=output_code | |
| ) | |
| clear_btn.click( | |
| fn=lambda: ("", ""), | |
| inputs=None, | |
| outputs=[input_text, output_code] | |
| ) | |
| refresh_btn.click( | |
| fn=generate_code, | |
| inputs=input_text, | |
| outputs=output_code | |
| ) | |
| copy_btn.click( | |
| fn=lambda code: gr.Clipboard().copy(code), | |
| inputs=output_code, | |
| outputs=None, | |
| api_name="copy_code" | |
| ) | |
| demo.launch(debug=True) |