# app.py import os import time import streamlit as st from groq import Groq from streamlit_lottie import st_lottie import json import base64 # --- Constants --- PRIMARY_MODEL = "qwen-2.5-coder-32b" SUPPORTED_LANGUAGES = ["Python", "JavaScript", "Java", "C++", "Go", "Rust"] LOTTIE_ANIMATION = "https://assets3.lottiefiles.com/packages/lf20_hi95bvmx/ai.json" # --- Setup --- st.set_page_config( page_title="CodeForge AI", page_icon="🚀", layout="wide", initial_sidebar_state="expanded" ) # --- Lottie Animation Loader --- def load_lottie(url): with open("animation.json") as f: return json.load(f) # --- Custom CSS with Animations --- def inject_css(): st.markdown(f""" """, unsafe_allow_html=True) # --- File Download Generator --- def get_download_link(code, filename): b64 = base64.b64encode(code.encode()).decode() return f'⬇️ Download {filename}' # --- Model Client --- @st.cache_resource def init_groq(): return Groq(api_key=os.environ.get("GROQ_API_KEY")) # --- Code Generation Core --- def generate_code(client, query, lang): try: system_prompt = f""" You are a {lang} expert. Generate: 1. Clean, production-ready code 2. With error handling 3. Proper documentation 4. Optimized for performance """ response = client.chat.completions.create( model=PRIMARY_MODEL, messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": query} ], temperature=0.7, max_tokens=4096, top_p=0.95 ) return response.choices[0].message.content except Exception as e: st.error(f"🚨 Generation Error: {str(e)}") return None # --- UI Components --- def main(): inject_css() client = init_groq() # --- Hero Section --- col1, col2 = st.columns([1, 2]) with col1: st_lottie(load_lottie(LOTTIE_ANIMATION), height=200) with col2: st.markdown("# CodeForge AI") st.markdown("### _Transform Ideas into Production Code_ ⚡") # --- Language Selector --- lang = st.sidebar.selectbox("💻 Programming Language", SUPPORTED_LANGUAGES, index=0) user_query = st.text_input("🎯 Describe your coding requirement:", placeholder="e.g., 'Create a REST API with JWT authentication'") # --- Main Generation Flow --- if st.button("🚀 Generate Code", use_container_width=True): if not user_query: st.warning("⚠️ Please enter a coding requirement!") return with st.spinner(f"🧠 Crafting {lang} magic..."): start_time = time.time() code = generate_code(client, user_query, lang) gen_time = time.time() - start_time if code: st.session_state.code = code st.balloons() # --- Code Display --- with st.expander(f"✨ Generated {lang} Code", expanded=True): st.code(code, language="python" if lang == "Python" else "javascript") # --- Download Button --- ext = {"Python": "py", "JavaScript": "js", "Java": "java", "C++": "cpp", "Go": "go", "Rust": "rs"}[lang] st.markdown(get_download_link(code, f"generated_code.{ext}"), unsafe_allow_html=True) # --- Performance Metrics --- st.sidebar.markdown(f""" ### 📊 Generation Metrics ⏱️ **Time**: {gen_time:.2f}s 📝 **Tokens**: {len(code.split())} 🧠 **Model**: {PRIMARY_MODEL} """) # --- Explanation Section --- if st.button("📖 Explain Implementation"): with st.spinner("🔍 Analyzing code structure..."): explanation = client.chat.completions.create( model=PRIMARY_MODEL, messages=[{ "role": "user", "content": f"Explain this {lang} code:\n\n{code}" }] ) st.markdown(f"## Code Breakdown\n{explanation.choices[0].message.content}") if __name__ == "__main__": main()