From e8a33312bb0f0b6b1d17a914021ebf8d2afc26fe Mon Sep 17 00:00:00 2001 From: Meng Zhang Date: Mon, 5 Jun 2023 11:40:24 -0700 Subject: [PATCH] refactor: extract download into tabby-download (#195) * refactor: extract download into tabby-download * remove unused deps --- Cargo.lock | 39 +++++++------------ Cargo.toml | 1 + crates/tabby-download/Cargo.toml | 13 +++++++ .../src}/cache_info.rs | 0 .../mod.rs => tabby-download/src/lib.rs} | 18 --------- crates/tabby/Cargo.toml | 7 +--- crates/tabby/src/download.rs | 18 +++++++++ crates/tabby/src/serve/mod.rs | 2 +- 8 files changed, 48 insertions(+), 50 deletions(-) create mode 100644 crates/tabby-download/Cargo.toml rename crates/{tabby/src/download => tabby-download/src}/cache_info.rs (100%) rename crates/{tabby/src/download/mod.rs => tabby-download/src/lib.rs} (89%) create mode 100644 crates/tabby/src/download.rs diff --git a/Cargo.lock b/Cargo.lock index 98f7a0b..e7ba231 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -691,19 +691,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - [[package]] name = "errno" version = "0.3.1" @@ -1012,12 +999,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "0.14.26" @@ -2253,19 +2234,13 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" name = "tabby" version = "0.1.0" dependencies = [ - "anyhow", "axum", "clap", "ctranslate2-bindings", - "env_logger", - "futures-util", "hyper", - "indicatif 0.17.3", "lazy_static", - "log", "mime_guess", "regex", - "reqwest", "rust-embed", "serde", "serde_json", @@ -2273,6 +2248,7 @@ dependencies = [ "strfmt", "strum", "tabby-common", + "tabby-download", "tabby-scheduler", "tokio", "tower", @@ -2294,6 +2270,19 @@ dependencies = [ "serdeconv", ] +[[package]] +name = "tabby-download" +version = "0.1.0" +dependencies = [ + "anyhow", + "futures-util", + "indicatif 0.17.3", + "reqwest", + "serde", + "serdeconv", + "tabby-common", +] + [[package]] name = "tabby-scheduler" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index bf9c917..e8994c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ members = [ "crates/tabby", "crates/tabby-common", "crates/tabby-scheduler", + "crates/tabby-download", "crates/ctranslate2-bindings", "crates/rust-cxx-cmake-bridge", ] diff --git a/crates/tabby-download/Cargo.toml b/crates/tabby-download/Cargo.toml new file mode 100644 index 0000000..68d9e12 --- /dev/null +++ b/crates/tabby-download/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "tabby-download" +version = "0.1.0" +edition = "2021" + +[dependencies] +tabby-common = { path = "../tabby-common" } +indicatif = "0.17.3" +futures-util = "0.3.28" +reqwest = { version = "0.11.18", features = ["stream", "json"] } +anyhow = "1.0.71" +serde = { workspace = true } +serdeconv = { workspace = true } diff --git a/crates/tabby/src/download/cache_info.rs b/crates/tabby-download/src/cache_info.rs similarity index 100% rename from crates/tabby/src/download/cache_info.rs rename to crates/tabby-download/src/cache_info.rs diff --git a/crates/tabby/src/download/mod.rs b/crates/tabby-download/src/lib.rs similarity index 89% rename from crates/tabby/src/download/mod.rs rename to crates/tabby-download/src/lib.rs index b4a6c18..7bdb054 100644 --- a/crates/tabby/src/download/mod.rs +++ b/crates/tabby-download/src/lib.rs @@ -4,31 +4,13 @@ use std::cmp; use std::fs; use std::io::Write; use std::path::Path; -use tracing::info; -use clap::Args; use futures_util::StreamExt; use indicatif::{ProgressBar, ProgressStyle}; use tabby_common::path::ModelDir; use cache_info::CacheInfo; -#[derive(Args)] -pub struct DownloadArgs { - /// model id to fetch. - #[clap(long)] - model: String, - - /// If true, skip checking for remote model file. - #[clap(long, default_value_t = false)] - prefer_local_file: bool, -} - -pub async fn main(args: &DownloadArgs) { - download_model(&args.model, args.prefer_local_file).await; - info!("model '{}' is ready", args.model); -} - impl CacheInfo { async fn download(&mut self, model_id: &str, path: &str, prefer_local_file: bool) { // Create url. diff --git a/crates/tabby/Cargo.toml b/crates/tabby/Cargo.toml index 5e960f6..19b2abf 100644 --- a/crates/tabby/Cargo.toml +++ b/crates/tabby/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" ctranslate2-bindings = { path = "../ctranslate2-bindings" } tabby-common = { path = "../tabby-common" } tabby-scheduler = { path = "../tabby-scheduler" } +tabby-download = { path = "../tabby-download" } axum = "0.6" hyper = { version = "0.14", features = ["full"] } tokio = { workspace = true, features = ["full"] } @@ -16,8 +17,6 @@ utoipa-swagger-ui = { version = "3.1", features = ["axum"] } serde = { workspace = true } serdeconv = { workspace = true } serde_json = "1.0" -env_logger = "0.10.0" -log = "0.4" tower-http = { version = "0.4.0", features = ["cors"] } clap = { version = "4.3.0", features = ["derive"] } regex = "1.8.3" @@ -25,10 +24,6 @@ lazy_static = { workspace = true } rust-embed = "6.6.1" mime_guess = "2.0.4" strum = { version = "0.24", features = ["derive"] } -reqwest = { version = "0.11.18", features = ["stream", "json"] } -indicatif = "0.17.3" -futures-util = "0.3.28" -anyhow = "1.0.71" strfmt = "0.2.4" tracing = { workspace = true } tracing-subscriber = { workspace = true } diff --git a/crates/tabby/src/download.rs b/crates/tabby/src/download.rs new file mode 100644 index 0000000..d154f25 --- /dev/null +++ b/crates/tabby/src/download.rs @@ -0,0 +1,18 @@ +use clap::Args; +use tracing::info; + +#[derive(Args)] +pub struct DownloadArgs { + /// model id to fetch. + #[clap(long)] + model: String, + + /// If true, skip checking for remote model file. + #[clap(long, default_value_t = false)] + prefer_local_file: bool, +} + +pub async fn main(args: &DownloadArgs) { + tabby_download::download_model(&args.model, args.prefer_local_file).await; + info!("model '{}' is ready", args.model); +} diff --git a/crates/tabby/src/serve/mod.rs b/crates/tabby/src/serve/mod.rs index a56d4d2..4eeede2 100644 --- a/crates/tabby/src/serve/mod.rs +++ b/crates/tabby/src/serve/mod.rs @@ -66,7 +66,7 @@ pub async fn main(args: &ServeArgs) { valid_args(args); // Ensure model exists. - crate::download::download_model(&args.model, true).await; + tabby_download::download_model(&args.model, true).await; let app = Router::new() .merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", ApiDoc::openapi()))