use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum ModelClass {
#[default]
SmallDense,
MidDense,
LargeDense,
SmallMoe,
LargeMoe,
FrontierMoe,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum ExecutionMode {
#[default]
LocalFull,
RemoteFull,
LocalStreamed,
RemoteStreamed,
HybridMoeLocal,
HybridMoeRegional,
Auto,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum ArtifactCompleteness {
#[default]
FullOnly,
StreamingReady,
MoeReady,
FullyAdaptive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(Default)]
pub enum ArtifactType {
#[default]
FullWeights,
StreamingShard,
ExpertShard,
KvProfile,
Tokenizer,
BackendBundle,
QuantVariant,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum KVProfile {
#[default]
KvRaw,
KvInt8,
KvMixed,
KvPaged,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum WorkerRole {
#[default]
FullWorker,
StreamingWorker,
ExpertWorker,
PrefillWorker,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionSupport {
#[serde(default = "default_true")]
pub local_full: bool,
#[serde(default = "default_true")]
pub remote_full: bool,
#[serde(default)]
pub local_streamed: bool,
#[serde(default)]
pub remote_streamed: bool,
#[serde(default)]
pub hybrid_moe_local: bool,
#[serde(default)]
pub hybrid_moe_regional: bool,
}
impl Default for ExecutionSupport {
fn default() -> Self {
Self {
local_full: true,
remote_full: true,
local_streamed: false,
remote_streamed: false,
hybrid_moe_local: false,
hybrid_moe_regional: false,
}
}
}
fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ModelTopology {
#[serde(default)]
pub num_experts: u32,
#[serde(default)]
pub active_experts: u32,
#[serde(default)]
pub num_layers: u32,
#[serde(default)]
pub hidden_dim: u32,
#[serde(default)]
pub attention_heads: u32,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PlacementConstraints {
#[serde(default)]
pub min_vram_gb: u32,
#[serde(default)]
pub min_ram_gb: u32,
#[serde(default)]
pub requires_gpu: bool,
#[serde(default)]
pub requires_tee: bool,
#[serde(default)]
pub preferred_regions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RoutingPolicy {
#[serde(default = "default_true")]
pub prefer_local: bool,
#[serde(default = "default_max_hops")]
pub max_hops: u32,
#[serde(default)]
pub require_attestation: bool,
#[serde(default = "default_true")]
pub fallback_to_remote: bool,
}
impl Default for RoutingPolicy {
fn default() -> Self {
Self {
prefer_local: true,
max_hops: 3,
require_attestation: false,
fallback_to_remote: true,
}
}
}
fn default_max_hops() -> u32 {
3
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RequiredExecution {
#[serde(default)]
pub min_mode: ExecutionMode,
#[serde(default)]
pub preferred_mode: ExecutionMode,
#[serde(default = "default_true")]
pub allow_fallback: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RuntimeSupport {
#[serde(default)]
pub supported_modes: Vec<ExecutionMode>,
#[serde(default)]
pub supported_backends: Vec<String>,
#[serde(default)]
pub max_context_len: u32,
#[serde(default)]
pub max_batch_size: u32,
#[serde(default)]
pub tee_capable: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TrustProfile {
#[serde(default)]
pub tee_vendor: String,
#[serde(default)]
pub attestation_level: String,
#[serde(default)]
pub verified: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NodeNetworkProfile {
#[serde(default)]
pub region: String,
#[serde(default)]
pub bandwidth_mbps: u32,
#[serde(default)]
pub latency_ms_to_peers: u32,
#[serde(default)]
pub is_public: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ArtifactMetadata {
#[serde(default)]
pub artifact_id: String,
#[serde(default)]
pub artifact_type: ArtifactType,
#[serde(default)]
pub size_bytes: u64,
#[serde(default)]
pub sha256: String,
#[serde(default)]
pub url: String,
#[serde(default)]
pub completeness: ArtifactCompleteness,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ExecutionPlan {
pub plan_id: String,
pub model_id: String,
pub provider_id: String,
pub execution_mode: ExecutionMode,
#[serde(default)]
pub estimated_latency_ms: u32,
#[serde(default)]
pub kv_profile: KVProfile,
#[serde(default)]
pub constraints: PlacementConstraints,
#[serde(default)]
pub trust_profile: TrustProfile,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ExecutionReceipt {
pub receipt_id: String,
pub session_id: String,
pub model_id: String,
pub provider_id: String,
pub mode: ExecutionMode,
#[serde(default)]
pub prompt_tokens: u32,
#[serde(default)]
pub completion_tokens: u32,
#[serde(default)]
pub expert_calls: u32,
#[serde(default)]
pub streamed_layer_loads: u32,
#[serde(default)]
pub kv_profile_id: String,
#[serde(default)]
pub kv_memory_ms: u64,
#[serde(default)]
pub attested: bool,
#[serde(default)]
pub attestation_ref: String,
#[serde(default)]
pub output_hash: String,
pub created_unix_ms: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CapabilityResolution {
pub model_id: String,
pub resolved_provider: String,
pub execution_plan: ExecutionPlan,
#[serde(default)]
pub alternatives: Vec<ExecutionPlan>,
}