Chatbot / app.py
Kashif12334's picture
Update app.py
10bfdae verified
import gradio as gr
import os
import requests
# Load GROQ API key from Hugging Face Secrets
GROQ_API_KEY = os.environ.get("GROQ_API_KEY")
GROQ_API_URL = "https://api.groq.com/openai/v1/chat/completions"
MODEL_NAME = "llama-3.1-8b-instant"
# System Prompt (Chatbot Personality)
SYSTEM_PROMPT = """
You are CodeMentor AI, a friendly and expert programming tutor.
You help students learn programming concepts clearly and patiently.
Your behavior:
- Explain concepts step-by-step
- Use simple language
- Give Python examples when possible
- Encourage learning and curiosity
- Correct mistakes politely
"""
def query_groq(message, chat_history, temperature):
headers = {
"Authorization": f"Bearer {GROQ_API_KEY}",
"Content-Type": "application/json"
}
messages = [{"role": "system", "content": SYSTEM_PROMPT}]
for user, bot in chat_history:
messages.append({"role": "user", "content": user})
messages.append({"role": "assistant", "content": bot})
messages.append({"role": "user", "content": message})
response = requests.post(
GROQ_API_URL,
headers=headers,
json={
"model": MODEL_NAME,
"messages": messages,
"temperature": temperature
}
)
if response.status_code == 200:
return response.json()["choices"][0]["message"]["content"]
else:
return f"Error {response.status_code}: {response.text}"
def respond(message, chat_history, temperature):
bot_reply = query_groq(message, chat_history, temperature)
chat_history.append((message, bot_reply))
return "", chat_history
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("## 💻 Kashif's CodeMentor AI – Your Programming Tutor")
chatbot = gr.Chatbot(height=400)
state = gr.State([])
with gr.Row():
msg = gr.Textbox(label="Ask a programming question")
# UI Improvement (Requirement #4)
temperature = gr.Slider(
0.1, 1.0, value=0.7, step=0.1,
label="Response Creativity Level"
)
with gr.Row():
send = gr.Button("Send")
clear = gr.Button("Clear Chat")
send.click(respond, [msg, state, temperature], [msg, chatbot])
msg.submit(respond, [msg, state, temperature], [msg, chatbot])
clear.click(lambda: ([], []), None, [chatbot, state])
demo.launch()