///|
pub(all) struct SuiteStatusRef {
status_path : String
openai_base_url : String
default_model : String
ready : Bool
catalog : Array[ModelCatalogEntry]
usage : ModelUsageSnapshot
contracts : Array[SuiteIntegrationContract]
health_message : String?
} derive(Debug, Eq, ToJson, FromJson)
///|
pub fn moonsuite_suite_status_path(root? : String = "") -> String {
let workspace_root = if root.trim() == "" { "." } else { root }
@pathx.join(
@moonsuite.state_dir(
@moonsuite.suite_root_for_workspace_root(workspace_root),
),
"suite-status.json",
)
}
///|
pub fn suite_status_ref(
status_path : String,
openai_base_url : String,
default_model : String,
ready? : Bool = true,
catalog? : Array[ModelCatalogEntry] = [],
usage? : ModelUsageSnapshot = model_usage_snapshot(),
contracts? : Array[SuiteIntegrationContract] = [],
health_message? : String,
) -> SuiteStatusRef {
{
status_path,
openai_base_url,
default_model,
ready,
catalog,
usage,
contracts,
health_message,
}
}
///|
pub fn moongate_suite_status_ref(
status_path : String,
openai_base_url : String,
default_model : String,
ready? : Bool = true,
catalog? : Array[ModelCatalogEntry] = [],
usage? : ModelUsageSnapshot = model_usage_snapshot(),
contracts? : Array[SuiteIntegrationContract] = [],
health_message? : String,
) -> SuiteStatusRef {
{
status_path,
openai_base_url,
default_model,
ready,
catalog,
usage,
contracts,
health_message,
}
}
///|
pub fn SuiteStatusRef::to_gateway(self : SuiteStatusRef) -> ModelGateway {
moongate_gateway(
self.openai_base_url,
self.default_model,
health=if self.ready { Ready } else { Unavailable },
catalog=self.catalog,
usage=self.usage,
contracts=self.contracts,
)
}
///|
pub fn SuiteStatusRef::contract_issue_count(self : SuiteStatusRef) -> Int {
self.contracts.fold(init=0, fn(count, contract) {
if contract.ready {
count
} else {
count + 1
}
})
}