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}