Update assistant panel message header, model switcher

Nate Butler created

Change summary

crates/assistant2/src/assistant_panel.rs | 45 +++++++++++++++++++------
1 file changed, 33 insertions(+), 12 deletions(-)

Detailed changes

crates/assistant2/src/assistant_panel.rs 🔗

@@ -53,7 +53,11 @@ use std::{
     time::{Duration, Instant},
 };
 use theme::ThemeSettings;
-use ui::{prelude::*, Tab, TabBar, Tooltip};
+use ui::{
+    prelude::*,
+    utils::{DateTimeType, FormatDistance},
+    ButtonLike, Tab, TabBar, Tooltip,
+};
 use util::{paths::CONVERSATIONS_DIR, post_inc, ResultExt, TryFutureExt};
 use uuid::Uuid;
 use workspace::{
@@ -1126,13 +1130,13 @@ impl Render for AssistantPanel {
                 .border()
                 .border_color(gpui::red())
         } else {
-            let header = ui::TabBar::new("assistant_header")
+            let header = TabBar::new("assistant_header")
                 .start_child(
                     h_stack().gap_1().child(Self::render_hamburger_button(cx)), // .children(title),
                 )
                 .children(self.active_editor().map(|editor| {
                     h_stack()
-                        .h(rems(ui::Tab::HEIGHT_IN_REMS))
+                        .h(rems(Tab::HEIGHT_IN_REMS))
                         .flex_1()
                         .px_2()
                         .child(Label::new(editor.read(cx).title(cx)).into_element())
@@ -2278,6 +2282,14 @@ impl ConversationEditor {
                                     }
                                     Role::System => Label::new("System").color(Color::Warning),
                                 })
+                                .tooltip(|cx| {
+                                    Tooltip::with_meta(
+                                        "Toggle message role",
+                                        None,
+                                        "Available roles: You (User), Assistant, System",
+                                        cx,
+                                    )
+                                })
                                 .on_click({
                                     let conversation = conversation.clone();
                                     move |_, cx| {
@@ -2292,10 +2304,23 @@ impl ConversationEditor {
 
                             h_stack()
                                 .id(("message_header", message_id.0))
-                                .border()
-                                .border_color(gpui::red())
+                                .h_12()
+                                .gap_1()
+                                .p_1()
+                                .debug_bg_cyan()
                                 .child(sender)
-                                .child(Label::new(message.sent_at.format("%I:%M%P").to_string()))
+                                // TODO: Only show this if the message if the message has been sent
+                                .child(
+                                    Label::new(
+                                        FormatDistance::from_now(DateTimeType::Local(
+                                            message.sent_at,
+                                        ))
+                                        .hide_prefix(true)
+                                        .add_suffix(true)
+                                        .to_string(),
+                                    )
+                                    .color(Color::Muted),
+                                )
                                 .children(
                                     if let MessageStatus::Error(error) = message.status.clone() {
                                         Some(
@@ -2456,6 +2481,7 @@ impl ConversationEditor {
             "current_model",
             self.conversation.read(cx).model.short_name(),
         )
+        .style(ButtonStyle::Filled)
         .tooltip(move |cx| Tooltip::text("Change Model", cx))
         .on_click(cx.listener(|this, _, cx| this.cycle_model(cx)))
     }
@@ -2469,12 +2495,7 @@ impl ConversationEditor {
         } else {
             Color::Default
         };
-        Some(
-            div()
-                .border()
-                .border_color(gpui::red())
-                .child(Label::new(remaining_tokens.to_string()).color(remaining_tokens_color)),
-        )
+        Some(Label::new(remaining_tokens.to_string()).color(remaining_tokens_color))
     }
 }