opex-ai
Version:
AI tools: rewriter, summarizer, text generator, chat with ai, image classifier
474 lines (410 loc) • 8.86 kB
JavaScript
var req = require('request-promise');
var sql, res, data;
var log=(t)=>{console.log(t)}
class SQLite3Chat{
constructor(db,bot_name="Орех"){
this.db = db,
this.bot_name = bot_name,
this.query = (sql) => {
return this.db.prepare(sql)
},
this.createChatTable = () => {
sql = `
CREATE TABLE
IF NOT EXISTS
aichat (
id BIGINT,
msg TEXT,
date BIGINT
)
`
return this.query(sql).run()
}
this.createChatTable()
}
unix() {
return Math.round((new Date()).getTime() / 1000);
}
tables(sys=false) {
if(sys==false){
return query(`SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;`).all()
} else {
return query('PRAGMA table_list').all();
}
}
getAllMessages(id="123456"){
sql = `
SELECT msg
FROM aichat
WHERE id = ${id}`
var out = this.query(sql).all()
var out = out.map((el)=>{
return el.msg.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",this.bot_name)
})
return out
}
addMsg(msg,id="123456"){
var msg = msg.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",this.bot_name)
sql = `
INSERT INTO
aichat (id,msg,date)
VALUES
(${id},?,${this.unix()})
`
return this.query(sql).run(msg)
}
async sendToAi(history){
try{
var url = "https://api.aicloud.sbercloud.ru/public/v2/boltalka/predict";
var headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
var data = {
"instances": [
{
"contexts": [
history
]
}
]
}
var options = {
uri: url,
method: 'POST',
body: data,
headers: headers,
json: true
};
var out = await req.post(options)
return out.responses.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",this.bot_name)
} catch (e){
return e
}
}
async sendMessage(message,id="123456") {
this.addMsg(message,id)
var history = this.getAllMessages(id)
var airesp = await this.sendToAi(history)
this.addMsg(airesp,id)
return airesp
}
deleteData(id="123456"){
sql = `
DELETE FROM
aichat
`
if(id!="all"){
sql = sql + `WHERE id = ${id}`
}
return this.query(sql).run()
}
}
class MySQLChat{
constructor(db,bot_name="Орех"){
this.db = db,
this.bot_name = bot_name
this.query = async (sql) => {
return await this.db.query(sql)
}
this.createChatTable = async () => {
sql = `
CREATE TABLE
IF NOT EXISTS
aichat (
id BIGINT,
msg TEXT,
date BIGINT
)
`
return await this.query(sql)
}
(async()=>{
this.createChatTable()
})()
}
base64encode(string){
var bufferObj = Buffer.from(string, "utf8");
var code = bufferObj.toString("base64");
return code
}
base64decode(string){
var b = Buffer.from(string, 'base64')
var s = b.toString();
return s
}
unix() {
var unix = Math.round((new Date()).getTime() / 1000);
return unix
}
async tables() {
return await this.query(`SHOW TABLES`)
}
async getAllMessages(id="123456"){
sql = `
SELECT msg
FROM aichat
WHERE id = ${id}`
var out = await this.query(sql)
var out = out.map((el)=>{
return this.base64decode(el.msg.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",this.bot_name))
})
return out
}
async addMsg(msg,id="123456"){
sql = "INSERT INTO aichat (`id`, `msg`, `date`) VALUES (?, ?, ?)"
var msg = msg.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",this.bot_name)
return await this.query({
sql: sql,
values: [id,this.base64encode(msg),this.unix()]
})
}
async sendToAi(history){
try{
var url = "https://api.aicloud.sbercloud.ru/public/v2/boltalka/predict";
var headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
var data = {
"instances": [
{
"contexts": [
history
]
}
]
}
var options = {
uri: url,
method: 'POST',
body: data,
headers: headers,
json: true
};
var out = await req.post(options)
return out.responses.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",this.bot_name)
} catch (e){
return e
}
}
async sendMessage(message,id="123456") {
await this.addMsg(message,id)
var history = await this.getAllMessages(id)
var airesp = await this.sendToAi(history)
await this.addMsg(airesp,id)
return airesp
}
async deleteData(id="all"){
sql = `
DELETE FROM
aichat
`
if(id!="all"){
sql = sql + `WHERE id = ${id}`
}
return await this.query(sql)
}
}
var post1 = async (options) => {
data = await req.post(options)
var status = data.statusCode
if(status==500){
return `Internal server error`
}
if(status==443){
return await post2(options)
}
return data
}
var post2 = async (options) => {
data = await req.post(options)
var status = data.statusCode
if(status==500){
return `Internal server error`
}
if(status==443){
return await post2(options)
}
return data
}
var post = async (options) => {
try{
return await post1(options)
}catch (e){
return e.statusCode
}
}
const generateText = async (text) => {
try{
var url = "https://api.aicloud.sbercloud.ru/public/v1/public_inference/gpt3/predict";
var headers = {
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15",
"Origin": "https://russiannlp.github.io",
"Referer": "https://russiannlp.github.io/"
}
var data = {"text":text};
var options = {
uri: url,
method: 'POST',
body: data,
headers: headers,
json: true
};
try {
try {
var out = await req.post(options)
} catch (e) {
var out = await req.post(options)
}
} catch (e) {
try {
var out = await req.post(options)
} catch (e) {
var out = await req.post(options)
}
}
return out
} catch (e){
return e
}
}
var summarize = async (text, num_beams=8, num_return_sequences=7, length_penalty=0.5,genstrategy=0,no_repeat_ngram_size=5) => {
try{
var url = "https://api.aicloud.sbercloud.ru/public/v2/summarizator/predict";
var headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
var data = {
"instances": [
{
"text": text,
"num_beams": num_beams,
"num_return_sequences": num_return_sequences,
"length_penalty": length_penalty,
"genstrategy": genstrategy,
"no_repeat_ngram_size": no_repeat_ngram_size
}
]
}
var options = {
uri: url,
method: 'POST',
body: data,
headers: headers,
json: true
};
try {
try {
var out = await req.post(options)
} catch (e) {
var out = await req.post(options)
}
} catch (e) {
try {
var out = await req.post(options)
} catch (e) {
var out = await req.post(options)
}
}
return out
} catch (e){
return e
}
}
var rewrite = async (text, temperature=0.95, top_k=50, top_p=0.7, repetition_penalty=1.5, num_return_sequences=5, range_mode="bertscore") => {
try{
var url = "https://api.aicloud.sbercloud.ru/public/v2/rewriter/predict";
var data = {
"instances": [
{
"text": text,
"temperature": temperature,
"top_k": top_k,
"top_p": top_p,
"repetition_penalty": repetition_penalty,
"num_return_sequences": num_return_sequences,
"range_mode": range_mode
}
]
}
var headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
var options = {
timeout: 1000*60*10,
uri: url,
method: 'POST',
body: data,
headers: headers,
json: true
};
var out = await post(options)
try{
try {
try {
var out = await req.post(options)
} catch (e) {
var out = await req.post(options)
}
} catch (e) {
try {
var out = await req.post(options)
} catch (e) {
var out = await req.post(options)
}
}
} catch(e) {
out = e
}
return out
} catch (e){
return e
}
}
async function chat(history,bot_name="Орех"){
try{
var url = "https://api.aicloud.sbercloud.ru/public/v2/boltalka/predict";
var headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
var history = history.map((el)=>{
return el.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",bot_name)
})
var data = {
"instances": [
{
"contexts": [
history
]
}
]
}
var options = {
uri: url,
method: 'POST',
body: data,
headers: headers,
json: true
};
var out = await req.post(options)
return out.responses.replaceAll("['","").replaceAll("']","").replaceAll('["',"").replaceAll('"]',"").replaceAll("%bot_name",bot_name)
} catch (e){
return e
}
}
module.exports = {
generateText,
summarize,
rewrite,
chat,
MySQLChat,
SQLite3Chat
};