use std::sync::Arc;
use crate::error::Error;
use crate::provider::Provider;
use super::response::ModerationResponse;
#[derive(Clone)]
pub struct ModerationRequest {
pub model: String,
pub input: Vec<String>,
pub provider_options: serde_json::Value,
}
impl ModerationRequest {
pub fn new(model: impl Into<String>) -> Self {
Self {
model: model.into(),
input: Vec::new(),
provider_options: serde_json::Value::Null,
}
}
}
pub struct PendingModerationRequest {
provider: Arc<dyn Provider>,
request: ModerationRequest,
}
impl PendingModerationRequest {
pub fn new(provider: Arc<dyn Provider>, model: impl Into<String>) -> Self {
Self {
provider,
request: ModerationRequest::new(model),
}
}
pub fn with_input(mut self, input: impl Into<String>) -> Self {
self.request.input.push(input.into());
self
}
pub fn to_request(&self) -> ModerationRequest {
self.request.clone()
}
pub async fn generate(self) -> Result<ModerationResponse, Error> {
self.provider.moderation(self.request).await
}
}