use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LLMRequestType {
UserMessage,
ToolResult,
}
impl fmt::Display for LLMRequestType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::UserMessage => write!(f, "user_message"),
Self::ToolResult => write!(f, "tool_result"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LLMResponseType {
StreamStart,
TextChunk,
ToolUseStart,
ToolInputDelta,
ToolUse,
ToolBatch,
Complete,
Error,
TokenUpdate,
}
impl fmt::Display for LLMResponseType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::StreamStart => write!(f, "stream_start"),
Self::TextChunk => write!(f, "text_chunk"),
Self::ToolUseStart => write!(f, "tool_use_start"),
Self::ToolInputDelta => write!(f, "tool_input_delta"),
Self::ToolUse => write!(f, "tool_use"),
Self::ToolBatch => write!(f, "tool_batch"),
Self::Complete => write!(f, "complete"),
Self::Error => write!(f, "error"),
Self::TokenUpdate => write!(f, "token_update"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum InputType {
Control,
Data,
}
impl fmt::Display for InputType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Control => write!(f, "ip_control"),
Self::Data => write!(f, "ip_data"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ControlCmd {
Interrupt,
Shutdown,
Clear,
Compact,
}
impl fmt::Display for ControlCmd {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Interrupt => write!(f, "cc_interrupt"),
Self::Shutdown => write!(f, "cc_shutdown"),
Self::Clear => write!(f, "cc_clear"),
Self::Compact => write!(f, "cc_compact"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ContentBlockType {
Text,
ToolUse,
ToolResult,
}
impl fmt::Display for ContentBlockType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Text => write!(f, "text"),
Self::ToolUse => write!(f, "tool_use"),
Self::ToolResult => write!(f, "tool_result"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MessageRole {
User,
Assistant,
}
impl fmt::Display for MessageRole {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::User => write!(f, "user"),
Self::Assistant => write!(f, "assistant"),
}
}
}
impl MessageRole {
pub fn as_str(&self) -> &'static str {
match self {
Self::User => "user",
Self::Assistant => "assistant",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_llm_request_type_display() {
assert_eq!(LLMRequestType::UserMessage.to_string(), "user_message");
assert_eq!(LLMRequestType::ToolResult.to_string(), "tool_result");
}
#[test]
fn test_llm_response_type_display() {
assert_eq!(LLMResponseType::TextChunk.to_string(), "text_chunk");
assert_eq!(LLMResponseType::Complete.to_string(), "complete");
}
#[test]
fn test_message_role() {
assert_eq!(MessageRole::User.as_str(), "user");
assert_eq!(MessageRole::Assistant.to_string(), "assistant");
}
}