File size: 4,152 Bytes
d6a8ad7
0fc768b
 
4244d2c
0fc768b
 
c6219ec
4244d2c
 
8f7fdc3
0fc768b
 
c38a10f
0fc768b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4244d2c
0fc768b
 
 
 
 
 
 
 
 
a48e4da
0fc768b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4244d2c
0fc768b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a7cc45c
ed2b31f
a7cc45c
 
0fc768b
ed2b31f
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
import gradio as gr
import json
import os
from dotenv import load_dotenv
from art_explorer import ExplorationPathGenerator
from typing import Dict, Any

# Load environment variables
load_dotenv()

# Initialize the generator
generator = ExplorationPathGenerator(api_key=os.getenv("GROQ_API_KEY"))

def format_output(result: Dict[str, Any]) -> str:
  """Format the exploration result for display"""
  return json.dumps(result, indent=2)

def parse_json_input(json_str: str, default_value: Any) -> Any:
  """Safely parse JSON input with fallback to default value"""
  try:
      return json.loads(json_str) if json_str else default_value
  except json.JSONDecodeError:
      return default_value

def explore(
  query: str,
  path_history: str = "[]",
  parameters: str = "{}",
  depth: int = 5,
  domain: str = ""
) -> str:
  """
  Generate exploration path based on user input
  
  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
      domain (str): Specific domain context
  
  Returns:
      str: Formatted JSON string of exploration results
  """
  # Parse path history
  selected_path = parse_json_input(path_history, [])
  
  # Parse and merge parameters
  base_parameters = {
      "depth": depth,
      "domain": domain if domain else None,
      "previous_explorations": []
  }
  
  custom_parameters = parse_json_input(parameters, {})
  exploration_parameters = {**base_parameters, **custom_parameters}

  try:
      # Generate exploration path
      result = generator.generate_exploration_path(
          user_query=query,
          selected_path=selected_path,
          exploration_parameters=exploration_parameters
      )
      
      # Format and return result
      return format_output(result)
  except Exception as e:
      error_response = {
          "error": str(e),
          "status": "failed",
          "message": "Failed to generate exploration path"
      }
      return format_output(error_response)

def create_interface() -> gr.Interface:
  """Create and configure the Gradio interface"""
  
  # Define interface inputs
  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
      )
  ]

  # Define interface output
  output = gr.Textbox(
      label="Exploration Result",
      lines=20
  )

  # Create and return interface
  return gr.Interface(
      fn=explore,
      inputs=inputs,
      outputs=output,
      title="Art History Exploration Path Generator",
      description="""
      Generate structured exploration paths for art history queries.
      
      - Enter your query about any art history topic
      - Optionally provide previous exploration path as JSON
      - Adjust exploration parameters as needed
      - View the generated exploration path with multiple dimensions
      """,
      examples=[
          [
              "Explore the evolution of Renaissance painting techniques",
              "[]",
              "{}",
              5,
              "Renaissance"
          ],
          [
              "Investigate the influence of Japanese art on Impressionism",
              "[]",
              "{}",
              7,
              "Impressionism"
          ]
      ],
      theme="default"
  )

# Create and launch the interface
iface = create_interface()



if __name__ == "__main__":
  # Launch with custom configurations
  iface.launch()