Rajan Sharma commited on
Commit
e92d526
·
verified ·
1 Parent(s): 7a11028

Create schema.py

Browse files
Files changed (1) hide show
  1. schema.py +31 -0
schema.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Optional, Dict
2
+ from pydantic import BaseModel, Field, validator
3
+
4
+ class TaskPlan(BaseModel):
5
+ title: str
6
+ format: str = Field(description="table|list|comparison|map|narrative|chart")
7
+ data_key: Optional[str] = None
8
+ filter: Optional[str] = None
9
+ derive: Optional[List[str]] = None
10
+ joins: Optional[List[Dict]] = None # [{"right_key":"...", "left_on":"...", "right_on":"...", "how":"left"}]
11
+ group_by: Optional[List[str]] = None
12
+ agg: Optional[List[str]] = None # ["avg(x)", "median(y)", "p90(z)", "count(*)"]
13
+ pivot: Optional[Dict] = None # {"index":["a","b"], "columns":"c", "values":"v"}
14
+ sort_by: Optional[str] = None
15
+ sort_dir: Optional[str] = "desc"
16
+ top: Optional[int] = None
17
+ fields: Optional[List[str]] = None
18
+ chart: Optional[str] = None
19
+ encodings: Optional[Dict[str, str]] = None
20
+ number_format: Optional[Dict[str, str]] = None
21
+ title_override: Optional[str] = None
22
+
23
+ @validator("format")
24
+ def _fmt(cls, v):
25
+ allowed = {"table","list","comparison","map","narrative","chart"}
26
+ if v not in allowed: raise ValueError(f"format must be one of {allowed}")
27
+ return v
28
+
29
+ class ScenarioPlan(BaseModel):
30
+ tasks: List[TaskPlan]
31
+ notes: Optional[str] = None