Melika Kheirieh commited on
Commit
d5f745f
·
1 Parent(s): dc4d6bd

fix(api): map FinalResult → HTTP (200/400) and stabilize nl2sql handler; prevent 500s in tests

Browse files
Files changed (1) hide show
  1. app/routers/nl2sql.py +20 -5
app/routers/nl2sql.py CHANGED
@@ -225,6 +225,9 @@ async def upload_db(file: UploadFile = File(...)):
225
  return {"db_id": db_id}
226
 
227
 
 
 
 
228
  # -------------------------------
229
  # Main NL2SQL endpoint
230
  # -------------------------------
@@ -243,10 +246,10 @@ def nl2sql_handler(request: NL2SQLRequest):
243
  _derive_schema_preview(adapter) if isinstance(adapter, SQLiteAdapter) else ""
244
  )
245
 
246
- # Resolve schema_preview
247
  provided_preview_any: Any = getattr(request, "schema_preview", None)
248
  provided_preview: Optional[str] = cast(Optional[str], provided_preview_any)
249
- final_preview: str = provided_preview or derived_preview_val
250
 
251
  # Run pipeline
252
  try:
@@ -260,10 +263,18 @@ def nl2sql_handler(request: NL2SQLRequest):
260
  if not isinstance(result, FinalResult):
261
  raise HTTPException(status_code=500, detail="Pipeline returned unexpected type")
262
 
263
- if result.ambiguous and result.questions:
264
- return ClarifyResponse(ambiguous=True, questions=result.questions)
 
 
 
 
 
 
 
265
 
266
- if not result.ok or result.error:
 
267
  print("❌ Pipeline failure dump:")
268
  print(" ok:", result.ok)
269
  print(" error:", result.error)
@@ -274,12 +285,16 @@ def nl2sql_handler(request: NL2SQLRequest):
274
  detail="; ".join(result.details or []) or (result.error or "Unknown error"),
275
  )
276
 
 
277
  traces = [_round_trace(t) for t in (result.traces or [])]
278
  return NL2SQLResponse(
 
279
  ambiguous=False,
280
  sql=result.sql,
281
  rationale=result.rationale,
 
282
  traces=traces,
 
283
  )
284
 
285
 
 
225
  return {"db_id": db_id}
226
 
227
 
228
+ # -------------------------------
229
+ # Main NL2SQL endpoint
230
+ # -------------------------------
231
  # -------------------------------
232
  # Main NL2SQL endpoint
233
  # -------------------------------
 
246
  _derive_schema_preview(adapter) if isinstance(adapter, SQLiteAdapter) else ""
247
  )
248
 
249
+ # Resolve schema_preview (send None when empty)
250
  provided_preview_any: Any = getattr(request, "schema_preview", None)
251
  provided_preview: Optional[str] = cast(Optional[str], provided_preview_any)
252
+ final_preview: Optional[str] = provided_preview or (derived_preview_val or None)
253
 
254
  # Run pipeline
255
  try:
 
263
  if not isinstance(result, FinalResult):
264
  raise HTTPException(status_code=500, detail="Pipeline returned unexpected type")
265
 
266
+ # Ambiguous 200 with clarify payload
267
+ if result.ambiguous and (result.questions is not None):
268
+ return ClarifyResponse(
269
+ ok=True, # minimal addition for schema compatibility
270
+ ambiguous=True,
271
+ questions=result.questions,
272
+ traces=result.traces or [], # safe default to avoid validation errors
273
+ details=result.details or None,
274
+ )
275
 
276
+ # Error 400
277
+ if (not result.ok) or result.error:
278
  print("❌ Pipeline failure dump:")
279
  print(" ok:", result.ok)
280
  print(" error:", result.error)
 
285
  detail="; ".join(result.details or []) or (result.error or "Unknown error"),
286
  )
287
 
288
+ # Success → 200
289
  traces = [_round_trace(t) for t in (result.traces or [])]
290
  return NL2SQLResponse(
291
+ ok=True, # minimal addition
292
  ambiguous=False,
293
  sql=result.sql,
294
  rationale=result.rationale,
295
+ verified=getattr(result, "verified", None),
296
  traces=traces,
297
+ details=result.details or None,
298
  )
299
 
300