Skip to main content

custom_logging/
main.rs

1use anyhow::Result;
2use mistralrs::{IsqType, TextMessageRole, TextMessages, VisionModelBuilder};
3use std::fs;
4use std::fs::OpenOptions;
5use tracing::info;
6use tracing::level_filters::LevelFilter;
7use tracing_subscriber::EnvFilter;
8
9const LOG_FILE: &str = "custom_logging.log";
10
11fn init_logging(log_file: &str) {
12    let _ = fs::remove_file(log_file);
13    let path = log_file.to_owned();
14    let writer = move || {
15        OpenOptions::new()
16            .create(true)
17            .append(true)
18            .open(&path)
19            .expect("failed to open log file")
20    };
21
22    let filter = EnvFilter::builder()
23        .with_default_directive(LevelFilter::INFO.into())
24        .from_env_lossy()
25        .add_directive("mistralrs_core=debug".parse().unwrap());
26
27    tracing_subscriber::fmt()
28        .with_env_filter(filter)
29        .with_target(false)
30        .with_writer(writer)
31        .try_init()
32        .expect("subscriber installed only once");
33}
34
35#[tokio::main]
36async fn main() -> Result<()> {
37    init_logging(LOG_FILE);
38    info!("Custom subscriber installed; writing logs to {LOG_FILE}");
39
40    let model = VisionModelBuilder::new("google/gemma-3-4b-it")
41        .with_isq(IsqType::Q4K)
42        // NOTE: deliberately skip `.with_logging()` so only our subscriber runs.
43        .build()
44        .await?;
45
46    let messages = TextMessages::new()
47        .add_message(
48            TextMessageRole::System,
49            "You describe locations succinctly.",
50        )
51        .add_message(
52            TextMessageRole::User,
53            "Give me two sentences about the Mount Washington summit weather.",
54        );
55
56    let response = model.send_chat_request(messages).await?;
57    let answer = response.choices[0].message.content.as_ref().unwrap();
58    println!("Model response:\n{answer}");
59
60    info!("Completed inference run.");
61
62    let captured_logs = fs::read_to_string(LOG_FILE)?;
63    println!("\n--- Captured mistral.rs logs ---\n{captured_logs}");
64
65    Ok(())
66}