use crate::ModelSupportTarget;
use serde::{Deserialize, Serialize};
use std::collections::BTreeSet;
pub const EVIDENCE_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct EvidenceScope {
pub target: ModelSupportTarget,
pub endpoint_fingerprint: String,
pub account_fingerprint: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EvidenceCapability {
TextGeneration,
Tools,
ImageInput,
PromptCache,
StructuredOutput,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EvidenceOutcome {
Success,
ProviderSurfaceUnsupported,
AccountDenied,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ModelSupportEvidence {
pub scope: EvidenceScope,
pub model_id: String,
pub outcome: EvidenceOutcome,
pub capabilities: BTreeSet<EvidenceCapability>,
pub attempt_started_at_ms: u64,
pub attempt_ordinal: u64,
pub observed_at_ms: u64,
pub expires_at_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct EvidenceDocument {
pub schema_version: u32,
pub observations: Vec<ModelSupportEvidence>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EvidenceResolution {
Supported,
Unsupported,
AccountDenied,
Unverified,
}