mishrabp's picture
Upload folder using huggingface_hub
48b138d verified
import gradio as gr
import requests
import datetime
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Backend endpoint - use environment variable or default to Hugging Face
BASE_URL = os.getenv("API_BASE_URL", "https://mishrabp-trip-advisor-api.hf.space")
def format_travel_plan(answer):
"""Format the travel plan response with markdown styling"""
return f"""### πŸ—ΊοΈ AI-Generated Travel Plan
**Generated:** {datetime.datetime.now().strftime('%Y-%m-%d at %H:%M')}
**Created by:** Kube9t's Travel Agent
---
{answer}
---
πŸ“ *Please double-check all travel details, costs, and dates before booking.*"""
def query_travel_agent(message, history):
"""Handle the travel agent query and format the response"""
try:
# Make API request
payload = {"question": message}
response = requests.post(f"{BASE_URL}/query", json=payload)
if response.status_code == 200:
answer = response.json().get("answer", "No answer returned.")
formatted_response = {
"role": "assistant",
"content": format_travel_plan(answer)
}
else:
formatted_response = {
"role": "assistant",
"content": f"❌ Bot failed to respond: {response.text}"
}
except Exception as e:
formatted_response = {
"role": "assistant",
"content": f"⚠️ Something went wrong: {str(e)}"
}
# Return updated history
return history + [
{"role": "user", "content": message},
formatted_response
]
def create_demo():
"""Create and configure the Gradio interface"""
with gr.Blocks(theme=gr.themes.Soft()) as demo:
# Header
gr.Markdown(
"""
# 🌍 Travel Planner Agentic Application
Let me help you design your next perfect trip β€” just tell me where you want to go!
"""
)
with gr.Row():
# Sidebar
with gr.Column(scale=1):
gr.Image(
"https://cdn-icons-png.flaticon.com/512/201/201623.png",
width=80,
show_label=False
)
gr.Markdown("### Navigation")
gr.Markdown("- 🏠 Home\n- 🧳 My Trips\n- βš™οΈ Settings")
gr.Markdown("---")
gr.Markdown("*Powered by Kube9t's Travel Agent AI*")
# Main chat interface
with gr.Column(scale=3):
chatbot = gr.Chatbot(
height=400,
show_label=False,
avatar_images=["πŸ‘€", "πŸ€–"],
type="messages" # Use new message format
)
msg = gr.Textbox(
label="Ask me something like: 'Plan a 7 days trip to Washington-DC, NewYork, and Niagra.'",
placeholder="Type your travel query here...",
lines=2
)
with gr.Row():
submit = gr.Button("Send", variant="primary")
clear = gr.Button("Clear")
# Event handlers
msg.submit(
fn=query_travel_agent,
inputs=[msg, chatbot],
outputs=chatbot
).then(
fn=lambda: "",
outputs=msg
)
submit.click(
fn=query_travel_agent,
inputs=[msg, chatbot],
outputs=chatbot
).then(
fn=lambda: "",
outputs=msg
)
clear.click(lambda: [], outputs=chatbot)
return demo
# Create and launch the app
app = create_demo()
if __name__ == "__main__":
# Determine if running locally
is_local = os.getenv("RUNNING_LOCAL", "false").lower() == "true"
# Launch with appropriate settings
if is_local:
app.launch(
server_name="127.0.0.1",
server_port=7860,
share=False
)
else:
app.launch()