1#![allow(
4 dead_code,
5 clippy::unreadable_literal,
6 reason = "generated protocol fields are validated even when not consumed by this crate"
7)]
8
9use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
13pub struct SimilarCodeArtifact {
14 pub path: &'static str,
16 pub size: u64,
18 pub sha256: &'static str,
20}
21
22include!(concat!(env!("OUT_DIR"), "/similar_code_protocol.rs"));
23
24#[derive(Debug, Serialize)]
26pub(super) struct EmbedFunctionRequest<'a> {
27 pub key: u32,
29 pub source: &'a str,
31}
32
33#[derive(Debug, Serialize)]
35pub(super) struct EmbedBatchRequest<'a> {
36 pub operation: &'static str,
38 pub protocol_version: u32,
40 pub embedding_semantics_version: u32,
42 pub model_revision: &'static str,
44 pub dimensions: usize,
46 pub max_tokens: usize,
48 pub functions: &'a [EmbedFunctionRequest<'a>],
50}
51
52#[derive(Debug, Deserialize)]
54#[serde(deny_unknown_fields)]
55pub(super) struct EmbedFunctionResponse {
56 pub key: u32,
58 pub values: Vec<f32>,
60 #[serde(default)]
62 pub truncated: bool,
63}
64
65#[derive(Debug, Deserialize)]
67#[serde(deny_unknown_fields)]
68pub(super) struct EmbedBatchTiming {
69 pub inference_ms: f64,
71}
72
73#[derive(Debug, Deserialize)]
75#[serde(deny_unknown_fields)]
76pub(super) struct EmbedBatchResponse {
77 pub protocol_version: u32,
79 pub embedding_semantics_version: u32,
81 pub model_revision: String,
83 pub dimensions: usize,
85 pub vectors: Vec<EmbedFunctionResponse>,
87 pub timing: EmbedBatchTiming,
89 pub status: EmbedCompletionStatus,
91 pub completion: EmbedCompletion,
93 #[serde(default)]
95 pub errors: Vec<EmbedFunctionError>,
96}
97
98#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
100#[serde(rename_all = "kebab-case")]
101pub(super) enum EmbedCompletionStatus {
102 Complete,
103 Partial,
104 Error,
105}
106
107#[derive(Debug, Deserialize)]
109#[serde(deny_unknown_fields)]
110pub(super) struct EmbedAppliedLimits {
111 pub max_functions: usize,
112 pub max_total_source_bytes: usize,
113 pub max_source_bytes_per_function: usize,
114 pub max_tokens: usize,
115 pub batch_size: usize,
116 pub timeout_ms: u64,
117}
118
119#[derive(Debug, Deserialize)]
121#[serde(deny_unknown_fields)]
122pub(super) struct EmbedCompletion {
123 pub requested_functions: usize,
124 pub embedded_functions: usize,
125 pub skipped_functions: usize,
126 pub truncated_functions: usize,
127 pub applied_limits: EmbedAppliedLimits,
128}
129
130#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
132#[serde(rename_all = "kebab-case")]
133pub(super) enum EmbedErrorCode {
134 InvalidRequest,
135 ProtocolMismatch,
136 EmbeddingSemanticsMismatch,
137 ModelRevisionMismatch,
138 DimensionMismatch,
139 MaxTokensMismatch,
140 DuplicateFunctionKey,
141 FunctionLimit,
142 TotalSourceBytesLimit,
143 FunctionSourceBytesLimit,
144 Timeout,
145 ModelNotReady,
146 InferenceFailed,
147 RequestTooLarge,
148}
149
150#[derive(Debug, Deserialize)]
152#[serde(deny_unknown_fields)]
153pub(super) struct EmbedFunctionError {
154 pub key: Option<u32>,
155 pub code: EmbedErrorCode,
156 pub retryable: bool,
157 pub observed: Option<u64>,
158 pub limit: Option<u64>,
159 pub message: Option<String>,
160}
161
162#[derive(Debug, Clone, Deserialize, Serialize)]
164#[serde(deny_unknown_fields)]
165pub struct SimilarCodeProviderStatus {
166 pub protocol_version: u32,
168 pub embedding_semantics_version: u32,
170 pub sidecar_version: String,
172 pub model_ready: bool,
174 pub model_id: String,
176 pub model_revision: String,
178 pub dimensions: usize,
180 pub max_tokens: usize,
182 pub license: String,
184 pub cache_dir: String,
186 pub download_bytes: u64,
188 pub analysis_offline: bool,
190 pub integrity_verified: bool,
192 #[serde(skip_serializing_if = "Option::is_none")]
194 pub problem: Option<String>,
195 #[serde(skip_serializing_if = "Option::is_none")]
197 pub downloaded: Option<bool>,
198}