use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use crate::binding::{BindingTarget, EvalBinding};
use crate::catalog::{Capability, OwnerKind, SnapshotLifecycle, SnapshotRef, SnapshotSummary};
use crate::run::{EvaluationSubject, OperationState};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdminOverview {
pub snapshots_by_lifecycle: BTreeMap<String, u64>,
pub snapshots_by_owner: BTreeMap<String, u64>,
pub ephemeral_snapshots: u64,
pub runs_by_state: BTreeMap<String, u64>,
pub case_runs_by_state: BTreeMap<String, u64>,
pub analysis_tasks_by_state: BTreeMap<String, u64>,
pub bindings: u64,
pub judge_models: u64,
pub gate_approved_judge_models: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ListAdminSnapshotsRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owner: Option<OwnerKind>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lifecycle: Option<SnapshotLifecycle>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub capability: Option<Capability>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tenant_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<usize>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdminSnapshotSummary {
#[serde(flatten)]
pub summary: SnapshotSummary,
pub tenant_id: String,
pub project_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdminSnapshotPage {
pub items: Vec<AdminSnapshotSummary>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ListAdminRunsRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state: Option<OperationState>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tenant_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<usize>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdminRunSummary {
pub run_id: String,
pub operation_id: String,
pub tenant_id: String,
pub project_id: String,
pub target: BindingTarget,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub subject: Option<EvaluationSubject>,
pub subject_version: String,
pub snapshots: Vec<SnapshotRef>,
pub state: OperationState,
pub phase: String,
pub completed_cases: usize,
pub total_cases: usize,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub report_id: Option<String>,
pub created_at_ms: i64,
pub updated_at_ms: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdminRunPage {
pub items: Vec<AdminRunSummary>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ListAdminBindingsRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tenant_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<usize>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdminBindingPage {
pub items: Vec<EvalBinding>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ExportBundleRequest {
#[serde(default)]
pub snapshots: Vec<SnapshotRef>,
}