use crate::resources::v1::buffers::models::{V1ReplayBuffer, V1ReplayBufferStatus};
use nebulous::models::V1ResourceMeta;
use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
use serde_json::Value as Json;
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
#[sea_orm(table_name = "buffers")]
pub struct Model {
#[sea_orm(primary_key, column_type = "Text", auto_increment = false)]
pub id: String,
pub namespace: String,
pub name: String,
#[sea_orm(unique)]
pub full_name: String,
pub owner_id: String,
pub train_every: Option<i32>,
pub sample_n: i32,
pub sample_strategy: String,
pub train_job: Option<Json>,
pub num_epochs: i32,
pub status: Option<Json>,
pub num_records: Option<i32>,
pub train_idx: Option<i32>,
pub labels: Option<Json>,
pub epoch_idx: Option<i32>,
pub updated_at: DateTimeWithTimeZone,
pub created_at: DateTimeWithTimeZone,
pub created_by: Option<String>,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}
impl V1ReplayBuffer {
pub fn from_model(model: &Model) -> Self {
let parsed_train_job = model
.train_job
.as_ref()
.and_then(|tj| serde_json::from_value(tj.clone()).ok())
.unwrap_or_default();
let parsed_status = model
.status
.as_ref()
.and_then(|st| serde_json::from_value(st.clone()).ok())
.unwrap_or_else(|| {
V1ReplayBufferStatus {
num_records: model.num_records,
train_idx: model.train_idx,
num_train_jobs: None,
last_train_job: None,
num_epochs: Some(model.num_epochs),
}
});
V1ReplayBuffer {
metadata: V1ResourceMeta {
name: model.name.clone(),
namespace: model.namespace.clone(),
..Default::default()
},
train_every: model.train_every,
sample_n: model.sample_n,
sample_strategy: model.sample_strategy.clone(),
status: parsed_status,
train_job: parsed_train_job,
num_epochs: model.num_epochs,
}
}
}