1use std::collections::HashMap;
2
3use rig::client::{CompletionClient, ProviderClient};
4use rig::completion::Prompt;
5use rig_openapi_tools::OpenApiToolset;
6
7#[tokio::main]
8async fn main() -> anyhow::Result<()> {
9 let openai = rig::providers::openai::Client::from_env();
10
11 let toolset = OpenApiToolset::builder_from_file("examples/petstore.json")?
13 .base_url("https://petstore3.swagger.io/api/v3")
14 .build()?;
15
16 println!("Loaded {} tools from Petstore spec\n", toolset.len());
17
18 let visible_ctx = HashMap::from([
20 ("username".to_string(), "user1".to_string()),
21 ("preferred_status".to_string(), "available".to_string()),
22 ]);
23 let context_preamble = OpenApiToolset::context_preamble(&visible_ctx);
24
25 let preamble = format!(
26 "You have access to the Swagger Petstore API. \
27 Use the available tools to answer questions about the pet store.\n\n\
28 {context_preamble}"
29 );
30
31 let agent = openai
33 .agent("gpt-4o")
34 .preamble(&preamble)
35 .tools(toolset.tools_with_context(&HashMap::new()))
36 .build();
37
38 let prompts = [
39 "What pets are currently available in the store? Show me the first 3.",
40 "Get the store inventory and tell me the status counts.",
41 "Look up my user profile and summarize it.",
42 ];
43
44 for prompt in prompts {
45 println!(">>> {prompt}");
46 let response: String = agent.prompt(prompt).await?;
47 println!("{response}\n");
48 }
49
50 Ok(())
51}