Spaces:
Sleeping
Sleeping
File size: 6,210 Bytes
d6a8ad7 0fc768b 4244d2c 0fc768b f134ba7 10cff5d c6219ec 4244d2c 8f7fdc3 f134ba7 10cff5d f134ba7 10cff5d c38a10f 0fc768b 10cff5d 0fc768b 10cff5d 0fc768b f134ba7 10cff5d f134ba7 10cff5d f134ba7 0fc768b 10cff5d 0fc768b 10cff5d f603eb2 10cff5d f603eb2 10cff5d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
import gradio as gr
import json
import os
from dotenv import load_dotenv
from art_explorer import ExplorationPathGenerator
from typing import Dict, Any, Optional, Union
from datetime import datetime
# Load environment variables
load_dotenv()
# Initialize the generator with error handling
try:
api_key = os.getenv("GROQ_API_KEY")
if not api_key:
raise ValueError("GROQ_API_KEY not found in environment variables")
generator = ExplorationPathGenerator(api_key=api_key)
except Exception as e:
print(f"Error initializing ExplorationPathGenerator: {e}")
raise
def format_output(result: Dict[str, Any]) -> str:
"""Format the exploration result for display with error handling"""
try:
return json.dumps(result, indent=2, ensure_ascii=False)
except Exception as e:
return json.dumps({
"error": str(e),
"status": "failed",
"message": "Failed to format output"
}, indent=2)
def parse_json_input(json_str: str, default_value: Any) -> Any:
"""
Safely parse JSON input with detailed error handling
Args:
json_str: JSON string to parse
default_value: Fallback value if parsing fails
"""
if not json_str or json_str.strip() in ('', '{}', '[]'):
return default_value
try:
return json.loads(json_str)
except json.JSONDecodeError as e:
print(f"JSON parse error: {e}")
return default_value
def validate_parameters(
depth: int,
domain: str,
parameters: Dict[str, Any]
) -> Dict[str, Any]:
"""Validate and merge exploration parameters"""
validated_params = {
"depth": max(1, min(10, depth)), # Clamp depth between 1-10
"domain": domain if domain.strip() else None,
"previous_explorations": []
}
if isinstance(parameters, dict):
validated_params.update(parameters)
return validated_params
def explore(
query: str,
path_history: str = "[]",
parameters: str = "{}",
depth: int = 5,
domain: str = ""
) -> str:
"""
Generate exploration path based on user input with comprehensive error handling
Args:
query (str): User's exploration query
path_history (str): JSON string of previous exploration path
parameters (str): JSON string of exploration parameters
depth (int): Exploration depth parameter (1-10)
domain (str): Specific domain context
Returns:
str: Formatted JSON string of exploration results or error message
"""
try:
# Input validation
if not query.strip():
raise ValueError("Query cannot be empty")
# Parse and validate inputs
selected_path = parse_json_input(path_history, [])
custom_parameters = parse_json_input(parameters, {})
# Validate and merge parameters
exploration_parameters = validate_parameters(depth, domain, custom_parameters)
# Debug logging
print(f"Processing query: {query}")
print(f"Parameters: {json.dumps(exploration_parameters, indent=2)}")
# Generate exploration path - FIXED HERE: changed user_query to query
result = generator.generate_exploration_path(
query=query, # Changed from user_query to query
selected_path=selected_path,
exploration_parameters=exploration_parameters
)
# Validate result
if not isinstance(result, dict):
raise ValueError("Invalid response format from generator")
return format_output(result)
except Exception as e:
error_response = {
"error": str(e),
"status": "failed",
"message": "Failed to generate exploration path",
"details": {
"query": query,
"depth": depth,
"domain": domain
}
}
print(f"Error in explore function: {e}")
return format_output(error_response)
def create_interface() -> gr.Interface:
"""Create and configure the Gradio interface with enhanced examples and documentation"""
inputs = [
gr.Textbox(
label="Exploration Query",
placeholder="Enter your art history exploration query...",
lines=2
),
gr.Textbox(
label="Path History (JSON)",
placeholder="[]",
lines=3,
value="[]"
),
gr.Textbox(
label="Additional Parameters (JSON)",
placeholder="{}",
lines=3,
value="{}"
),
gr.Slider(
label="Exploration Depth",
minimum=1,
maximum=10,
value=5,
step=1
),
gr.Textbox(
label="Domain Context",
placeholder="Optional: Specify art history period or movement",
lines=1
)
]
output = gr.Textbox(
label="Exploration Result",
lines=20
)
examples = [
[
"Explore the evolution of Renaissance painting techniques",
"[]",
"{}",
5,
"Renaissance"
],
[
"Investigate the influence of Japanese art on Impressionism",
"[]",
"{}",
7,
"Impressionism"
],
[
"Analyze the development of Cubism through Picasso's work",
"[]",
"{}",
6,
"Cubism"
]
]
return gr.Interface(
fn=explore,
inputs=inputs,
outputs=output,
title="Art History Exploration Path Generator",
description="""Generate structured exploration paths for art history queries.
## Features:
- Dynamic exploration path generation
- Contextual understanding of art history
- Multi-dimensional analysis
- Customizable exploration depth
## Usage:
1. Enter your art history query
2. Adjust exploration depth (1-10)
3. Optionally specify domain context
4. View generated exploration path""",
examples=examples,
theme="default",
analytics_enabled=False
)
if __name__ == "__main__":
try:
print(f"===== Application Startup at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} =====")
# Create interface
iface = create_interface()
# Launch with custom configurations
iface.launch()
except Exception as e:
print(f"Failed to launch interface: {e}") |