Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import torch | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| # ============================== | |
| # PAGE CONFIG | |
| # ============================== | |
| st.set_page_config(page_title="π» AI Code Generator", layout="wide") | |
| st.title("π» AI Code Generator (Stable Version)") | |
| # ============================== | |
| # LOAD MODEL (SAFE) | |
| # ============================== | |
| def load_model(): | |
| model_name = "deepseek-ai/deepseek-coder-1.3b-instruct" # β HF Free Safe | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForCausalLM.from_pretrained( | |
| model_name, | |
| torch_dtype=torch.float32 | |
| ) | |
| model.eval() | |
| return tokenizer, model | |
| # Load with spinner (IMPORTANT) | |
| with st.spinner("π Loading AI model... Please wait"): | |
| tokenizer, model = load_model() | |
| st.success("β Model Loaded Successfully") | |
| # ============================== | |
| # CLEAN OUTPUT | |
| # ============================== | |
| def clean_code(code): | |
| code = code.strip() | |
| # Remove unwanted text | |
| remove_words = [ | |
| "Explanation:", | |
| "Here is the code:", | |
| "Output:", | |
| "Answer:" | |
| ] | |
| for word in remove_words: | |
| code = code.replace(word, "") | |
| # Remove markdown | |
| code = code.replace("```python", "").replace("```", "") | |
| return code.strip() | |
| # ============================== | |
| # GENERATE CODE | |
| # ============================== | |
| def generate_code(prompt, language): | |
| full_prompt = f""" | |
| You are an expert {language} programmer. | |
| Write clean, correct, and complete code. | |
| Rules: | |
| - Only return code | |
| - No explanations | |
| - Complete solution | |
| Task: | |
| {prompt} | |
| Code: | |
| """ | |
| inputs = tokenizer(full_prompt, return_tensors="pt", truncation=True) | |
| try: | |
| with torch.no_grad(): | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=200, | |
| do_sample=True, | |
| temperature=0.3, | |
| top_p=0.9, | |
| repetition_penalty=1.1, | |
| pad_token_id=tokenizer.eos_token_id | |
| ) | |
| result = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| if "Code:" in result: | |
| result = result.split("Code:")[-1] | |
| return clean_code(result) | |
| except Exception as e: | |
| return f"# ERROR: {str(e)}" | |
| # ============================== | |
| # SESSION STATE | |
| # ============================== | |
| if "history" not in st.session_state: | |
| st.session_state.history = [] | |
| # ============================== | |
| # UI INPUT | |
| # ============================== | |
| 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..."): | |
| code = generate_code(user_prompt, language) | |
| st.session_state.history.append((user_prompt, code)) | |
| # ============================== | |
| # OUTPUT DISPLAY | |
| # ============================== | |
| if st.session_state.history: | |
| st.subheader("π Generated Results") | |
| for q, c in reversed(st.session_state.history): | |
| st.markdown(f"**π§ Task:** {q}") | |
| st.code(c, language=language.lower()) |