umangchaudhry's picture
Update app.py
1afb8ef verified
"""
Gradio ChatInterface for Survey Agent V2 - Simplified Version
Uses ChatInterface to avoid API generation bugs
"""
import os
import sys
from pathlib import Path
# Add parent directory to path for imports
sys.path.append(str(Path(__file__).parent))
from survey_agent import SurveyAnalysisAgent
try:
from dotenv import load_dotenv
load_dotenv()
except ImportError:
pass
import gradio as gr
# Global agent
agent = None
def initialize_agent():
"""Initialize the survey analysis agent"""
global agent
if agent is not None:
return agent
openai_api_key = os.getenv("OPENAI_API_KEY")
pinecone_api_key = os.getenv("PINECONE_API_KEY")
if not openai_api_key or not pinecone_api_key:
raise ValueError("Missing API keys")
print("Initializing Survey Analysis Agent...")
agent = SurveyAnalysisAgent(
openai_api_key=openai_api_key,
pinecone_api_key=pinecone_api_key,
verbose=True
)
print("✅ Agent initialized!")
return agent
def respond(message, history):
"""Process user message and return bot response"""
global agent
# Initialize agent if needed
if agent is None:
try:
agent = initialize_agent()
except Exception as e:
return f"⚠️ Error: {str(e)}"
try:
# Use a default thread ID
thread_id = "gradio_session"
response = agent.query(message, thread_id=thread_id)
return response
except Exception as e:
return f"❌ Error: {str(e)}\n\nPlease try rephrasing your question."
# Create the interface
print("Creating Gradio interface...")
# Create a custom chatbot with larger height
chatbot = gr.Chatbot(
height=650, # Increased height for better readability
show_copy_button=True, # Allow copying responses
type='messages', # Use openai-style message format
)
demo = gr.ChatInterface(
respond,
chatbot=chatbot,
title="🗳️ Vanderbilt Unity Poll Survey Agent",
description="""
### AI-Powered Analysis of Survey Data
Ask questions about American public opinion using natural language.
The system will search through survey data and provide comprehensive answers.
**Example questions:**
- What do Americans think about immigration in June 2025?
- How has Biden's approval rating changed over time?
- Show me views on the economy by political party
- Break that down by gender
**Available data:**
- 9 polls from 2023-2025
- 125 questions across topics like immigration, economy, healthcare, etc.
- Demographic breakdowns by party, gender, age, and more
""",
examples=[
"What do Americans think about immigration in June 2025?",
"How has Biden's approval rating changed?",
"Show me views on the economy by political party",
],
cache_examples=False, # Disable example caching to avoid running queries during startup
theme=gr.themes.Soft(),
)
if __name__ == "__main__":
print("\nLaunching Gradio interface...")
print("The interface will open at http://127.0.0.1:7860")
print("\nPress Ctrl+C to stop.\n")
# Pre-initialize the agent
try:
initialize_agent()
except Exception as e:
print(f"⚠️ Warning: {e}")
demo.launch(
server_name="0.0.0.0", # Bind to all interfaces for Hugging Face deployment
server_port=7860,
share=False,
show_error=True
)