#![allow(missing_docs)]
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::ModelState;
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ModelDims {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dense: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sparse: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub multivector: Option<u32>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ModelCapabilities {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub grammar: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub tools: bool,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub lora_adapters: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub profile_lora_adapters: HashMap<String, Vec<String>>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub code: bool,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub sql: bool,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub guard: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ModelInfo {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub name: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub loaded: bool,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub inputs: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub outputs: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub dims: ModelDims,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state: Option<ModelState>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub profiles: HashMap<String, Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub last_error: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_sequence_length: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub revision: Option<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub capabilities: ModelCapabilities,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ModelSummary {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state: Option<ModelState>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub worker_count: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub gpu_types: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub total_queue_depth: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct WorkerInfo {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub name: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub url: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub gpu: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub gpu_count: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub ready_gpu_slots: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub healthy: bool,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub queue_depth: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub pending_cost: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub inflight_batches: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub loaded_models: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub memory_used_bytes: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub memory_total_bytes: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bundle: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bundle_config_hash: Option<String>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Serialize, Deserialize)]
pub struct ClusterSummary {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub worker_count: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub gpu_count: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub models_loaded: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub total_qps: f64,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct HealthResponse {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub status: String,
#[serde(
default,
deserialize_with = "crate::types::null_as_default",
rename = "type"
)]
pub kind: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub cluster: ClusterSummary,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub configured_gpu_types: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub live_gpu_types: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub workers: Vec<WorkerInfo>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub models: Vec<ModelSummary>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct CapacityInfo {
pub status: String,
pub worker_count: u32,
pub gpu_count: u32,
pub models_loaded: u32,
pub configured_gpu_types: Vec<String>,
pub live_gpu_types: Vec<String>,
pub workers: Vec<WorkerInfo>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ServerInfo {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub version: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub uptime_seconds: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub user: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub working_dir: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub pid: i64,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct GpuMetrics {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub device: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub name: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub gpu_type: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub utilization_pct: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub memory_used_bytes: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub memory_total_bytes: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub memory_threshold_pct: f64,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ModelConfig {
#[serde(default)]
pub hf_id: Option<String>,
#[serde(default)]
pub adapter: Option<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub inputs: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub outputs: Vec<String>,
#[serde(default)]
pub dims: Option<Value>,
#[serde(default)]
pub max_sequence_length: Option<u32>,
#[serde(default)]
pub pooling: Option<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub normalize: bool,
#[serde(default)]
pub adapter_options_loadtime: Option<Value>,
#[serde(default)]
pub adapter_options_runtime: Option<Value>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdaptiveBatchingStatus {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub calibrated: bool,
#[serde(default)]
pub target_p50_ms: Option<f64>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub wait_ms: f64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub batch_cost: u64,
#[serde(default)]
pub p50_ms: Option<f64>,
#[serde(default)]
pub headroom_ms: Option<f64>,
#[serde(default)]
pub fill_ratio: Option<f64>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ModelStatus {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state: Option<ModelState>,
#[serde(default)]
pub device: Option<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub memory_bytes: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub config: ModelConfig,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub queue_depth: u64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub queue_pending_items: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub adaptive_batching: Option<AdaptiveBatchingStatus>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct WorkerStatusMessage {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub timestamp: f64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub ready: bool,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub name: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub machine_profile: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub pool_name: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub gpu_count: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub bundle: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub bundle_config_hash: String,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub loaded_models: Vec<String>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub server: ServerInfo,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub gpus: Vec<GpuMetrics>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub models: Vec<ModelStatus>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub max_batch_requests: u32,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub saturated: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ClusterStatusMessage {
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub timestamp: f64,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub cluster: ClusterSummary,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub workers: Vec<WorkerInfo>,
#[serde(default, deserialize_with = "crate::types::null_as_default")]
pub models: Vec<ModelSummary>,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(untagged)]
pub enum StatusMessage {
Cluster(Box<ClusterStatusMessage>),
Worker(Box<WorkerStatusMessage>),
}
impl StatusMessage {
pub fn cluster(&self) -> Option<&ClusterStatusMessage> {
match self {
Self::Cluster(message) => Some(message),
Self::Worker(_) => None,
}
}
pub fn worker(&self) -> Option<&WorkerStatusMessage> {
match self {
Self::Worker(message) => Some(message),
Self::Cluster(_) => None,
}
}
}