1pub mod assistant;
2mod assistant_settings;
3
4pub use assistant::AssistantPanel;
5use gpui::AppContext;
6use serde::{Deserialize, Serialize};
7
8// Data types for chat completion requests
9#[derive(Serialize)]
10struct OpenAIRequest {
11 model: String,
12 messages: Vec<RequestMessage>,
13 stream: bool,
14}
15
16#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
17struct RequestMessage {
18 role: Role,
19 content: String,
20}
21
22#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
23struct ResponseMessage {
24 role: Option<Role>,
25 content: Option<String>,
26}
27
28#[derive(Clone, Copy, Serialize, Deserialize, Debug, Eq, PartialEq)]
29#[serde(rename_all = "lowercase")]
30enum Role {
31 User,
32 Assistant,
33 System,
34}
35
36#[derive(Deserialize, Debug)]
37struct OpenAIResponseStreamEvent {
38 pub id: Option<String>,
39 pub object: String,
40 pub created: u32,
41 pub model: String,
42 pub choices: Vec<ChatChoiceDelta>,
43 pub usage: Option<Usage>,
44}
45
46#[derive(Deserialize, Debug)]
47struct Usage {
48 pub prompt_tokens: u32,
49 pub completion_tokens: u32,
50 pub total_tokens: u32,
51}
52
53#[derive(Deserialize, Debug)]
54struct ChatChoiceDelta {
55 pub index: u32,
56 pub delta: ResponseMessage,
57 pub finish_reason: Option<String>,
58}
59
60#[derive(Deserialize, Debug)]
61struct OpenAIUsage {
62 prompt_tokens: u64,
63 completion_tokens: u64,
64 total_tokens: u64,
65}
66
67#[derive(Deserialize, Debug)]
68struct OpenAIChoice {
69 text: String,
70 index: u32,
71 logprobs: Option<serde_json::Value>,
72 finish_reason: Option<String>,
73}
74
75pub fn init(cx: &mut AppContext) {
76 assistant::init(cx);
77}