File size: 3,889 Bytes
c4cf4bc
55e69a7
c4cf4bc
267970e
55e69a7
c4cf4bc
9dc5d2f
c4cf4bc
 
267970e
c4cf4bc
53b0f27
c4cf4bc
9dc5d2f
267970e
c4cf4bc
53b0f27
c4cf4bc
53b0f27
 
 
 
55e69a7
c4cf4bc
 
9dc5d2f
 
c4cf4bc
9dc5d2f
c4cf4bc
 
53b0f27
c4cf4bc
 
 
 
 
 
 
 
9dc5d2f
c4cf4bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53b0f27
 
267970e
c4cf4bc
 
 
 
267970e
c4cf4bc
 
 
 
267970e
c4cf4bc
 
53b0f27
c4cf4bc
 
9dc5d2f
 
 
 
c4cf4bc
9dc5d2f
53b0f27
c4cf4bc
53b0f27
9dc5d2f
53b0f27
655e71d
9dc5d2f
53b0f27
c4cf4bc
 
53b0f27
c4cf4bc
 
53b0f27
9dc5d2f
 
 
c4cf4bc
 
 
 
 
9dc5d2f
 
655e71d
9dc5d2f
c4cf4bc
9dc5d2f
 
 
 
 
 
c4cf4bc
9dc5d2f
 
 
 
 
 
267970e
53b0f27
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# app.py
import os
import time
import streamlit as st
from groq import Groq
from streamlit_lottie import st_lottie
import requests
import json
import base64

# --- Constants ---
PRIMARY_MODEL = "qwen-2.5-coder-32b"
SUPPORTED_LANGUAGES = ["Python", "JavaScript", "Java", "C++", "Go", "Rust"]
LOTTIE_URL = "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):
    response = requests.get(url)
    return response.json() if response.status_code == 200 else None

# --- Custom CSS ---
def inject_css():
    st.markdown(f"""
    <style>
        .main {{
            background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
            color: #ffffff;
        }}
        
        .stTextInput input {{
            background: rgba(0,0,0,0.3) !important;
            border: 2px solid #4fffb0 !important;
            color: #4fffb0 !important;
        }}
        
        .code-editor {{
            border: 2px solid #4fffb0;
            border-radius: 15px;
            padding: 1rem;
            background: rgba(0,0,0,0.5) !important;
        }}
        
        .download-btn {{
            background: linear-gradient(45deg, #4fffb0, #2bd2ff) !important;
            color: #1a1a2e !important;
            border: none !important;
            border-radius: 25px;
            padding: 12px 24px;
        }}
    </style>
    """, unsafe_allow_html=True)

# --- File Download Generator ---
def get_download_link(code, filename):
    b64 = base64.b64encode(code.encode()).decode()
    return f'<a href="data:file/txt;base64,{b64}" download="{filename}" class="download-btn">⬇️ Download {filename}</a>'

# --- 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:
        response = client.chat.completions.create(
            model=PRIMARY_MODEL,
            messages=[{
                "role": "user",
                "content": f"Generate {lang} code for: {query}. Include comments and error handling."
            }],
            temperature=0.7,
            max_tokens=4096
        )
        return response.choices[0].message.content
    except Exception as e:
        st.error(f"Error: {str(e)}")
        return None

# --- Main UI ---
def main():
    inject_css()
    client = init_groq()
    
    # --- Hero Section ---
    col1, col2 = st.columns([1, 2])
    with col1:
        lottie_anim = load_lottie(LOTTIE_URL)
        if lottie_anim:
            st_lottie(lottie_anim, height=150)
    with col2:
        st.markdown("# CodeForge AI")
        st.markdown("### _Transform Ideas into Production Code_ ⚑")

    # --- Language Selector ---
    lang = st.sidebar.selectbox("πŸ’» Language", SUPPORTED_LANGUAGES)
    user_query = st.text_input("🎯 Describe your requirement:", placeholder="e.g., 'Create a REST API with JWT authentication'")

    # --- Generation Flow ---
    if st.button("πŸš€ Generate Code", use_container_width=True):
        if user_query:
            with st.spinner(f"🧠 Crafting {lang} code..."):
                code = generate_code(client, user_query, lang)
                if code:
                    st.session_state.code = code
                    st.balloons()
                    
                    with st.expander(f"✨ Generated Code", expanded=True):
                        st.code(code)
                        ext = {"Python": "py", "JavaScript": "js"}.get(lang, "txt")
                        st.markdown(get_download_link(code, f"code.{ext}"), unsafe_allow_html=True)
        else:
            st.warning("Please enter a requirement!")

if __name__ == "__main__":
    main()