Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
# Load CodeGen model | |
model_name = "Salesforce/codegen-350M-mono" | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModelForCausalLM.from_pretrained(model_name) | |
# Set padding token | |
tokenizer.pad_token = tokenizer.eos_token | |
model.config.pad_token_id = model.config.eos_token_id | |
# Language templates | |
language_templates = { | |
"Python": "# Language: Python\n# Task: ", | |
"JavaScript": "// Language: JavaScript\n// Task: ", | |
"C++": "// Language: C++\n// Task: ", | |
"Java": "// Language: Java\n// Task: ", | |
"HTML": "<!-- Language: HTML -->\n<!-- Task: ", | |
"SQL": "-- Language: SQL\n-- Task: ", | |
"Bash": "# Language: Bash\n# Task: " | |
} | |
# Code generation function | |
def generate_code(prompt, language="Python", temperature=0.7, max_tokens=256): | |
template = language_templates.get(language, "") | |
full_prompt = template + prompt + "\n" | |
inputs = tokenizer(full_prompt, return_tensors="pt").to(model.device) | |
outputs = model.generate( | |
**inputs, | |
max_length=len(inputs["input_ids"][0]) + max_tokens, | |
temperature=temperature, | |
top_p=0.95, | |
top_k=50, | |
do_sample=True, | |
pad_token_id=tokenizer.pad_token_id, | |
eos_token_id=tokenizer.eos_token_id | |
) | |
generated_code = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
return generated_code[len(full_prompt):].strip() | |
# Chat function with history | |
def chat_with_codegen(user_input, language, history): | |
if not user_input.strip(): | |
return history, "Please enter a prompt." | |
generated_code = generate_code(user_input, language) | |
history.append((f"[{language}] {user_input}", generated_code)) | |
return history, generated_code | |
# Gradio UI | |
with gr.Blocks(title="Multilingual CodeGen Chatbot with History") as demo: | |
gr.Markdown("## π€ CodeGen Chatbot with Language Support + Prompt History") | |
gr.Markdown("Describe what you want the code to do. Select a language. Click Generate!") | |
with gr.Row(): | |
lang_choice = gr.Dropdown(choices=list(language_templates.keys()), value="Python", label="π¬ Language") | |
user_input = gr.Textbox(label="π Your Prompt", placeholder="e.g., Write a function to reverse a string") | |
chatbot = gr.Chatbot(label="π§ Chat History") | |
output = gr.Code(label="π§Ύ Generated Code") | |
state = gr.State([]) # Keeps history | |
generate_btn = gr.Button("π Generate Code") | |
generate_btn.click( | |
fn=chat_with_codegen, | |
inputs=[user_input, lang_choice, state], | |
outputs=[chatbot, output] | |
) | |
demo.launch() | |