use allama::ChatCapability;
use allama::extract::Extracted;
use allama::mock::MockProvider;
use allama::prelude::*;
use allama::schemars::{self, JsonSchema};
use serde::Deserialize;
#[derive(Debug, Deserialize, JsonSchema)]
struct Review {
title: String,
rating: u8,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let provider = MockProvider::with_text(r#"{"title":"Dune","rating":9}"#)
.with_supported_chat_capabilities([ChatCapability::StructuredOutput]);
let request = ChatRequest::new("demo-model")
.system("Extract a review as structured data.")
.user("Dune is atmospheric and deserves a 9 out of 10.");
let extracted: Extracted<Review> = provider.extract(&request).await?;
println!("title: {}", extracted.value.title);
println!("rating: {}", extracted.value.rating);
println!(
"mode: {:?}, passes: {}, usage: {:?}",
extracted.metadata.mode, extracted.metadata.passes, extracted.metadata.usage
);
println!(
"enforcement: {:?}, degradations: {:?}",
extracted.metadata.enforcement, extracted.metadata.degradations
);
Ok(())
}