import streamlit as st import json from datetime import datetime import uuid import os import time import base64 from PIL import Image import io from main import call_agent as agent_invoker from main import DemoState def call_agent(query): """ Mock function - replace this with your actual call_agent function """ # This is a mock response for demonstration mock_response = [ {"id": 1, "task": "Fetch DEM data for the specified region", "tool": "DEMFetcher"}, {"id": 2, "task": "Extract drainage networks from available data", "tool": "DrainageExtractor"}, {"id": 3, "task": "Analyze hydrological flow patterns", "tool": "HydrologyAnalyzer"}, {"id": 4, "task": "Generate flood risk assessment maps", "tool": "LLM Reasoning"} ] state = agent_invoker(query) # Mock state object class MockState: def __init__(self): self.query = state.get('query', query) self.response = state.get('response', mock_response) self.output_files_path = state.get('output_files_path', [f"outputs/geospatial_plan_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{uuid.uuid4().hex[:6]}.json"]) return MockState() def get_image_base64(image_path): """Convert local image to base64 string for embedding in HTML""" try: if os.path.exists(image_path): with open(image_path, "rb") as img_file: return base64.b64encode(img_file.read()).decode() else: # Return a placeholder SVG if image doesn't exist placeholder_svg = f""" """ return base64.b64encode(placeholder_svg.encode()).decode() except Exception as e: # Return error placeholder error_svg = f""" """ return base64.b64encode(error_svg.encode()).decode() def create_placeholder_image(text, width=800, height=600, bg_color="#2196F3", text_color="#FFFFFF"): """Create a placeholder image with text""" try: img = Image.new('RGB', (width, height), bg_color) # Note: This creates a simple colored rectangle. For text rendering, you'd need PIL's ImageDraw # For now, we'll return a base64 encoded simple image buffer = io.BytesIO() img.save(buffer, format='PNG') return base64.b64encode(buffer.getvalue()).decode() except: # Fallback to SVG svg = f""" """ return base64.b64encode(svg.encode()).decode() # Sample analysis data with local image paths # Update these paths to point to your actual local images SAMPLE_ANALYSES = [ { "image_path": "output/Chennai_dem_filled.png", # Update this path "caption": "Digital elevation model for CHENNAI,tamil nadu , India", "query": "Create a flood risk assessment map for Chennai during monsoon season" }, { "image_path": "output/chennai_impervious.png", # Update this path "caption": "Impervious Structure in chennai", "query": "Create a flood risk assessment map for Chennai during monsoon season" }, { "image_path": "output/chennai_flow_direction.png", # Update this path "caption": "Chennai Water flow direction", "query": "Create a flood risk assessment map for Chennai during monsoon season" }, { "image_path": "output/chennai_streams.png", # Update this path "caption": "Chennai Stream Flow", "query": "Create a flood risk assessment map for Chennai during monsoon season" }, { "image_path": "output/chennai_raods.png", # Update this path "caption": "Roads Pattern of Chennai", "query": "Create a flood risk assessment map for Chennai during monsoon season" } ] # Page configuration st.set_page_config( page_title="Geospatial AI Task Planner", page_icon="🌍", layout="wide", initial_sidebar_state="collapsed" ) # Custom CSS for modern design (same as before) st.markdown(""" """, unsafe_allow_html=True) # Initialize session state if 'messages' not in st.session_state: st.session_state.messages = [] if 'generated_json' not in st.session_state: st.session_state.generated_json = None if 'processing' not in st.session_state: st.session_state.processing = False if 'current_slide' not in st.session_state: st.session_state.current_slide = 0 if 'last_slide_change' not in st.session_state: st.session_state.last_slide_change = time.time() # Header with logos and title st.markdown("""
Geospatial AI Task Planner
{current_analysis['query']}
Please place your image at: {current_image_path}
Or update the image path in the SAMPLE_ANALYSES list
Path: {current_image_path}
Error: {str(e)}
{json_str}