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

# -------------------------------------------------
# 1️⃣  UI – page setup
# -------------------------------------------------
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
# -------------------------------------------------
# API key (optional – fallback to 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 app uses the default key."
)

# System prompt (optional – fallback to env var or 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. If left empty, the USER_PROMPT env var is used."
)

# 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 – run when button pressed
# -------------------------------------------------
if st.button("🚀 Review"):
    # ---- Validate input ----
    if not code_box.strip():
        st.warning("⚠️ Please paste some Python code.")
        st.stop()

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

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

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

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

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

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

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