mirror of https://github.com/0xplaygrounds/rig
32 lines
934 B
Rust
32 lines
934 B
Rust
use rig::providers::openai;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Debug, Deserialize, JsonSchema, Serialize)]
|
|
/// A record representing a person
|
|
struct Person {
|
|
/// The person's first name, if provided (null otherwise)
|
|
pub first_name: Option<String>,
|
|
/// The person's last name, if provided (null otherwise)
|
|
pub last_name: Option<String>,
|
|
/// The person's job, if provided (null otherwise)
|
|
pub job: Option<String>,
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), anyhow::Error> {
|
|
// Create OpenAI client
|
|
let openai_client = openai::Client::from_env();
|
|
|
|
// Create extractor
|
|
let data_extractor = openai_client.extractor::<Person>("gpt-4").build();
|
|
|
|
let person = data_extractor
|
|
.extract("Hello my name is John Doe! I am a software engineer.")
|
|
.await?;
|
|
|
|
println!("GPT-4: {}", serde_json::to_string_pretty(&person).unwrap());
|
|
|
|
Ok(())
|
|
}
|