use fm_rs::{GenerationOptions, Session, SystemLanguageModel};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("FoundationModels Rust Example");
println!("==============================\n");
println!("Creating default system language model...");
let model = SystemLanguageModel::new()?;
println!("Checking availability...");
if !model.is_available() {
println!("FoundationModels is not available on this device.");
println!("This could be because:");
println!(" - Your device doesn't support Apple Intelligence");
println!(" - Apple Intelligence is not enabled in settings");
println!(" - The model hasn't finished downloading");
return Ok(());
}
println!("Model is available!");
println!("Availability status: {:?}\n", model.availability());
println!("Creating a session with instructions...");
let session = Session::with_instructions(
&model,
"You are a helpful assistant that provides concise, accurate answers.",
)?;
println!("Creating generation options...");
let options = GenerationOptions::builder()
.temperature(0.7)
.max_response_tokens(500)
.build();
println!("\n--- Example 1: Simple Question ---");
let prompt = "What is the capital of France? Answer in one sentence.";
println!("Prompt: {prompt}");
let response = session.respond(prompt, &options)?;
println!("Response: {}\n", response.content());
println!("--- Example 2: Creative Writing ---");
let prompt = "Write a haiku about programming.";
println!("Prompt: {prompt}");
let response = session.respond(prompt, &options)?;
println!("Response: {}", response.content());
println!("\n--- Example 3: Ask about weather ---");
let prompt = "What should I wear today for a walk in the park?";
println!("Prompt: {prompt}");
let response = session.respond(prompt, &options)?;
println!("Response: {}", response.content());
println!("\n==============================");
println!("Example completed successfully!");
Ok(())
}