use crate::effect::{EffectObservation, EffectRequest};
use crate::provider::{ChatRequest, ChatResponse};
use crate::run::{RunMetadata, RunOutput};
#[derive(Debug, Clone, PartialEq)]
pub struct ModelRequest {
pub id: String,
pub chat: ChatRequest,
pub metadata: RunMetadata,
}
impl ModelRequest {
pub fn new(id: impl Into<String>, chat: ChatRequest) -> Self {
Self {
id: id.into(),
chat,
metadata: RunMetadata::new(),
}
}
pub fn with_metadata(mut self, metadata: RunMetadata) -> Self {
self.metadata = metadata;
self
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct ModelObservation {
pub request_id: String,
pub response: ChatResponse,
pub metadata: RunMetadata,
}
impl ModelObservation {
pub fn new(request_id: impl Into<String>, response: ChatResponse) -> Self {
Self {
request_id: request_id.into(),
response,
metadata: RunMetadata::new(),
}
}
pub fn with_metadata(mut self, metadata: RunMetadata) -> Self {
self.metadata = metadata;
self
}
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum Observation {
Model(ModelObservation),
Effect(EffectObservation),
Effects(Vec<EffectObservation>),
}
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum AgentAction {
Respond {
output: RunOutput,
},
RequestModel {
request: ModelRequest,
},
RequestEffect {
request: EffectRequest,
},
RequestEffects {
requests: Vec<EffectRequest>,
},
}