File size: 3,026 Bytes
b4213c6
 
 
 
39ba76a
c0d7296
39ba76a
c0fd556
 
39ba76a
 
 
b4213c6
39ba76a
c0d7296
39ba76a
c0d7296
c0fd556
 
 
c0d7296
c0fd556
b4213c6
c0d7296
39ba76a
c0fd556
 
c0d7296
c0fd556
b4213c6
39ba76a
c0fd556
 
 
 
 
b4213c6
39ba76a
c0fd556
 
 
 
 
 
39ba76a
c0d7296
39ba76a
c0fd556
c0d7296
c0fd556
 
 
 
c0d7296
c0fd556
 
 
c0d7296
c0fd556
39ba76a
c0fd556
 
 
 
c0d7296
c0fd556
 
 
 
 
c0d7296
39ba76a
 
 
 
c0fd556
c0d7296
c0fd556
 
 
c0d7296
c0fd556
 
b4213c6
39ba76a
c0d7296
39ba76a
b4213c6
 
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
import streamlit as st
import google.generativeai as genai
import os

# -------------------------------------------------
# 1️⃣ Page configuration
# -------------------------------------------------
st.set_page_config(page_title="Python Code Reviewer 🤖", layout="centered")
st.title("🐍 Python Code Reviewer 🤖")
st.markdown(
    "### Paste your code and a short prompt – the AI will review it for you!"
)

# -------------------------------------------------
# 2️⃣ Input fields
# -------------------------------------------------
# Optional API key – falls back to the hard‑coded key
api_key_input = st.text_input(
    "🔑 Google API Key (optional – leave blank to use the built‑in key)",
    type="password",
    help="Enter your own Gemini API key if you have one; otherwise the default key is used."
)

# Optional system prompt – falls back to env var or a generic default
sys_prompt_input = st.text_input(
    "🗒️ System Prompt (optional)",
    placeholder="e.g., 'You are a friendly Python code reviewer.'",
    help="Custom instructions for the model."
)

# Code to be reviewed
code_box = st.text_area(
    "💻 Your Python code:",
    height=200,
    placeholder="# Paste your Python code here"
)

# What the model should do with the code
prompt_box = st.text_area(
    "📝 What should the AI do with this code?",
    height=80,
    placeholder="e.g., 'Find bugs and suggest improvements.'"
)

# -------------------------------------------------
# 3️⃣ Main logic (runs on button press)
# -------------------------------------------------
if st.button("🚀 Review"):
    # ---- Validate that code was provided ----
    if not code_box.strip():
        st.warning("⚠️ Please paste some Python code.")
        st.stop()

    # ---- Choose API key (user‑provided > fallback) ----
    api_key = api_key_input.strip() or "AIzaSyBiAW2GQLid0HGe9Vs_ReKwkwsSVNegNzs"
    genai.configure(api_key=api_key)

    # ---- Choose system instruction (user input > env var > default) ----
    system_instruction = (
        sys_prompt_input.strip()
        or os.getenv("USER_PROMPT")
        or "You are a helpful Python code reviewer."
    )

    # ---- Initialise the Gemini model ----
    model = genai.GenerativeModel(
        model_name="models/gemini-2.5-flash",
        system_instruction=system_instruction,
    )

    # ---- Build the message sent to Gemini ----
    user_message = (
        f"Code:\n```python\n{code\_box}\n```\n\n"
        f"Task: {prompt_box or 'Review the code.'}"
    )

    # ---- Generate the response ----
    with st.spinner("Analyzing your code... 🧐"):
        response = model.generate_content(user_message)

    # ---- Display the result ----
    st.markdown("### 🤖 Response")
    st.success(response.text)

# -------------------------------------------------
# 4️⃣ Footer
# -------------------------------------------------
st.markdown("---")
st.markdown("🛠️ **Built with Streamlit & Google Gemini AI** | ❤️ _Happy Coding!_ 🐍")