ai.rs

 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}