46 lines
2.2 KiB
Python
46 lines
2.2 KiB
Python
"""Shared exploration metadata for queue cards and history pagination."""
|
|
|
|
# Rank execution runs independently from validations: a rerun never replaces the
|
|
# conversation card. Keep all raw sessions accessible for evidence inspection.
|
|
EXPLORATION_RUNS_CTE = """
|
|
exploration_runs AS (
|
|
SELECT r.id AS run_id,
|
|
json_extract(r.payload,'$.exploration_id') AS exploration_id,
|
|
json_extract(r.payload,'$.kind') AS exploration_kind,
|
|
json_extract(r.payload,'$.case_version') AS case_version,
|
|
json_extract(r.payload,'$.task_config.model') AS exploration_model,
|
|
json_extract(r.payload,'$.task_config.profile') AS exploration_profile,
|
|
json_extract(v.payload,'$.name') AS exploration_case_name,
|
|
CASE WHEN json_extract(r.payload,'$.kind')='exploration' AND
|
|
(json_extract(c.payload,'$.active_run_id') IS NULL
|
|
OR json_extract(c.payload,'$.active_run_id') = r.id)
|
|
THEN json_extract(c.payload,'$.status')
|
|
ELSE json_extract(r.payload,'$.status') END AS exploration_status,
|
|
FIRST_VALUE(r.id) OVER (
|
|
PARTITION BY json_extract(r.payload,'$.exploration_id'),json_extract(r.payload,'$.kind')
|
|
ORDER BY json_extract(r.payload,'$.created_at') DESC, r.id DESC
|
|
) AS exploration_latest_run_id,
|
|
COUNT(*) OVER (
|
|
PARTITION BY json_extract(r.payload,'$.exploration_id'),json_extract(r.payload,'$.kind')
|
|
) AS exploration_run_count
|
|
FROM automation_records r
|
|
LEFT JOIN automation_records c ON c.kind='exploration'
|
|
AND c.id=json_extract(r.payload,'$.exploration_id')
|
|
LEFT JOIN automation_records v ON v.kind='exploration_case'
|
|
AND v.id=json_extract(r.payload,'$.exploration_id') || '_' ||
|
|
printf('%010d',json_extract(r.payload,'$.case_version'))
|
|
WHERE r.kind='exploration_run'
|
|
)
|
|
"""
|
|
|
|
|
|
def exploration_metadata(connection) -> dict[str, dict]:
|
|
rows = connection.execute("WITH " + EXPLORATION_RUNS_CTE + " SELECT * FROM exploration_runs")
|
|
result = {}
|
|
for row in rows:
|
|
item = {key: row[key] for key in row.keys() if key != "run_id"}
|
|
if item.get("exploration_kind") == "validation" and item.get("exploration_case_name"):
|
|
item["display_name"] = item["exploration_case_name"]
|
|
result[row["run_id"]] = item
|
|
return result
|