use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::Result;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SamplingRequest {
pub prompt: Value,
pub parameters: Option<Value>,
pub stop: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SamplingResponse {
pub text: String,
pub metadata: Option<Value>,
}
#[async_trait]
pub trait SamplingHandler: Send + Sync {
async fn handle_request(&self, request: SamplingRequest) -> Result<SamplingResponse>;
async fn cancel(&self) -> Result<()>;
}