diff --git a/Cargo.lock b/Cargo.lock index 723ed809..defec0b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -316,15 +316,6 @@ dependencies = [ "object", ] -[[package]] -name = "arc-swap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" -dependencies = [ - "rustversion", -] - [[package]] name = "ascii" version = "1.1.0" @@ -422,29 +413,6 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" -[[package]] -name = "aws-lc-rs" -version = "1.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faac5829c2b74c28f830747e7818ccfb684261b5f48a1118b1e2a13d36dfab13" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1622d8446a2d4b2ce0c7eefc73dd43a99779028d5ee5c2dd8073a658ba8a2bc" -dependencies = [ - "cc", - "cmake", - "dunce", - "fs_extra", - "pkg-config", -] - [[package]] name = "backoff" version = "0.4.0" @@ -477,12 +445,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" - [[package]] name = "better_scoped_tls" version = "1.0.1" @@ -574,25 +536,23 @@ dependencies = [ [[package]] name = "braintrust-sdk-rust" version = "0.1.0-alpha.2" -source = "git+https://github.com/braintrustdata/braintrust-sdk-rust?rev=45a2c88ca9d9ccc393ec0338ac438199fc3c5df2#45a2c88ca9d9ccc393ec0338ac438199fc3c5df2" +source = "git+https://github.com/braintrustdata/braintrust-sdk-rust?rev=76fe249e7103876567c61bb72cc08505fef0a68e#76fe249e7103876567c61bb72cc08505fef0a68e" dependencies = [ "anyhow", - "arc-swap", "async-trait", "backoff", - "base64 0.23.1", + "base64 0.22.1", "bon", "bytes", "chrono", - "crossbeam", "futures", "indexmap 2.14.0", "regex", - "reqwest 0.13.5", + "reqwest", "serde", "serde_json 1.0.151", "serde_repr", - "thiserror 2.0.19", + "thiserror 1.0.69", "tokio", "tracing", "url", @@ -674,7 +634,7 @@ dependencies = [ "predicates", "ratatui", "regex", - "reqwest 0.12.28", + "reqwest", "serde", "serde_json 1.0.151", "serde_path_to_error", @@ -704,7 +664,7 @@ dependencies = [ [[package]] name = "bt-daemon" version = "0.1.0" -source = "git+https://github.com/braintrustdata/braintrust-coding-agent-plugins?rev=531c25e65f465446a1570b85d7741744faf0cd04#531c25e65f465446a1570b85d7741744faf0cd04" +source = "git+https://github.com/braintrustdata/braintrust-coding-agent-plugins?rev=fd29bc2ba0a6f73a5547d90e75d5e7ec9e230751#fd29bc2ba0a6f73a5547d90e75d5e7ec9e230751" dependencies = [ "anyhow", "async-trait", @@ -876,31 +836,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" -[[package]] -name = "cmake" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" -dependencies = [ - "cc", -] - [[package]] name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" -[[package]] -name = "combine" -version = "4.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92" -dependencies = [ - "bytes", - "memchr", -] - [[package]] name = "comfy-table" version = "7.2.2" @@ -1059,56 +1000,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" -[[package]] -name = "crossbeam" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.22" @@ -1554,12 +1445,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - [[package]] name = "futures" version = "0.3.33" @@ -2217,55 +2102,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys", - "log", - "simd_cesu8", - "thiserror 2.0.19", - "walkdir", - "windows-link", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn 2.0.119", -] - -[[package]] -name = "jni-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] - -[[package]] -name = "jni-sys-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" -dependencies = [ - "quote", - "syn 2.0.119", -] - [[package]] name = "jobserver" version = "0.1.35" @@ -2378,7 +2214,7 @@ dependencies = [ "pbjson-types", "prost", "prost-types", - "reqwest 0.12.28", + "reqwest", "serde", "serde-wasm-bindgen", "serde_json 1.0.151", @@ -3161,7 +2997,6 @@ version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ - "aws-lc-rs", "bytes", "getrandom 0.4.3", "lru-slab", @@ -3475,45 +3310,6 @@ dependencies = [ "base64 0.22.1", "bytes", "futures-core", - "http 1.5.0", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-native-certs", - "rustls-pki-types", - "serde", - "serde_json 1.0.151", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", -] - -[[package]] -name = "reqwest" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" -dependencies = [ - "base64 0.23.1", - "bytes", - "futures-core", "futures-util", "http 1.5.0", "http-body", @@ -3528,10 +3324,11 @@ dependencies = [ "pin-project-lite", "quinn", "rustls", + "rustls-native-certs", "rustls-pki-types", - "rustls-platform-verifier", "serde", "serde_json 1.0.151", + "serde_urlencoded", "sync_wrapper", "tokio", "tokio-rustls", @@ -3544,6 +3341,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", + "webpki-roots", ] [[package]] @@ -3660,7 +3458,6 @@ version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ - "aws-lc-rs", "once_cell", "ring", "rustls-pki-types", @@ -3691,40 +3488,12 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-platform-verifier" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1167586491e2b18b8bfbb293e8180ec17c201c4f076d7cb3070ca964e7598f98" -dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eec689c0bc40ff2458a5977b6619cb718087084a18e02a131c599b62d05e1a5f" - [[package]] name = "rustls-webpki" version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ - "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -3742,15 +3511,6 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "schannel" version = "0.1.29" @@ -4082,22 +3842,6 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" -[[package]] -name = "simd_cesu8" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" -dependencies = [ - "rustc_version", - "simdutf8", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "siphasher" version = "0.3.11" @@ -5292,16 +5036,6 @@ dependencies = [ "libc", ] -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -5383,9 +5117,9 @@ dependencies = [ [[package]] name = "wasm-streams" -version = "0.5.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -5414,15 +5148,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-root-certs" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ec80e73fd8baf57bf0d9615554c75348bda990d6d5bbeab964dd068319fecb" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "webpki-roots" version = "1.0.10" diff --git a/Cargo.toml b/Cargo.toml index 9339b08d..12988ca5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,8 @@ eula = false actix-web = "4.11.0" anyhow = "1.0.89" backoff = { version = "0.4.0", features = ["tokio"] } -braintrust-sdk-rust = { git = "https://github.com/braintrustdata/braintrust-sdk-rust", rev = "45a2c88ca9d9ccc393ec0338ac438199fc3c5df2" } -bt-daemon = { git = "https://github.com/braintrustdata/braintrust-coding-agent-plugins", rev = "531c25e65f465446a1570b85d7741744faf0cd04" } +braintrust-sdk-rust = { git = "https://github.com/braintrustdata/braintrust-sdk-rust", rev = "76fe249e7103876567c61bb72cc08505fef0a68e" } +bt-daemon = { git = "https://github.com/braintrustdata/braintrust-coding-agent-plugins", rev = "fd29bc2ba0a6f73a5547d90e75d5e7ec9e230751" } async-trait = "0.1" clap = { version = "4.5.20", features = ["derive", "env"] } crossterm = "0.28.1" diff --git a/src/datasets/utils.rs b/src/datasets/utils.rs index 0208677e..80c10b39 100644 --- a/src/datasets/utils.rs +++ b/src/datasets/utils.rs @@ -1,7 +1,7 @@ use std::time::Duration; use anyhow::{anyhow, Result}; -use braintrust_sdk_rust::Logs3BatchUploader; +use braintrust_sdk_rust::{api::Config, ingest::BatchUploader}; use serde_json::{Map, Value}; use crate::ui::with_spinner_visible; @@ -32,12 +32,12 @@ pub(crate) async fn submit_rows( spinner_label: &str, error_context: &str, ) -> Result<()> { - let mut uploader = dataset_uploader(ctx)?; + let uploader = dataset_uploader(ctx)?; with_spinner_visible( spinner_label, async { uploader - .upload_rows(rows, DATASET_UPLOAD_BATCH_SIZE) + .upload_rows(rows.to_vec(), DATASET_UPLOAD_BATCH_SIZE) .await .map_err(|err| anyhow!("{error_context}: {err}")) }, @@ -47,11 +47,11 @@ pub(crate) async fn submit_rows( Ok(()) } -fn dataset_uploader(ctx: &ResolvedContext) -> Result { - Logs3BatchUploader::new( - ctx.client.base_url(), - ctx.client.api_key().to_string(), - (!ctx.client.org_name().trim().is_empty()).then_some(ctx.client.org_name().to_string()), - ) - .map_err(|err| anyhow!("failed to initialize dataset uploader: {err}")) +fn dataset_uploader(ctx: &ResolvedContext) -> Result { + let mut config = Config::new(ctx.client.api_key().to_string()); + config.api_url = ctx.client.base_url().to_string(); + config.org_name = + (!ctx.client.org_name().trim().is_empty()).then_some(ctx.client.org_name().to_string()); + BatchUploader::new(config) + .map_err(|err| anyhow!("failed to initialize dataset uploader: {err}")) } diff --git a/src/main.rs b/src/main.rs index 4b0afc44..6859ff6f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -560,7 +560,9 @@ fn classify_sdk_error(err: &anyhow::Error) -> Option { braintrust_sdk_rust::BraintrustError::InvalidConfig(_) | braintrust_sdk_rust::BraintrustError::ChannelClosed | braintrust_sdk_rust::BraintrustError::Background(_) - | braintrust_sdk_rust::BraintrustError::StreamAggregation(_) => None, + | braintrust_sdk_rust::BraintrustError::StreamAggregation(_) + | braintrust_sdk_rust::BraintrustError::Execution(_) + | braintrust_sdk_rust::BraintrustError::Admission(_) => None, } } diff --git a/src/sync.rs b/src/sync.rs index 11a98baa..d6b482f5 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -11,7 +11,7 @@ use anyhow::{anyhow, bail, Context, Result}; use backoff::future::retry_notify; use backoff::{Error as BackoffError, ExponentialBackoffBuilder}; use base64::prelude::{Engine as _, BASE64_STANDARD}; -use braintrust_sdk_rust::Logs3BatchUploader; +use braintrust_sdk_rust::{api::Config as IngestConfig, ingest::BatchUploader}; use clap::{Args, Subcommand, ValueEnum}; use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; use serde::de::DeserializeOwned; @@ -1790,16 +1790,18 @@ async fn run_push( } }); - let uploader_template = Logs3BatchUploader::new( - ctx.api_url.clone(), + let mut ingest_config = IngestConfig::new( ctx.login .api_key() .context("login state missing API key for sync uploader")?, - ctx.login - .org_name() - .filter(|org_name| !org_name.trim().is_empty()), - ) - .context("failed to initialize logs3 uploader")?; + ); + ingest_config.api_url = ctx.api_url.clone(); + ingest_config.org_name = ctx + .login + .org_name() + .filter(|org_name| !org_name.trim().is_empty()); + let uploader_template = + BatchUploader::new(ingest_config).context("failed to initialize logs3 uploader")?; let mut batch: Vec> = Vec::with_capacity(args.page_size); let mut seen_roots: HashSet = if state.line_offset > 0 { @@ -2861,12 +2863,12 @@ fn build_time_filter_clause(window: &str, extra_filter: Option<&str>) -> Result< } async fn submit_logs_batch( - uploader: &mut Logs3BatchUploader, + uploader: &BatchUploader, rows: &[Map], page_size: usize, ) -> Result { let result = uploader - .upload_rows(rows, page_size) + .upload_rows(rows.to_vec(), page_size) .await .map_err(|err| anyhow!("logs3 upload failed: {err}"))?; Ok(result.bytes_processed) @@ -2874,12 +2876,12 @@ async fn submit_logs_batch( fn spawn_push_upload_task( join_set: &mut tokio::task::JoinSet>, - mut uploader: Logs3BatchUploader, + uploader: BatchUploader, work: PushBatchWork, page_size: usize, ) { join_set.spawn(async move { - let bytes = submit_logs_batch(&mut uploader, &work.rows, page_size).await?; + let bytes = submit_logs_batch(&uploader, &work.rows, page_size).await?; Ok(PushBatchResult { batch_index: work.batch_index, row_count: work.rows.len(),