use std::fs::File;
use std::io;
use std::io::{BufRead, BufReader};
use std::time;
use anyhow::Result;
use clap::Parser;
use ct2rs::{Config, Device, Translator};
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
#[arg(short, long, value_name = "FILE", default_value = "prompt.txt")]
prompt: String,
#[arg(short, long)]
cuda: bool,
path: String,
}
fn main() -> Result<()> {
let args = Args::parse();
let cfg = if args.cuda {
Config {
device: Device::CUDA,
device_indices: vec![0],
..Config::default()
}
} else {
Config::default()
};
let t = Translator::new(&args.path, &cfg)?;
let sources = BufReader::new(File::open(args.prompt)?)
.lines()
.collect::<std::result::Result<Vec<String>, io::Error>>()?;
let now = time::Instant::now();
let res = t.translate_batch(&sources, &Default::default(), None)?;
let elapsed = now.elapsed();
for (r, _) in res {
println!("{r}");
}
println!("Time taken: {elapsed:?}");
Ok(())
}