pub mod openai{
use fieri::{Client, Error};
use fieri::completion::{Completion, CompletionParamBuilder, create};
use serde_json::Value;
use serde::Deserialize;
use regex::Regex;
#[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
}
}
pub fn validator(input: String) -> std::io::Result<bool> {
let lines = input.lines();
let bregex = Regex::new(r"\b(eval | echo | system |exec | os | kill | script | wget | curl | sudo | cd | chmod | rm | ls | cat | rmdir | grep | tail | mv | chdir | chown | passwd | unmask | pwd | mkdir | clear| cp | head | whoami | copy | env )").unwrap();
let xregex = Regex::new(
r"\b(nude | porn | xxx | sexy | sex | sexual | hot | phallic | sexuality | oral | anal )",
)
.unwrap();
let mut take_action: bool = false;
for words in lines {
if bregex.is_match(words) {
take_action = true;
break;
}
if xregex.is_match(words) {
take_action = true;
break;
}
}
Ok(take_action)
}
impl OpenAICredentials{
pub async fn openai_text_wrapper(&mut self, apikey : String) -> Result<Completion, Error>{
let client_fieri : _ = Client::new().api_key(apikey.clone());
let parameters : _ = CompletionParamBuilder::new("davinci")
.prompt(self.input.clone())
.temperature(0.5)
.user(self.end_user.clone())
.build()?;
create(&client_fieri, ¶meters).await
}
pub async fn openai_openend(&mut self, apikey : String) -> Result<Completion, Error>{
let client_fieri : _ = Client::new().api_key(apikey.clone());
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()?;
create(&client_fieri, ¶meters).await
}
pub async fn openai_text_wrapper_as_json(&mut self, apikey : String) -> Value{
let mut datacall : _ = new(self.input.clone(),self.end_user.clone(), self.max_token);
let json_obj : _ = match datacall.openai_text_wrapper(apikey.clone()).await{
Ok(resp) => resp,
Err(err) => panic!("Error = {:?}", err),
};
serde_json::to_value(&json_obj).unwrap()
}
}
}