arjunanand13's picture
Update app.py
dd5aa4f verified
raw
history blame
2.77 kB
import os
import sqlite3
import requests
import openai
import gradio as gr
# Load API keys from environment
openai.api_key = os.getenv("OPENAI_API_KEY")
# --- Agents ---
def db_agent(query: str) -> str:
try:
conn = sqlite3.connect("shop.db")
cur = conn.cursor()
if "max revenue" in query.lower():
cur.execute(
"""
SELECT product, SUM(amount) AS revenue
FROM transactions
WHERE date = date('now')
GROUP BY product
ORDER BY revenue DESC
LIMIT 1
"""
)
row = cur.fetchone()
if row:
return f"Top product today: {row[0]} with ₹{row[1]:,.2f}"
return "No transactions found for today."
return None
except sqlite3.OperationalError as e:
# Handle missing table or other DB errors
return f"Database error: {e}. Please initialize 'transactions' table in shop.db."
def web_search_agent(query: str) -> str:
# Example using SerpAPI
resp = requests.get(
"https://serpapi.com/search",
params={"q": query, "api_key": os.getenv("SERPAPI_KEY")}
)
data = resp.json()
snippet = data.get("organic_results", [{}])[0].get("snippet", "")
return llm_agent(f"Summarize: {snippet}")
def llm_agent(prompt: str) -> str:
# Updated for openai>=1.0.0 interface
response = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt},
],
temperature=0.2,
)
return response.choices[0].message.content.strip()
def handle_query(query: str) -> str:
q = query.lower()
if any(k in q for k in ["max", "revenue", "today", "product"]):
return db_agent(query)
elif any(k in q for k in ["who", "what", "when", "where"]):
return web_search_agent(query)
else:
return llm_agent(query)
# --- Gradio UI ---
with gr.Blocks() as demo:
gr.Markdown("## Shop Voice-Box Assistant")
user_input = gr.Textbox(placeholder="Type your question here...", lines=2)
submit_btn = gr.Button("Submit")
response_box = gr.Textbox(label="Answer")
# Sample questions
gr.Examples(
examples=[
["What is the max revenue product today?"],
["Who invented the light bulb?"],
["Tell me a joke about cats."],
],
inputs=user_input,
outputs=response_box,
)
submit_btn.click(fn=handle_query, inputs=user_input, outputs=response_box)
if __name__ == "__main__":
demo.launch(share=False, server_name="0.0.0.0", server_port=7860)