refactor(server): don't use global variables

This commit is contained in:
GramingFoxTeam
2022-11-18 15:55:17 +03:00
parent e84edd3cd9
commit b3a2773393
5 changed files with 40 additions and 51 deletions

View File

@@ -1,25 +1,22 @@
import { readFileSync, writeFileSync } from 'node:fs';
import { join } from 'node:path';
export default function addTrainData(eventData) {
export default function addTrainData(eventData, __dirname, config) {
const file = readFileSync(
join(global.__dirname, global.config.fasttext.trainFile),
join(__dirname, config.fasttext.trainFile),
'utf-8'
);
const { label, text } = eventData;
if (file.includes(text)) return;
const data = file.split('\n');
const labelIndex = data.findIndex((data) => data.startsWith(label));
data.splice(labelIndex === -1 ? 0 : labelIndex, 0, `${label} ${text}`);
writeFileSync(
join(global.__dirname, global.config.fasttext.trainFile),
data.join('\n')
);
writeFileSync(join(__dirname, config.fasttext.trainFile), data.join('\n'));
return;
}

View File

@@ -1,15 +1,15 @@
import { serialize } from 'bson';
export default async function runAI(client, data) {
const predictions = await global.ft.predict(data.text);
const jsonData = {
op: 2,
id: data.id,
predictions
};
export default async function runAI(client, data, ft) {
const predictions = await ft.predict(data.text);
const bsonData = serialize(jsonData);
client.write(bsonData);
client.write(
serialize({
op: 2,
id: data.id,
predictions
})
);
return;
}

View File

@@ -1,23 +1,22 @@
import { recognize } from 'node-tesseract-ocr';
import { serialize } from 'bson';
export default async function runOCR(client, eventData) {
const config = {
lang: 'eng',
oem: 3,
psm: 3
};
const config = {
lang: 'eng',
oem: 3,
psm: 3
};
export default async function runOCR(client, eventData) {
const ocrText = await recognize(eventData.url, config);
const jsonData = {
op: 6,
id: eventData.id,
ocrText
};
const bsonData = serialize(jsonData);
client.write(bsonData);
client.write(
serialize({
op: 6,
id: eventData.id,
ocrText
})
);
return;
}

View File

@@ -1,7 +1,7 @@
import FastText from 'fasttext.js';
import { join } from 'node:path';
export default async function trainAI() {
export default async function trainAI(ftext, __dirname, config) {
const ft = new FastText({
train: {
// number of concurrent threads
@@ -39,19 +39,16 @@ export default async function trainAI() {
// load pre trained word vectors from unsupervised model
pretrainedVectors: ''
},
serializeTo: join(
global.__dirname,
global.config.fasttext.loadModel
).replace('.bin', ''),
trainFile: join(global.__dirname, global.config.fasttext.trainFile),
bin: join(global.__dirname, global.config.fasttext.bin)
serializeTo: join(__dirname, config.fasttext.loadModel).replace('.bin', ''),
trainFile: join(__dirname, config.fasttext.trainFile),
bin: join(__dirname, config.fasttext.bin)
});
global.ft.unload();
ftext.unload();
await ft.train();
global.ft.load();
ftext.load();
return;
}

View File

@@ -4,23 +4,19 @@ import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
global.__dirname = dirname(__filename);
const __dirname = dirname(__filename);
const config = JSON.parse(readFileSync('./config.json', 'utf-8'));
const configJSON = readFileSync('./config.json', 'utf-8');
const config = JSON.parse(configJSON);
global.config = config;
import { createServer } from 'node:net';
import { deserialize } from 'bson';
import FastText from 'fasttext.js';
import { runAI, trainAI, runOCR, addTrainData } from './events/index.js';
const ft = new FastText(global.config.fasttext);
const ft = new FastText(config.fasttext);
ft.load();
// I'm sorry. This is probably the only solution.
global.ft = ft;
const server = createServer(async (client) => {
client.on('data', async (data) => {
const eventData = deserialize(data, {
@@ -29,17 +25,17 @@ const server = createServer(async (client) => {
switch (eventData.op) {
case 1: {
runAI(client, eventData);
runAI(client, eventData, ft);
break;
}
case 3: {
addTrainData(eventData);
addTrainData(eventData, __dirname, config);
break;
}
case 4: {
trainAI();
trainAI(ft, __dirname, config);
break;
}
@@ -51,4 +47,4 @@ const server = createServer(async (client) => {
});
});
server.listen(global.config.server.port || 3000);
server.listen(config.server.port || 3000);