yoursdvniel commited on
Commit
4c67bdd
·
verified ·
1 Parent(s): b8f73a4

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +26 -17
main.py CHANGED
@@ -9,6 +9,7 @@ from role_access import get_allowed_collections
9
  from data_fetcher import fetch_data_from_firestore
10
  from data_planner import determine_data_requirements # 🧠 Gemini planner
11
  from resolver import resolve_user_context
 
12
 
13
  app = Flask(__name__)
14
  CORS(app)
@@ -16,25 +17,33 @@ CORS(app)
16
  db = get_firestore_client()
17
 
18
  # 🔧 Normalize Gemini plan into proper Firestore fetch format
19
- def normalize_plan(plan: dict, token_map: dict) -> dict:
20
- filters = plan.get("filters", {})
21
- filter_list = []
22
 
23
- for k, v in filters.items():
24
- if isinstance(v, str) and v in token_map:
25
- v = token_map[v]
26
 
27
- if k == "status" and v == "running":
28
- v = "active"
29
-
30
- filter_list.append({"field": k, "op": "==", "value": v})
31
-
32
- return {
33
- "collections": [
34
- {"name": col, "filters": filter_list, "limit": 50}
35
- for col in plan.get("collections", [])
36
- ]
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
 
40
  @app.route('/chat', methods=['POST'])
 
9
  from data_fetcher import fetch_data_from_firestore
10
  from data_planner import determine_data_requirements # 🧠 Gemini planner
11
  from resolver import resolve_user_context
12
+ from schema_utils import has_field, resolve_field
13
 
14
  app = Flask(__name__)
15
  CORS(app)
 
17
  db = get_firestore_client()
18
 
19
  # 🔧 Normalize Gemini plan into proper Firestore fetch format
 
 
 
20
 
 
 
 
21
 
22
+ def normalize_plan(plan: dict) -> dict:
23
+ filters = plan.get("filters", {}) or {}
24
+ planned_cols = plan.get("collections", []) or []
25
+
26
+ def canonical_value(key, val):
27
+ if key == "status" and val == "running":
28
+ return "active"
29
+ return val
30
+
31
+ collections_out = []
32
+ for col in planned_cols:
33
+ # Allow both string names or objects {name, fields}
34
+ name = col["name"] if isinstance(col, dict) else col
35
+ col_filters = []
36
+ for k, v in filters.items():
37
+ canon_key = resolve_field(name, k)
38
+ if has_field(name, canon_key):
39
+ col_filters.append({"field": canon_key, "op": "==", "value": canonical_value(k, v)})
40
+ collections_out.append({
41
+ "name": name,
42
+ "filters": col_filters,
43
+ "limit": 50
44
+ })
45
+
46
+ return {"collections": collections_out}
47
 
48
 
49
  @app.route('/chat', methods=['POST'])