mod composer;
mod message;
mod popup_list;
mod tool_card;
mod transcript;
#[cfg(test)]
mod tests;
pub use composer::{Composer, ComposerResponse, Trigger};
pub use message::Message;
pub use popup_list::PopupList;
pub use tool_card::{Approval, ToolCard, ToolCardResponse, ToolStatus};
pub use transcript::{MAX_MESSAGES, Transcript, TranscriptItem, TranscriptResponse};
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum ChatRole {
#[default]
User,
Assistant,
System,
Tool,
}
impl ChatRole {
pub fn label(self, labels: &ChatLabels) -> &str {
match self {
ChatRole::User => &labels.user,
ChatRole::Assistant => &labels.assistant,
ChatRole::System => &labels.system,
ChatRole::Tool => &labels.tool,
}
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct ChatMessage {
pub id: u64,
pub role: ChatRole,
pub text: String,
pub streaming: bool,
pub revision: u64,
}
impl TranscriptItem for ChatMessage {
fn key(&self) -> u64 {
self.id
}
fn revision(&self) -> u64 {
self.revision
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ChatLabels {
pub transcript: String,
pub jump_to_latest: String,
pub user: String,
pub assistant: String,
pub system: String,
pub tool: String,
pub streaming: String,
pub approve: String,
pub deny: String,
pub show_details: String,
pub hide_details: String,
pub pending: String,
pub running: String,
pub succeeded: String,
pub failed: String,
pub needs_approval: String,
pub approved: String,
pub denied: String,
pub suggestions: String,
pub composer: String,
}
impl Default for ChatLabels {
fn default() -> Self {
ChatLabels {
transcript: "Conversation".into(),
jump_to_latest: "Jump to latest".into(),
user: "You".into(),
assistant: "Assistant".into(),
system: "System".into(),
tool: "Tool".into(),
streaming: "Writing…".into(),
approve: "Approve".into(),
deny: "Deny".into(),
show_details: "Show details".into(),
hide_details: "Hide details".into(),
pending: "Pending".into(),
running: "Running".into(),
succeeded: "Done".into(),
failed: "Failed".into(),
needs_approval: "Needs approval".into(),
approved: "Approved".into(),
denied: "Denied".into(),
suggestions: "Suggestions".into(),
composer: "Message".into(),
}
}
}