Switch from openai to async-openai crate

This commit is contained in:
Alex Page 2024-01-25 18:28:28 -05:00
parent ec66822602
commit ddaf3ee7f2
4 changed files with 171 additions and 39 deletions

View file

@ -51,6 +51,10 @@ async fn main() -> Result<()> {
.with(EnvFilter::from_default_env())
.init();
env::var("OPENAI_API_KEY")
.expect("Expected an OpenAI API key in the environment: OPENAI_API_KEY");
// OLD
set_key(env::var("OPENAI_KEY").expect("Expected an OpenAI key in the environment: OPENAI_KEY"));
let token =

View file

@ -1,5 +1,9 @@
use anyhow::{Context, Result};
use openai::chat::{ChatCompletion, ChatCompletionMessage};
use async_openai::types::{
ChatCompletionRequestAssistantMessageArgs, ChatCompletionRequestMessage,
ChatCompletionRequestSystemMessageArgs, ChatCompletionRequestUserMessageArgs,
CreateChatCompletionRequestArgs,
};
use rand::seq::SliceRandom;
const LOADING_MESSAGES: [&str; 20] = [
@ -53,48 +57,52 @@ pub async fn get_sassy_commentary(title: &str) -> Result<String> {
let prompt = format!("Play \"{title}\"");
let completion = ChatCompletion::builder(
"gpt-4",
[
system
.into_iter()
.map(|s| ChatCompletionMessage {
role: openai::chat::ChatCompletionMessageRole::System,
content: String::from(s),
name: None,
})
.collect::<Vec<_>>(),
vec![
ChatCompletionMessage {
role: openai::chat::ChatCompletionMessageRole::User,
content: String::from(example_prompt),
name: None,
},
ChatCompletionMessage {
role: openai::chat::ChatCompletionMessageRole::Assistant,
content: String::from(example_response),
name: None,
},
ChatCompletionMessage {
role: openai::chat::ChatCompletionMessageRole::User,
content: prompt,
name: None,
},
],
]
.into_iter()
.flatten()
.collect::<Vec<_>>(),
)
.max_tokens(2048_u64)
.create()
.await??;
let client = async_openai::Client::new();
Ok(completion
let request = CreateChatCompletionRequestArgs::default()
.model("gpt-4")
.messages(
[
system
.into_iter()
.map(|s| {
ChatCompletionRequestSystemMessageArgs::default()
.content(s)
.build()
.unwrap()
.into()
})
.collect::<Vec<ChatCompletionRequestMessage>>(),
vec![
ChatCompletionRequestUserMessageArgs::default()
.content(example_prompt)
.build()?
.into(),
ChatCompletionRequestAssistantMessageArgs::default()
.content(example_response)
.build()?
.into(),
ChatCompletionRequestUserMessageArgs::default()
.content(prompt)
.build()?
.into(),
],
]
.into_iter()
.flatten()
.collect::<Vec<_>>(),
)
.max_tokens(2048_u16)
.build()?;
let response = client.chat().create(request).await?;
response
.choices
.first()
.context("No choices")?
.message
.content
.clone())
.clone()
.context("No content")
}