saved_conversation.rs

 1use assistant_tooling::{SavedToolFunctionCall, SavedUserAttachment};
 2use gpui::SharedString;
 3use serde::{Deserialize, Serialize};
 4
 5use crate::MessageId;
 6
 7#[derive(Serialize, Deserialize)]
 8pub struct SavedConversation {
 9    /// The schema version of the conversation.
10    pub version: String,
11    /// The title of the conversation, generated by the Assistant.
12    pub title: String,
13    pub messages: Vec<SavedChatMessage>,
14}
15
16#[derive(Serialize, Deserialize)]
17pub enum SavedChatMessage {
18    User {
19        id: MessageId,
20        body: String,
21        attachments: Vec<SavedUserAttachment>,
22    },
23    Assistant {
24        id: MessageId,
25        messages: Vec<SavedAssistantMessagePart>,
26        error: Option<SharedString>,
27    },
28}
29
30#[derive(Serialize, Deserialize)]
31pub struct SavedAssistantMessagePart {
32    pub body: SharedString,
33    pub tool_calls: Vec<SavedToolFunctionCall>,
34}
35
36/// Returns a list of placeholder conversations for mocking the UI.
37///
38/// Once we have real saved conversations to pull from we can use those instead.
39pub fn placeholder_conversations() -> Vec<SavedConversation> {
40    vec![
41        SavedConversation {
42            version: "0.3.0".to_string(),
43            title: "How to get a list of exported functions in an Erlang module".to_string(),
44            messages: vec![],
45        },
46        SavedConversation {
47            version: "0.3.0".to_string(),
48            title: "7 wonders of the ancient world".to_string(),
49            messages: vec![],
50        },
51        SavedConversation {
52            version: "0.3.0".to_string(),
53            title: "Size difference between u8 and a reference to u8 in Rust".to_string(),
54            messages: vec![],
55        },
56    ]
57}