use ai_lib_core::types::message::Message;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum ContextLayer {
System = 0,
Active = 1,
Relevant = 2,
Summary = 3,
Background = 4,
Archive = 5,
}
impl ContextLayer {
pub fn from_u8(value: u8) -> Option<Self> {
match value {
0 => Some(Self::System),
1 => Some(Self::Active),
2 => Some(Self::Relevant),
3 => Some(Self::Summary),
4 => Some(Self::Background),
5 => Some(Self::Archive),
_ => None,
}
}
pub const fn as_u8(self) -> u8 {
self as u8
}
pub const fn is_critical(self) -> bool {
matches!(self, Self::System | Self::Active)
}
}
#[derive(Debug, Clone)]
pub struct MessageChunk {
pub layer: ContextLayer,
pub timestamp: u64,
pub message: Message,
pub is_summary: bool,
pub chunk_id: String,
}
impl MessageChunk {
pub fn new(
layer: ContextLayer,
timestamp: u64,
message: Message,
chunk_id: impl Into<String>,
) -> Self {
Self {
layer,
timestamp,
message,
is_summary: false,
chunk_id: chunk_id.into(),
}
}
pub fn with_summary(mut self, is_summary: bool) -> Self {
self.is_summary = is_summary;
self
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum AssembleStrategy {
#[default]
Chat,
CodeFix,
}