Skip to content

Commit 893c551

Browse files
committed
fix(tracing): parse PascalCase /logs response from gateway
The gateway /logs endpoint returns entries with PascalCase keys (CreatedAt, Message, Severity, Tags, Extras) and flattened StatusCode / StatusMessage / StatusDetails fields, while the SDK expected snake_case and a nested `status` dict. This mismatch caused RemoteRolloutProcessor's status polling to never detect completion and time out after 180s. Map the fields client-side and reconstruct the nested status dict for both sync and async search_logs. Made-with: Cursor
1 parent aa476f0 commit 893c551

1 file changed

Lines changed: 32 additions & 13 deletions

File tree

eval_protocol/adapters/fireworks_tracing.py

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -306,17 +306,26 @@ def search_logs(self, tags: List[str], limit: int = 100, hours_back: int = 24) -
306306
return []
307307

308308
entries: List[Dict[str, Any]] = data.get("entries", []) or []
309-
# Normalize minimal shape
309+
# Normalize minimal shape; reconstruct a nested `status` dict from the
310+
# flattened StatusCode / StatusMessage / StatusDetails fields.
310311
results: List[Dict[str, Any]] = []
311312
for e in entries:
313+
status_code = e.get("StatusCode")
314+
status: Optional[Dict[str, Any]] = None
315+
if status_code is not None:
316+
status = {
317+
"code": status_code,
318+
"message": e.get("StatusMessage"),
319+
"details": e.get("StatusDetails") or [],
320+
}
312321
results.append(
313322
{
314-
"timestamp": e.get("timestamp"),
315-
"message": e.get("message"),
316-
"severity": e.get("severity", "INFO"),
317-
"tags": e.get("tags", []),
318-
"status": e.get("status"),
319-
"extras": e.get("extras"),
323+
"timestamp": e.get("CreatedAt"),
324+
"message": e.get("Message"),
325+
"severity": e.get("Severity", "INFO"),
326+
"tags": e.get("Tags") or [],
327+
"status": status,
328+
"extras": e.get("Extras"),
320329
}
321330
)
322331
return results
@@ -353,16 +362,26 @@ async def async_search_logs(
353362
return []
354363

355364
entries: List[Dict[str, Any]] = data.get("entries", []) or []
365+
# Normalize minimal shape; reconstruct a nested `status` dict from the
366+
# flattened StatusCode / StatusMessage / StatusDetails fields.
356367
results: List[Dict[str, Any]] = []
357368
for e in entries:
369+
status_code = e.get("StatusCode")
370+
status: Optional[Dict[str, Any]] = None
371+
if status_code is not None:
372+
status = {
373+
"code": status_code,
374+
"message": e.get("StatusMessage"),
375+
"details": e.get("StatusDetails") or [],
376+
}
358377
results.append(
359378
{
360-
"timestamp": e.get("timestamp"),
361-
"message": e.get("message"),
362-
"severity": e.get("severity", "INFO"),
363-
"tags": e.get("tags", []),
364-
"status": e.get("status"),
365-
"extras": e.get("extras"),
379+
"timestamp": e.get("CreatedAt"),
380+
"message": e.get("Message"),
381+
"severity": e.get("Severity", "INFO"),
382+
"tags": e.get("Tags") or [],
383+
"status": status,
384+
"extras": e.get("Extras"),
366385
}
367386
)
368387
return results

0 commit comments

Comments
 (0)