#![allow(
dead_code,
clippy::unreadable_literal,
reason = "generated protocol fields are validated even when not consumed by this crate"
)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct SimilarCodeArtifact {
pub path: &'static str,
pub size: u64,
pub sha256: &'static str,
}
include!(concat!(env!("OUT_DIR"), "/similar_code_protocol.rs"));
#[derive(Debug, Serialize)]
pub(super) struct EmbedFunctionRequest<'a> {
pub key: u32,
pub source: &'a str,
}
#[derive(Debug, Serialize)]
pub(super) struct EmbedBatchRequest<'a> {
pub operation: &'static str,
pub protocol_version: u32,
pub embedding_semantics_version: u32,
pub model_revision: &'static str,
pub dimensions: usize,
pub max_tokens: usize,
pub functions: &'a [EmbedFunctionRequest<'a>],
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub(super) struct EmbedFunctionResponse {
pub key: u32,
pub values: Vec<f32>,
#[serde(default)]
pub truncated: bool,
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub(super) struct EmbedBatchTiming {
pub inference_ms: f64,
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub(super) struct EmbedBatchResponse {
pub protocol_version: u32,
pub embedding_semantics_version: u32,
pub model_revision: String,
pub dimensions: usize,
pub vectors: Vec<EmbedFunctionResponse>,
pub timing: EmbedBatchTiming,
pub status: EmbedCompletionStatus,
pub completion: EmbedCompletion,
#[serde(default)]
pub errors: Vec<EmbedFunctionError>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub(super) enum EmbedCompletionStatus {
Complete,
Partial,
Error,
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub(super) struct EmbedAppliedLimits {
pub max_functions: usize,
pub max_total_source_bytes: usize,
pub max_source_bytes_per_function: usize,
pub max_tokens: usize,
pub batch_size: usize,
pub timeout_ms: u64,
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub(super) struct EmbedCompletion {
pub requested_functions: usize,
pub embedded_functions: usize,
pub skipped_functions: usize,
pub truncated_functions: usize,
pub applied_limits: EmbedAppliedLimits,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub(super) enum EmbedErrorCode {
InvalidRequest,
ProtocolMismatch,
EmbeddingSemanticsMismatch,
ModelRevisionMismatch,
DimensionMismatch,
MaxTokensMismatch,
DuplicateFunctionKey,
FunctionLimit,
TotalSourceBytesLimit,
FunctionSourceBytesLimit,
Timeout,
ModelNotReady,
InferenceFailed,
RequestTooLarge,
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub(super) struct EmbedFunctionError {
pub key: Option<u32>,
pub code: EmbedErrorCode,
pub retryable: bool,
pub observed: Option<u64>,
pub limit: Option<u64>,
pub message: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SimilarCodeProviderStatus {
pub protocol_version: u32,
pub embedding_semantics_version: u32,
pub sidecar_version: String,
pub model_ready: bool,
pub model_id: String,
pub model_revision: String,
pub dimensions: usize,
pub max_tokens: usize,
pub license: String,
pub cache_dir: String,
pub download_bytes: u64,
pub analysis_offline: bool,
pub integrity_verified: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub problem: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub downloaded: Option<bool>,
}