pub mod openai{
use fieri::{Client, Error};
use fieri::completion::{Completion, CompletionParamBuilder, create};
use serde_json::{Value};
use serde::{Deserialize};
#[derive(Debug, Deserialize)]
pub struct OpenAICredentials{
pub input : String, pub end_user : String, max_token : i32, }
pub fn new(input : String, end_user : String, max_token : i32) -> OpenAICredentials{
OpenAICredentials{
input,
end_user,
max_token
}
}
impl OpenAICredentials{
pub async fn openai_text_wrapper<'a>(&mut self, apikey : &'static str) -> Result<Completion, Error>{
let client_fieri : _ = Client::new().api_key(apikey);
let parameters : _ = CompletionParamBuilder::new("davinci")
.prompt(self.input.clone())
.temperature(0.5)
.user(self.end_user.clone())
.build()?;
let response : _ = create(&client_fieri, ¶meters);
response.await
}
pub async fn openai_openend<'a>(&mut self, apikey : &'static str) -> Result<Completion, Error>{
let client_fieri : _ = Client::new().api_key(apikey);
let parameters : _ = CompletionParamBuilder::new("text-Davinci-003")
.prompt(self.input.clone())
.top_p(0.92)
.max_tokens(self.max_token)
.temperature(0.5)
.frequency_penalty(0.5)
.presence_penalty(0.5)
.user(self.end_user.clone())
.build()?;
let response : _ = create(&client_fieri, ¶meters);
response.await
}
pub async fn openai_text_wrapper_as_json<'a>(&mut self, apikey : &'static str) -> Value{
let mut datacall : _ = new(self.input.clone(),self.end_user.clone(), self.max_token);
let json_obj : _ = match datacall.openai_text_wrapper(apikey).await{
Ok(resp) => resp,
Err(err) => panic!("Error = {:?}", err),
};
serde_json::to_value(&json_obj).unwrap()
}
}
}