Switch from openai to async-openai crate
This commit is contained in:
parent
ec66822602
commit
ddaf3ee7f2
4 changed files with 171 additions and 39 deletions
|
@ -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 =
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue