orign 0.2.3

A globally distributed container orchestrator
Documentation
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;

/// Function to execute the creation of an replay buffer.
pub async fn create_replay_buffer(command: ReplayBufferCommands) -> Result<(), Box<dyn Error>> {
    // Build ReplayBufferRequest
    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(())
}