UNPKG

opex-ai

Version:

AI tools: rewriter, summarizer, text generator, chat with ai, image classifier

474 lines (410 loc) 8.86 kB
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 };