omniference 0.1.8

A multi-protocol inference engine with provider adapters
Documentation
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct RawCost {
	pub input: Option<f64>,
	pub output: Option<f64>,
	pub cache_read: Option<f64>,
	pub cache_write: Option<f64>,
	pub reasoning: Option<f64>,
	pub input_audio: Option<f64>,
	pub output_audio: Option<f64>,
	#[serde(default)]
	pub tiers: Vec<RawCostTier>,
}

#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct RawCostTier {
	pub input: Option<f64>,
	pub output: Option<f64>,
	pub cache_read: Option<f64>,
	pub cache_write: Option<f64>,
	pub reasoning: Option<f64>,
	pub input_audio: Option<f64>,
	pub output_audio: Option<f64>,
	pub tier: Option<RawTierSelector>,
}

#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct RawTierSelector {
	#[serde(rename = "type")]
	pub tier_type: Option<String>,
	pub size: Option<u32>,
}

#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct RawLimit {
	pub context: Option<u32>,
	pub input: Option<u32>,
	pub output: Option<u32>,
}

#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct RawModalities {
	#[serde(default)]
	pub input: Vec<String>,
	#[serde(default)]
	pub output: Vec<String>,
}

#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct RawCatalogEntry {
	pub provider: Option<serde_json::Value>,
	pub canonical: Option<String>,
	pub id: Option<String>,
	pub name: Option<String>,
	pub reasoning: Option<bool>,
	pub tool_call: Option<bool>,
	pub cost: Option<RawCost>,
	pub limit: Option<RawLimit>,
	pub modalities: Option<RawModalities>,
	#[serde(default)]
	pub reasoning_efforts: Vec<String>,
	pub reasoning_budget: Option<String>,
	#[serde(default)]
	pub capabilities: Vec<String>,
	#[serde(default)]
	pub aliases: Vec<String>,
}

#[derive(Clone, Debug, Default, Deserialize)]
pub struct RawProvider {
	pub id: Option<String>,
	#[serde(default)]
	pub models: std::collections::BTreeMap<String, RawCatalogEntry>,
}