uarp-sdk 0.5.7

Async Rust client for the UARP (Snaga) Universal Agent Runtime Platform API
Documentation
// Code generated by @uarp/codegen from spec/openapi.json. DO NOT EDIT.
//!
//! Agent evaluation datasets and runs

#![allow(unused_imports, clippy::too_many_arguments)]

use reqwest::Method;
use serde::{Deserialize, Serialize};

use crate::client::{Client, Request, NO_BODY, NO_QUERY};
use crate::error::Result;
use crate::generated::models;
use crate::multipart::{field_text, FilePart};
use crate::util::encode_path;

/// Agent evaluation datasets and runs
#[derive(Debug, Clone)]
pub struct EvaluationsApi {
    pub(crate) client: Client,
}

impl Client {
    /// Agent evaluation datasets and runs
    pub fn evaluations(&self) -> EvaluationsApi {
        EvaluationsApi { client: self.clone() }
    }
}

impl EvaluationsApi {
    /// Create custom webhook scorer
    ///
    /// `POST /api/v1/agents/{agentId}/scorers`
    ///
    /// Required scopes: `evaluations:write`.
    pub async fn create_agent_scorer(&self, agent_id: &str, body: &serde_json::Map<String, serde_json::Value>) -> Result<serde_json::Map<String, serde_json::Value>> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: format!("/api/v1/agents/{}/scorers", encode_path(agent_id)),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Create an evaluation dataset
    ///
    /// `POST /api/v1/agents/{agentId}/datasets`
    ///
    /// Required scopes: `evaluations:write`.
    pub async fn create_dataset(&self, agent_id: &str, body: &models::CreateDatasetRequest) -> Result<serde_json::Value> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: format!("/api/v1/agents/{}/datasets", encode_path(agent_id)),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Create an evaluation experiment
    ///
    /// Creates an experiment to compare evaluation results across multiple agent versions.
    ///
    /// `POST /api/v1/agents/{agentId}/experiments`
    ///
    /// Required scopes: `evaluations:write`.
    pub async fn create_experiment(&self, agent_id: &str, body: &models::CreateExperimentRequest) -> Result<models::Experiment> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: format!("/api/v1/agents/{}/experiments", encode_path(agent_id)),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Get evaluation dataset details
    ///
    /// `GET /api/v1/agents/{agentId}/datasets/{datasetId}`
    ///
    /// Required scopes: `evaluations:read`.
    pub async fn get_dataset(&self, agent_id: &str, dataset_id: &str) -> Result<serde_json::Value> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/agents/{}/datasets/{}", encode_path(agent_id), encode_path(dataset_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// Get evaluation run results
    ///
    /// `GET /api/v1/agents/{agentId}/evaluations/{evalRunId}`
    ///
    /// Required scopes: `evaluations:read`.
    pub async fn get_eval_run(&self, agent_id: &str, eval_run_id: &str) -> Result<serde_json::Value> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/agents/{}/evaluations/{}", encode_path(agent_id), encode_path(eval_run_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// Get experiment details
    ///
    /// `GET /api/v1/agents/{agentId}/experiments/{experimentId}`
    ///
    /// Required scopes: `evaluations:read`.
    pub async fn get_experiment(&self, agent_id: &str, experiment_id: &str) -> Result<models::Experiment> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/agents/{}/experiments/{}", encode_path(agent_id), encode_path(experiment_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// List custom evaluation scorers
    ///
    /// `GET /api/v1/agents/{agentId}/scorers`
    ///
    /// Required scopes: `evaluations:read`.
    pub async fn list_agent_scorers(&self, agent_id: &str) -> Result<models::ListAgentScorersResponse> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/agents/{}/scorers", encode_path(agent_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// List evaluation datasets for an agent
    ///
    /// `GET /api/v1/agents/{agentId}/datasets`
    ///
    /// Required scopes: `evaluations:read`.
    pub async fn list_datasets(&self, agent_id: &str) -> Result<serde_json::Value> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/agents/{}/datasets", encode_path(agent_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// List evaluation runs for an agent
    ///
    /// `GET /api/v1/agents/{agentId}/evaluations`
    ///
    /// Required scopes: `evaluations:read`.
    pub async fn list_eval_runs(&self, agent_id: &str) -> Result<serde_json::Value> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/agents/{}/evaluations", encode_path(agent_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// Run an evaluation suite against an agent
    ///
    /// `POST /api/v1/agents/{agentId}/evaluations`
    ///
    /// Required scopes: `evaluations:write`.
    pub async fn run(&self, agent_id: &str, body: &models::RunEvaluationRequest) -> Result<serde_json::Value> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: format!("/api/v1/agents/{}/evaluations", encode_path(agent_id)),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }
}