use crate::cli::ReplayBufferCommands;
use nebulous::models::V1ResourceMetaRequest;
use nebulous::resources::v1::containers::models::V1ContainerRequest;
use orign::config::GlobalConfig;
use orign::resources::v1::buffers::models::V1ReplayBufferRequest;
use reqwest::Client;
use serde_json::Value;
use std::error::Error;
pub async fn create_replay_buffer(command: ReplayBufferCommands) -> Result<(), Box<dyn Error>> {
let payload = V1ReplayBufferRequest {
metadata: V1ResourceMetaRequest {
name: Some(command.name),
namespace: command.namespace,
labels: None,
owner: None,
owner_ref: None,
},
train_every: command.train_every,
sample_n: command.sample_n,
sample_strategy: command.sample_strategy,
train_job: V1ContainerRequest {
image: command.image,
command: command.command,
..Default::default()
},
num_epochs: command.num_epochs,
};
let client = Client::new();
let config = GlobalConfig::read()?;
let server = config
.server
.unwrap_or_else(|| "http://localhost:8000".to_string());
let api_key = config.api_key.as_deref().ok_or("API key not set")?;
let bearer_token = format!("Bearer {}", api_key);
let url = format!("{}/v1/buffers", server);
let response = client
.post(&url)
.header("Authorization", bearer_token)
.json(&payload)
.send()
.await?;
if response.status().is_success() {
let resp_json: Value = response.json().await?;
println!(" buffer created successfully:");
println!("{}", serde_json::to_string_pretty(&resp_json)?);
} else {
let error_text = response.text().await?;
eprintln!("Error: {}", error_text);
}
Ok(())
}