zeta2 cli: Export retrieval stats data frame (#40145)

Retrieval stats will now use polars to build a big data frame for
references with the cartesian product of LSP declarations and retrieved
declaration candidates (with all their score components) and rebuilds
the stats summary on top of it.

This data frame is written to a `.parquet` file, which we can load into
advanced analytics tools (such as Metabase), so we can explore our
scoring distributions and find ways to improve retrieval, and then train
the decision tree.

Release Notes:

- N/A
This commit is contained in:
Agus Zubiaga
2025-10-14 13:34:07 -03:00
committed by GitHub
parent ce696c18ed
commit 1bd34e0db0
5 changed files with 1670 additions and 302 deletions
Generated
+1042 -27
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -14,6 +14,7 @@ path = "src/main.rs"
[dependencies]
anyhow.workspace = true
chrono.workspace = true
clap.workspace = true
client.workspace = true
cloud_llm_client.workspace= true
@@ -35,6 +36,7 @@ log.workspace = true
node_runtime.workspace = true
ordered-float.workspace = true
paths.workspace = true
polars = { version = "0.51", features = ["lazy", "dtype-struct", "parquet"] }
project.workspace = true
prompt_store.workspace = true
release_channel.workspace = true
@@ -44,6 +46,7 @@ serde_json.workspace = true
settings.workspace = true
shellexpand.workspace = true
smol.workspace = true
soa-rs = "0.8.1"
terminal_view.workspace = true
util.workspace = true
watch.workspace = true
+604 -215
View File
@@ -13,8 +13,10 @@ use gpui::{AppContext, AsyncApp};
use language::OffsetRangeExt;
use language::{BufferSnapshot, Point};
use ordered_float::OrderedFloat;
use polars::prelude::*;
use project::{Project, ProjectEntryId, ProjectPath, Worktree};
use serde::{Deserialize, Serialize};
use std::fs;
use std::{
cmp::Reverse,
collections::{HashMap, HashSet},
@@ -163,16 +165,23 @@ pub async fn retrieval_stats(
}
let files_hash = hasher.finish();
let file_snapshots = Arc::new(file_snapshots);
let target_cli_dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../target/zeta_cli");
fs::create_dir_all(&target_cli_dir).unwrap();
let target_cli_dir = target_cli_dir.canonicalize().unwrap();
let lsp_definitions_path = std::env::current_dir()?.join(format!(
"target/zeta2-lsp-definitions-{:x}.jsonl",
let lsp_cache_dir = target_cli_dir.join("cache");
fs::create_dir_all(&lsp_cache_dir).unwrap();
let lsp_definitions_path = lsp_cache_dir.join(format!(
"{}-{:x}.jsonl",
worktree_path.file_stem().unwrap_or_default().display(),
files_hash
));
let mut lsp_definitions = HashMap::default();
let mut lsp_files = 0;
if std::fs::exists(&lsp_definitions_path)? {
if fs::exists(&lsp_definitions_path)? {
log::info!(
"Using cached LSP definitions from {}",
lsp_definitions_path.display()
@@ -246,8 +255,7 @@ pub async fn retrieval_stats(
let files_len = files.len().min(file_limit.unwrap_or(usize::MAX));
let done_count = Arc::new(AtomicUsize::new(0));
let (output_tx, mut output_rx) = mpsc::unbounded::<RetrievalStatsResult>();
let mut output = std::fs::File::create("target/zeta-retrieval-stats.txt")?;
let (output_tx, output_rx) = mpsc::unbounded::<ReferenceRetrievalResult>();
let tasks = files
.into_iter()
@@ -271,8 +279,6 @@ pub async fn retrieval_stats(
&snapshot,
);
println!("references: {}", references.len(),);
let imports = if options.context.use_imports {
Imports::gather(&snapshot, Some(&project_file.parent_abs_path))
} else {
@@ -309,65 +315,13 @@ pub async fn retrieval_stats(
)
.await?;
// TODO: LSP returns things like locals, this filters out some of those, but potentially
// hides some retrieval issues.
if retrieve_result.definitions.is_empty() {
continue;
}
let mut best_match = None;
let mut has_external_definition = false;
let mut in_excerpt = false;
for (index, retrieved_definition) in
retrieve_result.definitions.iter().enumerate()
{
for lsp_definition in &lsp_definitions {
let SourceRange {
path,
point_range,
offset_range,
} = lsp_definition;
let lsp_point_range =
SerializablePoint::into_language_point_range(point_range.clone());
has_external_definition = has_external_definition
|| path.is_absolute()
|| path
.components()
.any(|component| component.as_os_str() == "node_modules");
let is_match = path.as_path()
== retrieved_definition.path.as_std_path()
&& retrieved_definition
.range
.contains_inclusive(&lsp_point_range);
if is_match {
if best_match.is_none() {
best_match = Some(index);
}
}
in_excerpt = in_excerpt
|| retrieve_result.excerpt_range.as_ref().is_some_and(
|excerpt_range| excerpt_range.contains_inclusive(&offset_range),
);
}
}
let outcome = if let Some(best_match) = best_match {
RetrievalOutcome::Match { best_match }
} else if has_external_definition {
RetrievalOutcome::NoMatchDueToExternalLspDefinitions
} else if in_excerpt {
RetrievalOutcome::ProbablyLocal
} else {
RetrievalOutcome::NoMatch
};
let result = RetrievalStatsResult {
outcome,
path: path.clone(),
let result = ReferenceRetrievalResult {
cursor_path: path.clone(),
identifier: reference.identifier,
point: query_point,
cursor_point: query_point,
lsp_definitions,
retrieved_definitions: retrieve_result.definitions,
excerpt_range: retrieve_result.excerpt_range,
};
output_tx.unbounded_send(result).ok();
@@ -386,139 +340,610 @@ pub async fn retrieval_stats(
drop(output_tx);
let results_task = cx.background_spawn(async move {
let mut results = Vec::new();
while let Some(result) = output_rx.next().await {
output
.write_all(format!("{:#?}\n", result).as_bytes())
.log_err();
results.push(result)
}
results
});
let df_task = cx.background_spawn(build_dataframe(output_rx));
futures::future::try_join_all(tasks).await?;
println!("Tasks completed");
let results = results_task.await;
println!("Results received");
let mut df = df_task.await?;
let mut references_count = 0;
let run_id = format!(
"{}-{}",
worktree_path.file_stem().unwrap_or_default().display(),
chrono::Local::now().format("%Y%m%d_%H%M%S")
);
let run_dir = target_cli_dir.join(run_id);
fs::create_dir(&run_dir).unwrap();
let mut included_count = 0;
let mut both_absent_count = 0;
let parquet_path = run_dir.join("stats.parquet");
let mut parquet_file = fs::File::create(&parquet_path)?;
let mut retrieved_count = 0;
let mut top_match_count = 0;
let mut non_top_match_count = 0;
let mut ranking_involved_top_match_count = 0;
ParquetWriter::new(&mut parquet_file)
.finish(&mut df)
.unwrap();
let mut no_match_count = 0;
let mut no_match_none_retrieved = 0;
let mut no_match_wrong_retrieval = 0;
let stats = SummaryStats::from_dataframe(df)?;
let mut expected_no_match_count = 0;
let mut in_excerpt_count = 0;
let mut external_definition_count = 0;
let stats_path = run_dir.join("stats.txt");
fs::write(&stats_path, format!("{}", stats))?;
for result in results {
references_count += 1;
match &result.outcome {
RetrievalOutcome::Match { best_match } => {
included_count += 1;
retrieved_count += 1;
let multiple = result.retrieved_definitions.len() > 1;
if *best_match == 0 {
top_match_count += 1;
if multiple {
ranking_involved_top_match_count += 1;
}
} else {
non_top_match_count += 1;
}
println!("{}", stats);
println!("\nWrote:");
println!("- {}", relativize_path(&parquet_path).display());
println!("- {}", relativize_path(&stats_path).display());
println!("- {}", relativize_path(&lsp_definitions_path).display());
Ok("".to_string())
}
async fn build_dataframe(
mut output_rx: mpsc::UnboundedReceiver<ReferenceRetrievalResult>,
) -> Result<DataFrame> {
use soa_rs::{Soa, Soars};
#[derive(Default, Soars)]
struct Row {
ref_id: u32,
cursor_path: String,
cursor_row: u32,
cursor_column: u32,
cursor_identifier: String,
gold_in_excerpt: bool,
gold_path: String,
gold_row: u32,
gold_column: u32,
gold_is_external: bool,
candidate_count: u32,
candidate_path: Option<String>,
candidate_row: Option<u32>,
candidate_column: Option<u32>,
candidate_is_gold: Option<bool>,
candidate_rank: Option<u32>,
candidate_is_same_file: Option<bool>,
candidate_is_referenced_nearby: Option<bool>,
candidate_is_referenced_in_breadcrumb: Option<bool>,
candidate_reference_count: Option<u32>,
candidate_same_file_declaration_count: Option<u32>,
candidate_declaration_count: Option<u32>,
candidate_reference_line_distance: Option<u32>,
candidate_declaration_line_distance: Option<u32>,
candidate_excerpt_vs_item_jaccard: Option<f32>,
candidate_excerpt_vs_signature_jaccard: Option<f32>,
candidate_adjacent_vs_item_jaccard: Option<f32>,
candidate_adjacent_vs_signature_jaccard: Option<f32>,
candidate_excerpt_vs_item_weighted_overlap: Option<f32>,
candidate_excerpt_vs_signature_weighted_overlap: Option<f32>,
candidate_adjacent_vs_item_weighted_overlap: Option<f32>,
candidate_adjacent_vs_signature_weighted_overlap: Option<f32>,
candidate_path_import_match_count: Option<u32>,
candidate_wildcard_path_import_match_count: Option<u32>,
candidate_import_similarity: Option<f32>,
candidate_max_import_similarity: Option<f32>,
candidate_normalized_import_similarity: Option<f32>,
candidate_wildcard_import_similarity: Option<f32>,
candidate_normalized_wildcard_import_similarity: Option<f32>,
candidate_included_by_others: Option<u32>,
candidate_includes_others: Option<u32>,
}
let mut rows = Soa::<Row>::new();
let mut next_ref_id = 0;
while let Some(result) = output_rx.next().await {
let mut gold_is_external = false;
let mut gold_in_excerpt = false;
let cursor_path = result.cursor_path.as_unix_str();
let cursor_row = result.cursor_point.row + 1;
let cursor_column = result.cursor_point.column + 1;
let cursor_identifier = result.identifier.name.to_string();
let ref_id = next_ref_id;
next_ref_id += 1;
for lsp_definition in result.lsp_definitions {
let SourceRange {
path: gold_path,
point_range: gold_point_range,
offset_range: gold_offset_range,
} = lsp_definition;
let lsp_point_range =
SerializablePoint::into_language_point_range(gold_point_range.clone());
gold_is_external = gold_is_external
|| gold_path.is_absolute()
|| gold_path
.components()
.any(|component| component.as_os_str() == "node_modules");
gold_in_excerpt = gold_in_excerpt
|| result.excerpt_range.as_ref().is_some_and(|excerpt_range| {
excerpt_range.contains_inclusive(&gold_offset_range)
});
let gold_row = gold_point_range.start.row;
let gold_column = gold_point_range.start.column;
let candidate_count = result.retrieved_definitions.len() as u32;
for (candidate_rank, retrieved_definition) in
result.retrieved_definitions.iter().enumerate()
{
let candidate_is_gold = gold_path.as_path()
== retrieved_definition.path.as_std_path()
&& retrieved_definition
.range
.contains_inclusive(&lsp_point_range);
let candidate_row = retrieved_definition.range.start.row + 1;
let candidate_column = retrieved_definition.range.start.column + 1;
let DeclarationScoreComponents {
is_same_file,
is_referenced_nearby,
is_referenced_in_breadcrumb,
reference_count,
same_file_declaration_count,
declaration_count,
reference_line_distance,
declaration_line_distance,
excerpt_vs_item_jaccard,
excerpt_vs_signature_jaccard,
adjacent_vs_item_jaccard,
adjacent_vs_signature_jaccard,
excerpt_vs_item_weighted_overlap,
excerpt_vs_signature_weighted_overlap,
adjacent_vs_item_weighted_overlap,
adjacent_vs_signature_weighted_overlap,
path_import_match_count,
wildcard_path_import_match_count,
import_similarity,
max_import_similarity,
normalized_import_similarity,
wildcard_import_similarity,
normalized_wildcard_import_similarity,
included_by_others,
includes_others,
} = retrieved_definition.components;
rows.push(Row {
ref_id,
cursor_path: cursor_path.to_string(),
cursor_row,
cursor_column,
cursor_identifier: cursor_identifier.clone(),
gold_in_excerpt,
gold_path: gold_path.to_string_lossy().to_string(),
gold_row,
gold_column,
gold_is_external,
candidate_count,
candidate_path: Some(retrieved_definition.path.as_unix_str().to_string()),
candidate_row: Some(candidate_row),
candidate_column: Some(candidate_column),
candidate_is_gold: Some(candidate_is_gold),
candidate_rank: Some(candidate_rank as u32),
candidate_is_same_file: Some(is_same_file),
candidate_is_referenced_nearby: Some(is_referenced_nearby),
candidate_is_referenced_in_breadcrumb: Some(is_referenced_in_breadcrumb),
candidate_reference_count: Some(reference_count as u32),
candidate_same_file_declaration_count: Some(same_file_declaration_count as u32),
candidate_declaration_count: Some(declaration_count as u32),
candidate_reference_line_distance: Some(reference_line_distance),
candidate_declaration_line_distance: Some(declaration_line_distance),
candidate_excerpt_vs_item_jaccard: Some(excerpt_vs_item_jaccard),
candidate_excerpt_vs_signature_jaccard: Some(excerpt_vs_signature_jaccard),
candidate_adjacent_vs_item_jaccard: Some(adjacent_vs_item_jaccard),
candidate_adjacent_vs_signature_jaccard: Some(adjacent_vs_signature_jaccard),
candidate_excerpt_vs_item_weighted_overlap: Some(
excerpt_vs_item_weighted_overlap,
),
candidate_excerpt_vs_signature_weighted_overlap: Some(
excerpt_vs_signature_weighted_overlap,
),
candidate_adjacent_vs_item_weighted_overlap: Some(
adjacent_vs_item_weighted_overlap,
),
candidate_adjacent_vs_signature_weighted_overlap: Some(
adjacent_vs_signature_weighted_overlap,
),
candidate_path_import_match_count: Some(path_import_match_count as u32),
candidate_wildcard_path_import_match_count: Some(
wildcard_path_import_match_count as u32,
),
candidate_import_similarity: Some(import_similarity),
candidate_max_import_similarity: Some(max_import_similarity),
candidate_normalized_import_similarity: Some(normalized_import_similarity),
candidate_wildcard_import_similarity: Some(wildcard_import_similarity),
candidate_normalized_wildcard_import_similarity: Some(
normalized_wildcard_import_similarity,
),
candidate_included_by_others: Some(included_by_others as u32),
candidate_includes_others: Some(includes_others as u32),
});
}
RetrievalOutcome::NoMatch => {
if result.lsp_definitions.is_empty() {
included_count += 1;
both_absent_count += 1;
} else {
no_match_count += 1;
if result.retrieved_definitions.is_empty() {
no_match_none_retrieved += 1;
} else {
no_match_wrong_retrieval += 1;
}
}
}
RetrievalOutcome::NoMatchDueToExternalLspDefinitions => {
expected_no_match_count += 1;
external_definition_count += 1;
}
RetrievalOutcome::ProbablyLocal => {
included_count += 1;
in_excerpt_count += 1;
if result.retrieved_definitions.is_empty() {
rows.push(Row {
ref_id,
cursor_path: cursor_path.to_string(),
cursor_row,
cursor_column,
cursor_identifier: cursor_identifier.clone(),
gold_in_excerpt,
gold_path: gold_path.to_string_lossy().to_string(),
gold_row,
gold_column,
gold_is_external,
candidate_count,
..Default::default()
});
}
}
}
let slices = rows.slices();
fn count_and_percentage(part: usize, total: usize) -> String {
format!("{} ({:.2}%)", part, (part as f64 / total as f64) * 100.0)
let RowSlices {
ref_id,
cursor_path,
cursor_row,
cursor_column,
cursor_identifier,
gold_in_excerpt,
gold_path,
gold_row,
gold_column,
gold_is_external,
candidate_path,
candidate_row,
candidate_column,
candidate_is_gold,
candidate_rank,
candidate_count,
candidate_is_same_file,
candidate_is_referenced_nearby,
candidate_is_referenced_in_breadcrumb,
candidate_reference_count,
candidate_same_file_declaration_count,
candidate_declaration_count,
candidate_reference_line_distance,
candidate_declaration_line_distance,
candidate_excerpt_vs_item_jaccard,
candidate_excerpt_vs_signature_jaccard,
candidate_adjacent_vs_item_jaccard,
candidate_adjacent_vs_signature_jaccard,
candidate_excerpt_vs_item_weighted_overlap,
candidate_excerpt_vs_signature_weighted_overlap,
candidate_adjacent_vs_item_weighted_overlap,
candidate_adjacent_vs_signature_weighted_overlap,
candidate_path_import_match_count,
candidate_wildcard_path_import_match_count,
candidate_import_similarity,
candidate_max_import_similarity,
candidate_normalized_import_similarity,
candidate_wildcard_import_similarity,
candidate_normalized_wildcard_import_similarity,
candidate_included_by_others,
candidate_includes_others,
} = slices;
let df = DataFrame::new(vec![
Series::new(PlSmallStr::from_str("ref_id"), ref_id).into(),
Series::new(PlSmallStr::from_str("cursor_path"), cursor_path).into(),
Series::new(PlSmallStr::from_str("cursor_row"), cursor_row).into(),
Series::new(PlSmallStr::from_str("cursor_column"), cursor_column).into(),
Series::new(PlSmallStr::from_str("cursor_identifier"), cursor_identifier).into(),
Series::new(PlSmallStr::from_str("gold_in_excerpt"), gold_in_excerpt).into(),
Series::new(PlSmallStr::from_str("gold_path"), gold_path).into(),
Series::new(PlSmallStr::from_str("gold_row"), gold_row).into(),
Series::new(PlSmallStr::from_str("gold_column"), gold_column).into(),
Series::new(PlSmallStr::from_str("gold_is_external"), gold_is_external).into(),
Series::new(PlSmallStr::from_str("candidate_count"), candidate_count).into(),
Series::new(PlSmallStr::from_str("candidate_path"), candidate_path).into(),
Series::new(PlSmallStr::from_str("candidate_row"), candidate_row).into(),
Series::new(PlSmallStr::from_str("candidate_column"), candidate_column).into(),
Series::new(PlSmallStr::from_str("candidate_is_gold"), candidate_is_gold).into(),
Series::new(PlSmallStr::from_str("candidate_rank"), candidate_rank).into(),
Series::new(
PlSmallStr::from_str("candidate_is_same_file"),
candidate_is_same_file,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_is_referenced_nearby"),
candidate_is_referenced_nearby,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_is_referenced_in_breadcrumb"),
candidate_is_referenced_in_breadcrumb,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_reference_count"),
candidate_reference_count,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_same_file_declaration_count"),
candidate_same_file_declaration_count,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_declaration_count"),
candidate_declaration_count,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_reference_line_distance"),
candidate_reference_line_distance,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_declaration_line_distance"),
candidate_declaration_line_distance,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_excerpt_vs_item_jaccard"),
candidate_excerpt_vs_item_jaccard,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_excerpt_vs_signature_jaccard"),
candidate_excerpt_vs_signature_jaccard,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_adjacent_vs_item_jaccard"),
candidate_adjacent_vs_item_jaccard,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_adjacent_vs_signature_jaccard"),
candidate_adjacent_vs_signature_jaccard,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_excerpt_vs_item_weighted_overlap"),
candidate_excerpt_vs_item_weighted_overlap,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_excerpt_vs_signature_weighted_overlap"),
candidate_excerpt_vs_signature_weighted_overlap,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_adjacent_vs_item_weighted_overlap"),
candidate_adjacent_vs_item_weighted_overlap,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_adjacent_vs_signature_weighted_overlap"),
candidate_adjacent_vs_signature_weighted_overlap,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_path_import_match_count"),
candidate_path_import_match_count,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_wildcard_path_import_match_count"),
candidate_wildcard_path_import_match_count,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_import_similarity"),
candidate_import_similarity,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_max_import_similarity"),
candidate_max_import_similarity,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_normalized_import_similarity"),
candidate_normalized_import_similarity,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_wildcard_import_similarity"),
candidate_wildcard_import_similarity,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_normalized_wildcard_import_similarity"),
candidate_normalized_wildcard_import_similarity,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_included_by_others"),
candidate_included_by_others,
)
.into(),
Series::new(
PlSmallStr::from_str("candidate_includes_others"),
candidate_includes_others,
)
.into(),
])?;
Ok(df)
}
fn relativize_path(path: &Path) -> &Path {
path.strip_prefix(std::env::current_dir().unwrap())
.unwrap_or(path)
}
struct SummaryStats {
references_count: u32,
retrieved_count: u32,
top_match_count: u32,
non_top_match_count: u32,
ranking_involved_top_match_count: u32,
missing_none_retrieved: u32,
missing_wrong_retrieval: u32,
missing_external: u32,
in_excerpt_count: u32,
}
impl SummaryStats {
fn from_dataframe(df: DataFrame) -> Result<Self> {
// TODO: use lazy more
let unique_refs =
df.unique::<(), ()>(Some(&["ref_id".into()]), UniqueKeepStrategy::Any, None)?;
let references_count = unique_refs.height() as u32;
let gold_mask = df.column("candidate_is_gold")?.bool()?;
let gold_df = df.filter(&gold_mask)?;
let retrieved_count = gold_df.height() as u32;
let top_match_mask = gold_df.column("candidate_rank")?.u32()?.equal(0);
let top_match_df = gold_df.filter(&top_match_mask)?;
let top_match_count = top_match_df.height() as u32;
let ranking_involved_top_match_count = top_match_df
.column("candidate_count")?
.u32()?
.gt(1)
.sum()
.unwrap_or_default();
let non_top_match_count = (!top_match_mask).sum().unwrap_or(0);
let not_retrieved_df = df
.lazy()
.group_by(&[col("ref_id"), col("candidate_count")])
.agg(&[
col("candidate_is_gold")
.fill_null(false)
.sum()
.alias("gold_count"),
col("gold_in_excerpt").sum().alias("gold_in_excerpt_count"),
col("gold_is_external")
.sum()
.alias("gold_is_external_count"),
])
.filter(col("gold_count").eq(lit(0)))
.collect()?;
let in_excerpt_mask = not_retrieved_df
.column("gold_in_excerpt_count")?
.u32()?
.gt(0);
let in_excerpt_count = in_excerpt_mask.sum().unwrap_or(0);
let missing_df = not_retrieved_df.filter(&!in_excerpt_mask)?;
let missing_none_retrieved_mask = missing_df.column("candidate_count")?.u32()?.equal(0);
let missing_none_retrieved = missing_none_retrieved_mask.sum().unwrap_or(0);
let external_mask = missing_df.column("gold_is_external_count")?.u32()?.gt(0);
let missing_external = (missing_none_retrieved_mask & external_mask)
.sum()
.unwrap_or(0);
let missing_wrong_retrieval = missing_df
.column("candidate_count")?
.u32()?
.gt(0)
.sum()
.unwrap_or(0);
Ok(SummaryStats {
references_count,
retrieved_count,
top_match_count,
non_top_match_count,
ranking_involved_top_match_count,
missing_none_retrieved,
missing_wrong_retrieval,
missing_external,
in_excerpt_count,
})
}
println!("");
println!("╮ references: {}", references_count);
println!(
"├─╮ included: {}",
count_and_percentage(included_count, references_count),
);
println!(
"│ ├─╮ retrieved: {}",
count_and_percentage(retrieved_count, references_count)
);
println!(
"│ │ ├─╮ top match : {}",
count_and_percentage(top_match_count, retrieved_count)
);
println!(
"│ │ │ ╰─╴ involving ranking: {}",
count_and_percentage(ranking_involved_top_match_count, top_match_count)
);
println!(
"│ │ ╰─╴ non-top match: {}",
count_and_percentage(non_top_match_count, retrieved_count)
);
println!(
"│ ├─╴ both absent: {}",
count_and_percentage(both_absent_count, included_count)
);
println!(
"│ ╰─╴ in excerpt: {}",
count_and_percentage(in_excerpt_count, included_count)
);
println!(
"├─╮ no match: {}",
count_and_percentage(no_match_count, references_count)
);
println!(
"│ ├─╴ none retrieved: {}",
count_and_percentage(no_match_none_retrieved, no_match_count)
);
println!(
"│ ╰─╴ wrong retrieval: {}",
count_and_percentage(no_match_wrong_retrieval, no_match_count)
);
println!(
"╰─╮ expected no match: {}",
count_and_percentage(expected_no_match_count, references_count)
);
println!(
" ╰─╴ external definition: {}",
count_and_percentage(external_definition_count, expected_no_match_count)
);
fn count_and_percentage(part: u32, total: u32) -> String {
format!("{} ({:.2}%)", part, (part as f64 / total as f64) * 100.0)
}
}
println!("");
println!("LSP definition cache at {}", lsp_definitions_path.display());
impl std::fmt::Display for SummaryStats {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let included = self.in_excerpt_count + self.retrieved_count;
let missing = self.references_count - included;
writeln!(f)?;
writeln!(f, "╮ references: {}", self.references_count)?;
writeln!(
f,
"├─╮ included: {}",
Self::count_and_percentage(included, self.references_count),
)?;
writeln!(
f,
"│ ├─╮ retrieved: {}",
Self::count_and_percentage(self.retrieved_count, self.references_count)
)?;
writeln!(
f,
"│ │ ├─╮ top match : {}",
Self::count_and_percentage(self.top_match_count, self.retrieved_count)
)?;
writeln!(
f,
"│ │ │ ╰─╴ involving ranking: {}",
Self::count_and_percentage(self.ranking_involved_top_match_count, self.top_match_count)
)?;
writeln!(
f,
"│ │ ╰─╴ non-top match: {}",
Self::count_and_percentage(self.non_top_match_count, self.retrieved_count)
)?;
writeln!(
f,
"│ ╰─╴ in excerpt: {}",
Self::count_and_percentage(self.in_excerpt_count, included)
)?;
writeln!(
f,
"╰─╮ missing: {}",
Self::count_and_percentage(missing, self.references_count)
)?;
writeln!(
f,
" ├─╮ none retrieved: {}",
Self::count_and_percentage(self.missing_none_retrieved, missing)
)?;
writeln!(
f,
" │ ╰─╴ external (expected): {}",
Self::count_and_percentage(self.missing_external, missing)
)?;
writeln!(
f,
" ╰─╴ wrong retrieval: {}",
Self::count_and_percentage(self.missing_wrong_retrieval, missing)
)?;
Ok(())
}
}
Ok("".to_string())
#[derive(Debug)]
struct ReferenceRetrievalResult {
cursor_path: Arc<RelPath>,
cursor_point: Point,
identifier: Identifier,
excerpt_range: Option<Range<usize>>,
lsp_definitions: Vec<SourceRange>,
retrieved_definitions: Vec<RetrievedDefinition>,
}
#[derive(Debug)]
struct RetrievedDefinition {
path: Arc<RelPath>,
range: Range<Point>,
score: f32,
#[allow(dead_code)]
retrieval_score: f32,
#[allow(dead_code)]
components: DeclarationScoreComponents,
}
struct RetrieveResult {
@@ -828,39 +1253,3 @@ impl From<SerializablePoint> for Point {
}
}
}
#[derive(Debug)]
struct RetrievalStatsResult {
outcome: RetrievalOutcome,
#[allow(dead_code)]
path: Arc<RelPath>,
#[allow(dead_code)]
identifier: Identifier,
#[allow(dead_code)]
point: Point,
#[allow(dead_code)]
lsp_definitions: Vec<SourceRange>,
retrieved_definitions: Vec<RetrievedDefinition>,
}
#[derive(Debug)]
enum RetrievalOutcome {
Match {
/// Lowest index within retrieved_definitions that matches an LSP definition.
best_match: usize,
},
ProbablyLocal,
NoMatch,
NoMatchDueToExternalLspDefinitions,
}
#[derive(Debug)]
struct RetrievedDefinition {
path: Arc<RelPath>,
range: Range<Point>,
score: f32,
#[allow(dead_code)]
retrieval_score: f32,
#[allow(dead_code)]
components: DeclarationScoreComponents,
}
+1
View File
@@ -14,6 +14,7 @@ accepted = [
"Unicode-3.0",
"OpenSSL",
"Zlib",
"BSL-1.0",
]
[procinfo.clarify]
+20 -60
View File
@@ -38,9 +38,9 @@ bit-set = { version = "0.8", default-features = false, features = ["std"] }
bit-vec = { version = "0.8", default-features = false, features = ["std"] }
bitflags = { version = "2", default-features = false, features = ["serde", "std"] }
bstr = { version = "1" }
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc"] }
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc", "must_cast"] }
byteorder = { version = "1" }
bytes = { version = "1" }
bytes = { version = "1", features = ["serde"] }
chrono = { version = "0.4", features = ["serde"] }
clap = { version = "4", features = ["cargo", "derive", "string", "wrap_help"] }
clap_builder = { version = "4", default-features = false, features = ["cargo", "color", "std", "string", "suggestions", "usage", "wrap_help"] }
@@ -55,6 +55,8 @@ either = { version = "1", features = ["serde", "use_std"] }
euclid = { version = "0.22" }
event-listener = { version = "5" }
event-listener-strategy = { version = "0.5" }
flate2 = { version = "1", features = ["zlib-rs"] }
foldhash = { version = "0.1" }
form_urlencoded = { version = "1" }
futures = { version = "0.3", features = ["io-compat"] }
futures-channel = { version = "0.3", features = ["sink"] }
@@ -67,7 +69,7 @@ futures-util = { version = "0.3", features = ["channel", "io-compat", "sink"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["std"] }
half = { version = "2", features = ["bytemuck", "num-traits", "rand_distr", "use-intrinsics"] }
handlebars = { version = "4", features = ["rust-embed"] }
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["serde"] }
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["rayon", "serde"] }
hashbrown-582f2526e08bb6a0 = { package = "hashbrown", version = "0.14", features = ["raw"] }
hmac = { version = "0.12", default-features = false, features = ["reset"] }
hyper = { version = "0.14", features = ["client", "http1", "http2", "runtime", "server", "stream"] }
@@ -105,6 +107,8 @@ regalloc2 = { version = "0.11", features = ["checker", "enable-serde"] }
regex = { version = "1" }
regex-automata = { version = "0.4" }
regex-syntax = { version = "0.8" }
reqwest = { version = "0.12", default-features = false, features = ["blocking", "http2", "json", "rustls-tls-native-roots", "stream"] }
ring = { version = "0.17", features = ["std"] }
rust_decimal = { version = "1", default-features = false, features = ["maths", "serde", "std"] }
rustc-hash = { version = "1" }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net"] }
@@ -129,7 +133,7 @@ thiserror = { version = "2" }
time = { version = "0.3", features = ["local-offset", "macros", "serde-well-known"] }
tokio = { version = "1", features = ["full"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["tls12"] }
tokio-util = { version = "0.7", features = ["codec", "compat", "io"] }
tokio-util = { version = "0.7", features = ["codec", "compat", "io-util", "rt"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
tracing = { version = "0.1", features = ["log"] }
@@ -167,9 +171,9 @@ bit-set = { version = "0.8", default-features = false, features = ["std"] }
bit-vec = { version = "0.8", default-features = false, features = ["std"] }
bitflags = { version = "2", default-features = false, features = ["serde", "std"] }
bstr = { version = "1" }
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc"] }
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc", "must_cast"] }
byteorder = { version = "1" }
bytes = { version = "1" }
bytes = { version = "1", features = ["serde"] }
cc = { version = "1", default-features = false, features = ["parallel"] }
chrono = { version = "0.4", features = ["serde"] }
clap = { version = "4", features = ["cargo", "derive", "string", "wrap_help"] }
@@ -185,6 +189,8 @@ either = { version = "1", features = ["serde", "use_std"] }
euclid = { version = "0.22" }
event-listener = { version = "5" }
event-listener-strategy = { version = "0.5" }
flate2 = { version = "1", features = ["zlib-rs"] }
foldhash = { version = "0.1" }
form_urlencoded = { version = "1" }
futures = { version = "0.3", features = ["io-compat"] }
futures-channel = { version = "0.3", features = ["sink"] }
@@ -197,7 +203,7 @@ futures-util = { version = "0.3", features = ["channel", "io-compat", "sink"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["std"] }
half = { version = "2", features = ["bytemuck", "num-traits", "rand_distr", "use-intrinsics"] }
handlebars = { version = "4", features = ["rust-embed"] }
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["serde"] }
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["rayon", "serde"] }
hashbrown-582f2526e08bb6a0 = { package = "hashbrown", version = "0.14", features = ["raw"] }
heck = { version = "0.4", features = ["unicode"] }
hmac = { version = "0.12", default-features = false, features = ["reset"] }
@@ -240,6 +246,8 @@ regalloc2 = { version = "0.11", features = ["checker", "enable-serde"] }
regex = { version = "1" }
regex-automata = { version = "0.4" }
regex-syntax = { version = "0.8" }
reqwest = { version = "0.12", default-features = false, features = ["blocking", "http2", "json", "rustls-tls-native-roots", "stream"] }
ring = { version = "0.17", features = ["std"] }
rust_decimal = { version = "1", default-features = false, features = ["maths", "serde", "std"] }
rustc-hash = { version = "1" }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net"] }
@@ -269,7 +277,7 @@ time = { version = "0.3", features = ["local-offset", "macros", "serde-well-know
time-macros = { version = "0.2", default-features = false, features = ["formatting", "parsing", "serde"] }
tokio = { version = "1", features = ["full"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["tls12"] }
tokio-util = { version = "0.7", features = ["codec", "compat", "io"] }
tokio-util = { version = "0.7", features = ["codec", "compat", "io-util", "rt"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
tracing = { version = "0.1", features = ["log"] }
@@ -287,8 +295,6 @@ wasmtime-environ = { version = "29", default-features = false, features = ["comp
codespan-reporting = { version = "0.12" }
core-foundation = { version = "0.9" }
core-foundation-sys = { version = "0.8" }
flate2 = { version = "1" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
@@ -301,13 +307,11 @@ objc2-foundation = { version = "0.3", default-features = false, features = ["NSA
objc2-metal = { version = "0.3" }
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -317,8 +321,6 @@ tower = { version = "0.5", default-features = false, features = ["timeout", "uti
codespan-reporting = { version = "0.12" }
core-foundation = { version = "0.9" }
core-foundation-sys = { version = "0.8" }
flate2 = { version = "1" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
@@ -332,13 +334,11 @@ objc2-metal = { version = "0.3" }
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -348,8 +348,6 @@ tower = { version = "0.5", default-features = false, features = ["timeout", "uti
codespan-reporting = { version = "0.12" }
core-foundation = { version = "0.9" }
core-foundation-sys = { version = "0.8" }
flate2 = { version = "1" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
@@ -362,13 +360,11 @@ objc2-foundation = { version = "0.3", default-features = false, features = ["NSA
objc2-metal = { version = "0.3" }
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -378,8 +374,6 @@ tower = { version = "0.5", default-features = false, features = ["timeout", "uti
codespan-reporting = { version = "0.12" }
core-foundation = { version = "0.9" }
core-foundation-sys = { version = "0.8" }
flate2 = { version = "1" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
@@ -393,13 +387,11 @@ objc2-metal = { version = "0.3" }
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -413,9 +405,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
codespan-reporting = { version = "0.12" }
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
@@ -436,13 +426,11 @@ proc-macro2 = { version = "1", features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
quote = { version = "1" }
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -460,9 +448,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
codespan-reporting = { version = "0.12" }
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
@@ -482,12 +468,10 @@ object = { version = "0.36", default-features = false, features = ["archive", "r
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -506,9 +490,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
codespan-reporting = { version = "0.12" }
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
@@ -529,13 +511,11 @@ proc-macro2 = { version = "1", features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
quote = { version = "1" }
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -553,9 +533,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
codespan-reporting = { version = "0.12" }
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
@@ -575,12 +553,10 @@ object = { version = "0.36", default-features = false, features = ["archive", "r
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -592,18 +568,14 @@ zeroize = { version = "1", features = ["zeroize_derive"] }
zvariant = { version = "5", features = ["enumflags2", "gvariant", "url"] }
[target.x86_64-pc-windows-msvc.dependencies]
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
livekit-runtime = { git = "https://github.com/zed-industries/livekit-rust-sdks", rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d" }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "fs", "net"] }
scopeguard = { version = "1" }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -618,19 +590,15 @@ windows-sys-c8eced492e86ede7 = { package = "windows-sys", version = "0.48", feat
windows-sys-d4189bed749088b6 = { package = "windows-sys", version = "0.61", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Win32_Globalization", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_IO", "Win32_System_LibraryLoader", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Shell"] }
[target.x86_64-pc-windows-msvc.build-dependencies]
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
livekit-runtime = { git = "https://github.com/zed-industries/livekit-rust-sdks", rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d" }
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "fs", "net"] }
scopeguard = { version = "1" }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -652,9 +620,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
codespan-reporting = { version = "0.12" }
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
@@ -675,13 +641,11 @@ proc-macro2 = { version = "1", features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
quote = { version = "1" }
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
@@ -699,9 +663,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
codespan-reporting = { version = "0.12" }
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
flate2 = { version = "1" }
flume = { version = "0.11" }
foldhash = { version = "0.1", default-features = false, features = ["std"] }
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
@@ -721,12 +683,10 @@ object = { version = "0.36", default-features = false, features = ["archive", "r
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }