1use std::{path::Path, sync::Arc};
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize)]
6pub struct AutocompleteRequest {
7 pub debug_info: Arc<str>,
8 pub repo_name: String,
9 pub branch: Option<String>,
10 pub file_path: Arc<Path>,
11 pub file_contents: String,
12 pub recent_changes: String,
13 pub cursor_position: usize,
14 pub original_file_contents: String,
15 pub file_chunks: Vec<FileChunk>,
16 pub retrieval_chunks: Vec<RetrievalChunk>,
17 pub recent_user_actions: Vec<UserAction>,
18 pub multiple_suggestions: bool,
19 pub privacy_mode_enabled: bool,
20 pub changes_above_cursor: bool,
21}
22
23#[derive(Debug, Clone, Serialize)]
24pub struct FileChunk {
25 pub file_path: String,
26 pub start_line: usize,
27 pub end_line: usize,
28 pub content: String,
29 pub timestamp: Option<u64>,
30}
31
32#[derive(Debug, Clone, Serialize)]
33pub struct RetrievalChunk {
34 pub file_path: String,
35 pub start_line: usize,
36 pub end_line: usize,
37 pub content: String,
38 pub timestamp: u64,
39}
40
41#[derive(Debug, Clone, Serialize)]
42pub struct UserAction {
43 pub action_type: ActionType,
44 pub line_number: usize,
45 pub offset: usize,
46 pub file_path: String,
47 pub timestamp: u64,
48}
49
50#[allow(dead_code)]
51#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
52#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
53pub enum ActionType {
54 CursorMovement,
55 InsertChar,
56 DeleteChar,
57 InsertSelection,
58 DeleteSelection,
59}
60
61#[derive(Debug, Clone, Deserialize)]
62pub struct AutocompleteResponse {
63 pub autocomplete_id: String,
64 pub start_index: usize,
65 pub end_index: usize,
66 pub completion: String,
67 #[allow(dead_code)]
68 pub confidence: f64,
69 #[allow(dead_code)]
70 pub logprobs: Option<serde_json::Value>,
71 #[allow(dead_code)]
72 pub finish_reason: Option<String>,
73 #[allow(dead_code)]
74 pub elapsed_time_ms: u64,
75 #[allow(dead_code)]
76 #[serde(default, rename = "completions")]
77 pub additional_completions: Vec<AdditionalCompletion>,
78}
79
80#[allow(dead_code)]
81#[derive(Debug, Clone, Deserialize)]
82pub struct AdditionalCompletion {
83 pub start_index: usize,
84 pub end_index: usize,
85 pub completion: String,
86 pub confidence: f64,
87 pub autocomplete_id: String,
88 pub logprobs: Option<serde_json::Value>,
89 pub finish_reason: Option<String>,
90}