import streamlit as st import torch from transformers import AutoTokenizer, AutoModelForCausalLM import os # ============================== # 🔐 HIDE STREAMLIT MENU # ============================== st.markdown(""" """, unsafe_allow_html=True) # ============================== # PAGE CONFIG # ============================== st.set_page_config(page_title="💻 AI Code Generator", layout="wide") # ============================== # HF TOKEN (SECURE) # ============================== HF_TOKEN = os.environ.get("HF_TOKEN") if not HF_TOKEN: st.error("❌ HF_TOKEN not found. Add it in Hugging Face Secrets.") st.stop() # ============================== # LOAD MODEL (CACHED) # ============================== @st.cache_resource def load_model(): model_name = "google/codegemma-2b" tokenizer = AutoTokenizer.from_pretrained( model_name, token=HF_TOKEN ) model = AutoModelForCausalLM.from_pretrained( model_name, token=HF_TOKEN, torch_dtype=torch.float16, device_map="auto" ) return tokenizer, model tokenizer, model = load_model() # ============================== # CODE GENERATION FUNCTION # ============================== def generate_code(prompt, language): full_prompt = f""" You are an expert {language} developer. Write clean, optimized, production-ready code. Task: {prompt} Rules: - Only return code - No explanation """ inputs = tokenizer(full_prompt, return_tensors="pt").to(model.device) outputs = model.generate( **inputs, max_new_tokens=300, temperature=0.2, top_p=0.9, do_sample=True ) result = tokenizer.decode(outputs[0], skip_special_tokens=True) # Remove prompt from output return result.replace(full_prompt, "").strip() # ============================== # UI # ============================== st.title("💻 AI Code Generator (CodeGemma)") col1, col2 = st.columns(2) with col1: user_prompt = st.text_area("Describe your task", height=200) with col2: language = st.selectbox( "Select Programming Language", ["Python", "JavaScript", "SQL", "Java", "C++", "HTML", "CSS"] ) # ============================== # GENERATE BUTTON # ============================== if st.button("🚀 Generate Code"): if not user_prompt.strip(): st.warning("Please enter a task") else: with st.spinner("Generating code..."): try: code = generate_code(user_prompt, language) st.success("✅ Generated Code") st.code(code, language=language.lower()) except Exception as e: st.error(f"❌ Error: {str(e)}")