File size: 2,039 Bytes
5339928
d31d865
 
 
eed158d
 
 
 
d31d865
5339928
 
eed158d
 
d31d865
5339928
 
 
 
 
 
eed158d
 
 
d31d865
5339928
 
 
d31d865
 
5339928
 
 
 
 
 
 
 
 
 
d31d865
eed158d
 
d31d865
eed158d
 
5339928
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
from typing import List, Optional, Union, Dict
from pydantic import BaseModel, Field

class Location(BaseModel):
  name: str
  lat: float
  lon: float
  relevance: str = Field(description="Why this location matters in the historical context")

class TemporalZoom(BaseModel):
  level: str = Field(description="Level of temporal detail (century/decade/year)")
  range: List[int] = Field(description="Start and end years for the time period")
  explanation: str = Field(description="Historical significance of this time period")

class GeographicalZoom(BaseModel):
  level: str = Field(description="Level of geographical detail (continent/country/city)")
  locations: List[Location]
  explanation: str = Field(description="Significance of these locations")

class StyleZoom(BaseModel):
  level: str = Field(description="Level of style detail (movement/sub_movement/specific)")
  options: List[str] = Field(description="Available artistic styles for selection")
  explanation: str = Field(description="Historical context for the artistic styles")

class ZoomConfiguration(BaseModel):
  in_zoom: Optional[Union[TemporalZoom, GeographicalZoom, StyleZoom]]
  out_zoom: Optional[Union[TemporalZoom, GeographicalZoom, StyleZoom]]

class AxisImpact(BaseModel):
  temporal: Optional[str] = Field(default=None, description="How time period affects this axis")
  geographical: Optional[str] = Field(default=None, description="How location affects this axis")
  style: Optional[str] = Field(default=None, description="How artistic style affects this axis")

class AxisConfiguration(BaseModel):
  component: str
  current_zoom: Union[TemporalZoom, GeographicalZoom, StyleZoom]
  available_zooms: Optional[ZoomConfiguration] = None
  impacted_by: Optional[AxisImpact] = None

class Analysis(BaseModel):
  query_focus: str = Field(description="Main subject of the query")
  historical_context: str = Field(description="Brief historical context")

class ArtHistoryResponse(BaseModel):
  analysis: Analysis
  axis_configurations: Dict[str, AxisConfiguration]