//! This example demonstrates how to use the `create_a_message` API with builder pattern. //! //! ```shell //! $ cargo run --example create_a_message_with_builder -- -p <prompt> -m <message> //! ``` //! //! e.g. //! ```shell //! $ cargo run --example create_a_message_with_builder -- -p "You are a excellent AI assistant." -m "Where is the capital of Japan?" //! ``` use std::time::Duration; use clap::Parser; use clust::messages::ClaudeModel; use clust::messages::Message; use clust::messages::MessagesRequestBuilder; use clust::messages::SystemPrompt; use clust::ApiKey; use clust::ClientBuilder; #[derive(Parser)] struct Arguments { #[arg(short, long)] prompt: String, #[arg(short, long)] message: String, } #[tokio::main] async fn main() -> anyhow::Result<()> { // 0. Parse the command-line arguments. let arguments = Arguments::parse(); // 1. Create a new API client with builder pattern. let client = ClientBuilder::new(ApiKey::from_env()?) .version(clust::Version::V2023_06_01) // Custom API version .client( reqwest::ClientBuilder::new() .timeout(Duration::from_secs(30)) .build()?, ) // Custom reqwest client .build(); // 2. Create a request body with builder pattern. let request_body = MessagesRequestBuilder::new_with_max_tokens( ClaudeModel::Claude3Haiku20240307, 1024, )? .messages(vec![Message::user( arguments.message, )]) .system(SystemPrompt::new(arguments.prompt)) .build(); // 3. Call the API. let response = client .create_a_message(request_body) .await?; println!("Result:\n{}", response); // 4. Use the text content. println!( "Content: {}", response .content .flatten_into_text()? ); Ok(()) }